MyBatis vs JPA
MyBatis
优势:
1、sql语句可以自由控制,更灵活,性能较高
2、sql语句与代码分离,易于阅读和维护
3、提供xml标签,支持编写动态sql语句
劣势:
1、简单的crud也要写sql
2、xml中有大量的sql维护
3、自身功能有限,但支持plugin
JPA
优势:
1、移植比较好 jpql
2、提供了很多crud方法、开发效率高
3、对象化程度高
Mybatis-Plus 只做增强 不做改变
Mybatis-Plus
特性:
1、无侵入、损耗小、强大crud
2、支持lambda 多种数据库
3、主键自动生成,支持ActiveRecode
4、支持自定义全局通用操作,支持关键词自动转义
5、内置代码生成器、内置分页插件、内置性能分析插件
6、内置全局拦截插件、内置sql注入剥离器
pom:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
lombok
Create
新增
常用注解 @TableName("User") @TableId @TableField("name")
排除非表字段
1.transient 不能序列化
2.static 生成get set 全类一个
3.@TableField(exist=false)
Retrieve
普通查询
单个:selectById
多个:selectBatchIds
条件查询: selectByMap
条件构造器查询
selectOne
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name","roger").lt("age",30);
User user1 = userMapper.selectOne(queryWrapper);
selectList
List<User> users = userMapper.selectList(queryWrapper);
queryWrapper.apply("date_format(create_time,'%Y-%m-%d'='2019-04-02')").inSql("manager_id","select id form user where name like '王%'");
// 格式化输出 可以避免 sql注入风险
queryWrapper.apply("date_format(create_time,'%Y-%m-%d')={0}","2019-04-02").inSql("manager_id","select id form user where name like '王%'");
lambda 表达式 or 优先级小于 and
queryWrapper.likeRight("name", "王").and(wq->wq.lt("age",40).or().isNotNull("email"));
select中不查询全部的字段
queryWrapper.select("age","name").isNotNull("email");
反向排除
queryWrapper.select(User.class,info -> !info.getColumn().equals("name")).isNotNull("email");
condition 条件查询
创建条件构造器传入实体
allEq
selectMaps
selectObjs
selectCount
selectOne 确保一条记录
lambda条件构造器
LambdaQueryWrapper<User> userLambdaQueryWrapper = Wrappers.<User>lambdaQuery();
userLambdaQueryWrapper.like(User::getAge,"20")
条件构造器自定义sql
分页功能
@Configuration
public class MyBatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
Page<User> page = new Page<User>(1, 2);
IPage<User> iPage = userMapper.selectPage(page, queryWrapper);
IPage<Map<String,Object>> mapIPage = userMapper.selectMapsPage(page, queryWrapper);
Update
id
update wrapper
lambda 更新
Delete
id
普通删除
条件构造器删除
AR模式 - Active Record
一是实体需要继承Model类,二是必须存在对应的原始mapper并继承baseMapper并且可以使用的前提下,才能使用此 AR 模式
主键策略 uuid auto id_work_str…
通用service