一、mybatis框架

  mybatis框架主要就是完成持久层的实现,简化了持久层的开发,

  1.首先是配置文件的编写,我们这里就命名为mybatis-config.xml,先配置文件头,然后加载连接数据库的配置propersties文件,为实体类取别名省的后续在返回值的时候仍使用包名.类名的方式,下边可以设置映射级别,然后再配置数据库的连接,下边的mappers的标签中配置每一个dao接口的对应的mapper文件(注意这里使用有三种方式 class、resource)package标签的name的属性配置指定文件包下的映射文件,

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="dev-db.properties"></properties>
<!--配置别名-->
<typeAliases>
<package name="com.song.pojo"/>
</typeAliases> <!--配置数据库环境-->
<environments default="devlopment">
<environment id="devlopment">
<transactionManager type="jdbc"></transactionManager>
<!--连接池-->
<dataSource type="pooled">
<property name="username" value="${username}"/>
<property name="password" value="${pwd}"/>
<property name="url" value="${url}"/>
<property name="driver" value="${driver}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/song/dao/Igrade.xml"></mapper>
</mappers>
</configuration>

 2.映射文件,这里一般命名为***mapper.xml文件,再idea的位置是resource文件目录下,创建于dao接口同名同级的文件目录,然后导入文件头(文件约束),mapper标签中的namespace属性填写上其对应dao接口的路径,下边写每一个查询语句,select 返回数据类型可以是全限定的实体类名,也可以是前边配置的别名,这里如果是数据库的列名和实体类的字段名一致,mybatis就可以为你进行自动的映射,如果有 一对一,一对多,多对多的映射关系,就需要手动的去指定其对应关系,resultmap标签,collection一对多  association标签 多对多关系映射  ,传入的参数的属性可以不写,但是返回的值的类型就必须要写上,dml语句的返回就是int类型,所以他没有返回值的属性,这里要说下复杂的动态的SQL语句,需要用到where标签,if标签,拼接字符串用concat(‘%‘,#{id},'%')foreach遍历等

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="com.wgg.dao.AdminDao">
<!--查询所有的用户 -->
<select id="getAllAdmin" resultType="com.wgg.pojo.Admin">
select * from admin
</select> <!--根据名字来查 我们在写查询语句的时候 ?表示占位符 在mybatis中 就用#{}来表示占位 而且名字最好和传入的参数一致 .给返回值类型在配置文件中起别名
以简化这个字符串的书写 -->
<select id="getAdminByName" resultType="Admin">
select * from admin where
username=#{name}
</select> <!-- 根据id和名字来查 此时的参数 有两个 可以将parameterType 定义写成对象的类型 他会自动映射 传入的username=#{username}要和
表中的字段一致 -->
<select id="getAdminByAdmin" resultType="Admin"
parameterType="Admin">
select * from admin where username=#{username} and
id=#{id}
</select> <!-- 分开传入两个字符串的参数来查询 -->
<select id="getAdminByNameAndId" resultType="Admin">
select * from admin
where username=#{username} and id=#{id}
</select> <!-- 模糊查询 -->
<select id="getAdminWithPnameLike" resultType="Admin">
select * from
admin where username like CONCAT('%',#{pname},'%')
</select> <!-- 传入一个数组作为参数 用来子查询 -->
<select id="getAdminWithArray" resultType="Admin">
select * from admin where id in
<foreach collection="array" open="(" separator="," close=")"
item="idarr">
#{idarr}
</foreach>
</select> <!-- 传入一个集合来遍历集合查询 -->
<select id="getAdminWithIdList" resultType="Admin">
select * from admin where id in
<foreach collection="list" open="(" separator="," close=")" item="idList">
#{idList}
</foreach>
</select>
<!-- map集合 -->
<select id="getAdminWithMap" resultType="Admin">
select * from admin where username=#{username} and password=#{password}
</select> <!-- 增删改 --> <!-- 增加对象信息 传入一个对象-->
<insert id="addAdmin">
insert into admin (username,password)values(#{username},#{password})
</insert> <!-- 删除 对象信息 传入一个id-->
<delete id="delAdminById">
delete from admin where id=#{id}
</delete> <!--修改用户的信息 传入一个string -->
<update id="UpdateAdmin">
update admin set username =#{username} where id=#{id}
</update> <!-- 多条件查询 动态sql 相当于 多条件的模糊查询-->
<select id="getAllAdminInfoByFazzy" resultType="Admin">
select * from admin
<!-- 你可以使用where标签来解决这个问题,where 元素只会在至少有一个子元素的条件返回 SQL
子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。 -->
<trim prefix="where" prefixOverrides="and | or">
<if test="username!=null"> and username=#{username}</if>
<if test="password!=null">and password=#{password}</if>
</trim>
</select> <!-- Switch -->
<select id="getAllAdminInfoBySwitch">
select * from admin
<choose>
<!-- 进入一个when其他的when 就不再进入了 -->
<when test="username!=null">and username=#{username}</when>
<when test="password!=null">and password=#{password}</when>
<!-- 查询所有 -->
<otherwise></otherwise>
</choose>
</select> </mapper>

3.关于dao的接口,因为mybatis框架,所以我们不用再写复杂的实现类,只需要编写接口就行了,再向mapper文件传参数的时候,如果只有一个参数就和占位符中的名称相同就可以了,多个参数的话,就需要用到对象,集合或者map来传输数据,数组,此时需要遍历取值的就要使用  如:foreach collection="array" 这样的指定容器的类型,然后遍历。如果多个不同的参数可以使用map来指定,只要将他的键指定成占位符中的名称一致就行了,如果传入不同的参数也可以,再dao的接口传参的地方用@parma()注解指定每一个参数,但这样太麻烦,还是用map集合吧,

    // 根据id和name来查询对象
public Admin getAdminByNameAndId(@Param("username") String name, @Param("id") int id); // 模糊查询
public Admin getAdminWithPnameLike(String pname); // 传入数组作为参数来查询
public List<Admin> getAdminWithArray(int[] idarr); // 传入集合作为参数来查询
public List<Admin> getAdminWithIdList(List<Integer> idList); //
public Admin getAdminWithMap(Map<String, String> idmap); public int addAdmin(Admin admin); public int delAdminById(int id); //修改用户
public int UpdateAdmin(@Param("username")String username, @Param("id")Integer id);
//模糊多条件查询
public List<Admin> getAllAdminInfoByFazzy(@Param("username")String username,@Param("password")Integer password); //Switch
public List<Admin> getAllAdminInfoBySwitch(@Param("username")String username,@Param("password")Integer password);

4.导入依赖,mybatis用到的jar包不多

        <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.</version>
</dependency> <!-- 数据库依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.</version>
</dependency>

这基本是就是mybatis的框架的基本书写流程了

ssm框架的小总结的更多相关文章

  1. SSM框架CRUD小案例

    1.数据库准备 部门tbl_dept 员工tbl_emp 建立员工和部门的外键 2.在IDEA创建SSM项目环境 2.1配置Web模块 最上面的图是错误示范,注意!!! 在Tomcat配置了项目路径, ...

  2. (SSM框架)实现小程序图片上传(配小程序源码)

    阅读本文约"2分钟" 又是一个开源小组件啦! 因为刚好做到这个小功能,所以就整理了一下,针对微信小程序的图片(文件)上传! 原业务是针对用户反馈的图片上传.(没错,本次还提供小程序 ...

  3. ssm框架与shiro的整合小demo,用idea开发+maven管理

    shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...

  4. 小菜鸟之SSM框架

    # SSM框架 # **什么是框架** 就是模板,将一些基础性的程序和代码由框架模板提供,然后程序员补充和业务需求相关的代码. # **ssm框架组成** s: springMvc 子框架 代替ser ...

  5. SSM框架——以注解形式实现事务管理

    上一篇博文<SSM三大框架整合详细教程>详细说了如何整合Spring.SpringMVC和MyBatis这三大框架.但是没有说到如何配置mybatis的事务管理,在编写业务的过程中,会需要 ...

  6. 百度富文本编辑器ueditor在jsp中的使用(ssm框架中的应用)

    折腾了一下午终于把百度富文本编辑器ueditor搞定了!   项目地址:https://github.com/724888/lightnote_new     首先我参考了一个ueditor的demo ...

  7. 整合最优雅SSM框架:SpringMVC + Spring + MyBatis

    我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教学课堂中,也会把SSH作为最核心的教学内容. 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配 ...

  8. 最优雅SSM框架:SpringMVC + Spring + MyBatis

    在写代码之前我们先了解一下这三个框架分别是干什么的? 相信大以前也看过不少这些概念,我这就用大白话来讲,如果之前有了解过可以跳过这一大段,直接看代码! SpringMVC:它用于web层,相当于con ...

  9. 手把手教你 基础 整合最优雅SSM框架:SpringMVC + Spring

    我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教学课堂中,也会把SSH作为最核心的教学内容. 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配 ...

随机推荐

  1. python中重要的概念:类(class)

    1.名词解释 类:类代表了具有相同特征的一类事物(人) 对象.实例:具体的某一个事物或者是人 实例化:将类变成对象的这么一个过程,即新建一个对象的过程,就是对类的一个实例化过程. 2.格式 函数定义: ...

  2. Mac出现程序闪退的解决方案

    重置PRAM 1. 关机 2.按下电源键后,立即按下command + option + P +R 3.等到电脑出现4次重启的声音后,放开按键,重置成功 4.正常使用

  3. 微信小程序开发入门教程(二)---分析官方云开发例子中的一些功能

    接上一篇文章:https://www.cnblogs.com/pu369/p/11326538.html 1.官方云开发的例子中,点击获取 openid,对应代码在E:\wxDEV\helloyun\ ...

  4. Java面向对象5(V~Z)

    计算各种图形的周长(接口与多态)(SDUT 3338) import java.util.Scanner; public class Main { public static void main(St ...

  5. JS如何实现在微信中调用外部浏览器打开指定链接

    使用方法,复制以下贴到index.php 顶部就可以了.场景 比如网页包含视频播放  在QQ\WX打开QQ\WX直接调用自己的播放器播放,而且播放完成还有AD推送,非常恶心,所以有了以下代码有乱码的话 ...

  6. 第七章 python基础之函数,递归,内置函数

    五 局部变量和全局变量 name='cyj' #在程序的一开始定义的变量称为全局变量. def change_name(): global name #global 定义修改全局变量. name=&q ...

  7. 转载: Windows下两种iocp实现的差距

    转自:http://blog.csdn.net/oldworm/article/details/6171430 之前几天说过,因为经典iocp实现(以下简称经典实现)多个io线程绑定在一个iocp上, ...

  8. Flume-Spooling Directory Source 监控目录下多个新文件

    使用 Flume 监听整个目录的文件,并上传至 HDFS. 一.创建配置文件 flume-dir-hdfs.conf https://flume.apache.org/FlumeUserGuide.h ...

  9. [学习]sentinel中的DatatSource(一) ReadableDataSource

    sentinel是今年阿里开源的高可用防护的流量管理框架. git地址:https://github.com/alibaba/Sentinel wiki:https://github.com/alib ...

  10. 用PHP自带函数对二维数组进行排序

    经常会面临这样的需求,虽然有时候我们可以在数据库查询的时候,直接对数据进行排序,但还是无法满足日益复杂的业务需求. 这里边会用到两个函数 一个是array_column()函数,这个函数接受三个参数. ...