Mybatis的核心组件,在其中可以配置各类SQL语句和动态SQL、缓存、级联等内容
二、实现方式:①java接口(interface)+注解(简单SQL)
②java接口(interface)+XML文件(简单和复杂SQL都可)
三、注解实现映射器 ①创建与表对应的实体类src→java→com.xxx下创建文件类entity,在entity中创建java类
规则:
1)实体类名对应表名
2)类中的属性名与表中的列一致
3)属性数据类型与列的数据类型匹配
注:使用idea数据库链接工具来生成实体类
idea右侧选中数据库,在d出的工具栏中,新建→数据源→MYSQL→设置驱动程序、host、port、用户名、密码、数据库名→测试连接→成功后点击应用并确认(设置完数据源后,如果找不到想要的数据库,点击旁边的1of10添加)
在数据库工具栏中选中想要生成的表→右键→脚本扩展→转到脚本目录→左侧项目结构中找到Generate POJOs grovy→将G。。文件中的packageName属性值改为实体类文件的目录的路径→回到脚本扩展中选择Generate POJOs groovy→选中实体类目录→确认
②生成公共访问方法右键→Generate→Getter and Setter→选中要生成方法的属性
作用:因为数据库结构要保密,对应的实体类属性为私有属性无法直接访问,所以要提供公共的访问方式。通过公共访问方法可以设置或者获取pojo中的值,比如使用mapper方法从数据库取出News实体类的pojo对象然后使用getTitle()或者getDate()方法获取值或者像下面的test类那样创建News实体对象然后使用setTitle()和getDate()方法设置对象的值。
③创建java接口文件在entity同级目录下创建mapper,并在mapper中新建接口类(interface),添加方法和注解
④生成并编写测试类方法:在mapper接口文件中用鼠标选中目标方法,按下ctrl+shift+T或者选中public interface xxx然后在左侧的黄灯泡中选择创建测试→选择你想要生成测试的方法
注:
①生成的文件在src→test→java→com.xxx→mapper下
②不能在src目录中使用@Test来创建test类
生成后,编写测试类,并运行方法(save())
运行结果:
四、XML文件实现映射器 ①实体类与注解映射器一样(不过目录名从entity改为po) ②java接口文件中不需要写注解,只需要写方法(多了@Repository) ③创建xml文件目录并配置路径
在resources中创建mappers文件夹→在application.properties中设置映射文件目录
④编写xml文件1)先添加规范(固定内容)
2)接口中方法的具体实现(举例)
-
①namespace:写要绑定的mapper接口的全路径名称,这样mybatis会自动将你的mapper接口文件和xml文件连起来
②在
- 常见标签
标签中可以直接使用SQL语句(因此可以先在数据库可视化软件中编写可执行的SQL语句,然后直接复制到标签中)
- 常见属性
①id:此段SQL执行语句对应的接口方法名称
②parameterType:接口方法传入的参数类型
③resultType:接口方法定义的返回值参数类型
注:parameterType和resultType的参数类型:
⑴基本类型:int、Integer、double、String等
⑵pojo对象(实体类对象):例如:para...="com.xxx.entity.News"
⑶Map类型
(4)数据有很多条时。比如:从数据库中提取很多条数据,返回的结果是list类型时,此时resultType(parameterType)的值仍然写成resu....="com.xxx.entity.News",而不是写成resu...="java.util.List",对应接口方法类型List
(5)多个不同的参数:mybatis parametertype 多个参数
- #{}和${}:
相同:都可以接收ParameterType传入的值。例title=#{title},第一个是数据库中的属性,第二个title是传入的参数
不同:#{}是预编译处理,给传入的数据加个“”
${}是直接替换
例:value=001 #{value}="001" ${value}=001
注:①${}不能防止sql注入,而#{}能。
例:select * from user where id = ${value} 若用户传的value是001;drop table user,这
样就直接把表删了
②${}可以用在模糊查询中
id like '%${value}%'(%是任意字符,_是一个任意字符)
- 注:使用mapper接口方式必须满足:
1.映射文件的namespace的值必须是接口的全路径名称
比如:com.sxt.dao.UserMapper
2.接口中的方法名在映射文件中必须有一个和id值对应
3.映射文件的名称必须与接口的名称一致
①作用:对页面和数据库间传输的数据进行封装,提供定制化服务
②原理:一张表有很多属性,而客户端只对部分属性有要求,因此将数据全部来回传输,即浪费时间和带宽又会暴露表的结构和重要数据(密码等)。而创造一个类(DTO,与PO类似)只封装客户端需要的属性,就可以避免这种问题。
注:
1)每个 *** 作都应该有个DTO,但这样DTO就会爆炸增长,因此开发者一般复用冗余数据可以接受的DTO,而不是建很多DTO。
2)DTO的内容可以和PO相同,但不可以继承PO,他们应该独立
3)PO不可以用来传输,应该建立一个和PO内容相同的DTO
不是严格的企业开发的话,可以降低上述要求,甚至不使用DTO
六、动态SQL①作用:使用jdbc时,会遇到多条件的情况,比如:查询人可用姓名、id、备注等,当id为空时使用姓名作为查询条件。若使用拼接的SQL语句会非常复杂,因此mybatis提供了动态SQL。
②常用标签(写在
具体写法自查
③注:
1)在xml中,<用<表示,其他不变(>、=)
2)test=“xxx”中的属性可以直接取值,不需要#{}
3)判断属性值为空:test="xxx !=null and xxx != ''(双单引号无空格)"
七、关联映射①作用:用于SQL表中的连接查询
②步骤:(一对一映射,以dept(ename,...,deptno)和emp(deptno,dname,...)为例)
1)编写表连接的SQL语句
select e.name, d,name from emp e, dept d where e.deptno = d.deptno
2)在DTO中添加关联表的映射对象(从表类创建主表类的对象,外键引用的是主表)
public class Emp{ emp的属性 private Dept dept; emp的getter and setter }
3)xml中编写映射关系,配置列与类中的属性的对应关系,使用
(主键) ....................
4)编写select节点
③以上是一对一,一对多类似(类中多加个对象、xml中多写个)
八、MybatisX(下载方法自查)作用:基于 IDEA 的快速开发插件,用于快速制作Mapper映射器。
功能:java接口和xml之间跳转、自动生成xml、检查错误
九、分页插件mybatis的插件,使用pom添加依赖
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)