快速搭建Mybatis框架

来源:互联网 发布:易语言键盘记录源码 编辑:程序博客网 时间:2024/06/04 23:29

搭建Mybatis框架

1、创建工程

我创建的是一个web工程,貌似也可以创建为java工程,目录结构如下:

2、创建实体类

创建实体类:TbTeacher(属性名与数据库表中的列名一致)


创建实体类:TbStudent(属性名与数据库表中的列名不一致)


创建工具类:OrderBy(用于sql语句中排序)


3、创建mapper.xml和mapper.java

创建各个实体类的mapper.xml(Sql映射文件)和mapper.java(接口文件

说明:mapper.xml里面配置了执行各种功能的sql语句,并为每个sql语句起了一个id;

mapper.java接口文件相当于dao接口,里面只有方法;

二者的联系:

其实mapper.xml映射文件文件相当于mapper.java接口文件的实现类,不过需要满足以下两个条件:

1.mapper.xml映射文件中有一个namespace的标签,该标签需要映射到对应的mapper.java接口文件下,相当于将mapper.xml与mapper.java关联;

2.mapper.java接口文件中,每个方法的方法名,需要与mapper.xml中对应功能sql的Id一致,这样,Mybatis会自动根据sql对应的id去实现对应的方法;

创建TeacherMapper.java接口文件(因为Teacher类的属性名与列名一直,所以只简单举一个例子)


创建Teachermapper.xml映射文件


创建StudentMapper.java接口文件


创建StudentMapper.xml映射文件(属性名与列名不一致,所以mapper.xml文件中需要先使用resultMap做属性名与列名的映射,并且每个sql操作的返回值不能使用resultType,需要使用resultMap)


强调一下:只有在配置mapper.xml映射文件时,采用的是/来表示切换到子文件夹中

4、创建Test类


详解mapper.xml映射文件中的foreach标签:

1item表示集合中每一个元素进行迭代时的别名,

2index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,

3open表示该语句以什么开始,

4separator表示在每次进行迭代之间以什么符号作为分隔符,

5close表示以什么结束,

6collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的: 

a、如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .

b、如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .


当需要传入一个List,还需要传入一个其他类型的对象时,需要用map,如测试类的 多个参数 3

不难发现,在list_in2对应的sql语句中的foreach循环中,collection对应的“testArray”是封装在map中集合对应的key值,而#{teacher}中的teacher也是map中的key值。

所以可以得到结论:在传入单个list时,Mybatis是将list集合和array数组封装到了map集合中,并设置了对应的key值

mapper.xml文件中,#和$的区别

区别:

1、使用#入参,myBatis会生成PrepareStatement(预编译)并且可以安全地设置参数(=?)的值。因为sql语句已经预编译好了,传入参数的时候,不会重新生产sql语句。安全性高。
2、用$使用的是非预编译的形式,会有sql注入的问题:
例如,select * from emp where ename = '用户名',如果使用$入参,用户名被传入例如‘smith or 1 = 1’,那无论ename是否匹配都能查到结果。
3、在特定场景下,例如如果在动态排序时,这时候就可以使用$.

使用$的特定场景:

1.动态获取表名;

2.动态排序——order by

详见Test类中的排序例;


通过注解形式实现简单的增删改

1、去除mapper.xml映射文件

2、sqlMapperConfig配置文件有改动

因为不需要配置mapper.xml映射文件,所以SqlMapConfig中不用在<mapper>标签中映射各种mapper.xml文件;

但又因为mapper.xml文件的不存在,没有办法像之前那样通过namespace来映射mapper.java文件,所以这个需要在SqlMapConfig中加载mapper.java接口文件:



3、mapper.java文件有改动



Test时直接调用add方法即可

原创粉丝点击