第1章 课程简介及快速入门
1-1 课程介绍及学习前须知
1-2 MyBatis与JPA对比
既拥有mybatis的优势,又摆脱了mybatis的劣势的工具:Mybatis-Plus(MP)。
1-3 MP简介
1-4 lombok简介及安装
1-5 快速入门小例子
配置:
注:
mysql-connector-java 5中使用com.mysql.jdbc.Driver
,mysql-connector-java 6中使用com.mysql.cj.jdbc.Driver
1、JDBC连接Mysql5 com.mysql.jdbc.Driver:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
username=root
password=1234
2、JDBC连接Mysql6 com.mysql.cj.jdbc.Driver, 需要指定时区serverTimezone:
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
username=root
password=1234
在设定时区的时候,如果设定serverTimezone=UTC,会比中国时间早8个小时,如果在中国,可以选择Asia/Shanghai或者Asia/Hongkong或GMT%2B8
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?serverTimezone=Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false
username=root
password=1234
编码-实体类
编码-mapper
编码-配置mapper扫描
测试:
第2章 基本使用
2-1 通用传统模式简介及通用mapper新增方法
注:1.在执行insert的时候,MP默认只插入非null属性。2.insert的时候默认会基于雪花算法自动生成id并填充到bean中。3.默认会自动根据驼峰命名的属性匹配表中带下划线的字段,eg. manager_id匹配managerId。
2-2 常用注解
@TableName
@TableId
@TableField
2-3 排除非表字段的三种方式
如果实体类中有些属性在表中没有对应字段,需要排除掉,否则sql会报错“表中没有对应的列”。
1.triansent修饰
注:若项目中需要序列化该属性,就不能用这个方式了
2.static修饰
注:MP默认不会将静态的属性加入在sql中。但用static修饰也不好,一般项目需求是每个实例有自己的remark。
3.@TableField(exist=false) 推荐使用!
第3章 MyBatis-Plus查询方法
本章主要介绍MyBatis-Plus查询的主要内容,包括普通查询、条件构造器查询、select不列出全部字段查询等内容。
测试:
注:若实体类中某些属性的对应字段在sql的where中判断条件都是使用某种固定判断方式,则可以在该属性上@TableField注解的condition参数中指定(默认情况下是等值判断),然后就可以用实体类作为构造条件的方式替代QueryWrapper的api方式。
场景1.当表中字段比较多而我们只需要获取少数几个字段的时候,没必要返回一个对象,因为其他字段对应的属性值都为null
场景2.当查询结果不是对象的属性时
场景:只返回一列的时候
注:查询的结果必须为0条或者1条符合的记录,否则会报错TooManyResultsException!
LambdaQueryWrapper
LambdaQueryChainWrapper(MP3.0.7+)
注:list()方法继承自父接口ChainQuery<T>
第4章 自定义sql及分页查询
本章介绍MyBatis-Plus中自定义sql和分页查询的内容。
MP3.0.7+支持使用Wrapper来生成自定义sql,wrapper对应生成的sql片段用${ew.customSqlSegment}代替;
两种方式:
1.在Mapper的方法上加@Select注解写对应sql;
2.在xml文件中写对应sql(java代码与sql隔离);
注:mapper文件最好放在resource目录下,因为idea不会编译com包下的xml文件和properties文件,也就不会发布它们了,除非在pom.xml中配置<build><resource>......</resource></build>,将src/main/java中的xml和properties文件复制到classes下;
注:若自定义sql 是两表关联查询,并且where 条件的字段值在两个表中都存在,会出现字段值不明确的错误。这种情况,在where中你需要“表别名.列名”就可以了。例如:条件构造器中的条件可以这样写,wrapper.eq("a.name","某某")
Mybatis | RowBounds类 | 内存分页(逻辑分页) |
Mybatis | PageHelper插件 | 物理分页 |
MP | paginationInterceptor插件 | 物理分页 |
注:默认情况下还会执行一条查询总记录数的sql,若业务需求不需要总记录数可通过设置Page的isSearchCount参数为false
注:分页插件对于自定义的sql同样可以生效
第5章 更新及删除
介绍MyBatis-Plus中更新和删除功能的使用。
UpdateQuery
注:特有方法set()
LambdaUpdateQuery
LambdaUpdateChainQuery(MP3.0.7+)
-
5-2 删除方法
- 根据id删除的方法
- 其他普通删除方法
- 以条件构造成为参数的删除方法
第6章 AR模式、主键策略和基本配置
本章介绍MyBatis-Plus中的AR模式、主键策略和基本配置等内容。