添加链接描述
baomidou在mybatis的基础上开发的一款mybatis增强框架。为简化mybatis开发而生。对mybatis只做增强不做任何改变。mp针对的单表的crud操作的简化。mp还提供了丰富的功能提高开发效率。
mysql
mysql-connector-java
com.baomidou
mybatis-plus-boot-starter
3.5.1
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/javasm?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8&useSSL=false
username: root
password: root
druid:
initial-size: 5
public interface SysuserMapper extends BaseMapper {
}
@Resource
private SysuserMapper um;
@Test
void contextLoads() {
List sysUsers = um.selectList(null);
}
以下注解都是用在实体类中的。
用在实体类上,当实体类的名称与表的名称不一致时,该注解用来指定表名。
用在实体的主键属性上,指定某个属性对应的数据库主键列,并可以指定列名
当指定了id属性后,selectById,deleteById,updateById可以使用。
在insert操作中,id支持自动生成,有如下生成策略:
ASSIGN_ID:要求属性String,数据库列类型是varchar;底层使用雪花id。
ASSIGN_UUID:随机uuid作为唯一id生成,不建议使用,太长
INPUT:自己输入,mp不做id生成。
AUTO:要求属性Integer,数据库列是数值。并启用数据库自增。
用在实体类的非主键属性上。
使用场景1:如果属性名与列名不一致;(一般不会这样)
使用场景2:实体类中的辅助属性,这些属性不属于数据库列,使用@TableField(exist = false)声明。
使用场景3:条件查询,用来指定where条件,默认是等值查询,使用 @TableField(condition = SqlCondition.LIKE)
使用场景4:默认空值也作为查询条件来进行生成,使用@TableField(whereStrategy = FieldStrategy.NOT_EMPTY)
乐观锁注解,用在实体类的属性上。避免多人更新同一条记录。
1.在数据库列添加version乐观锁列,类型是int型。
2.在实体类的成员变量添加乐观锁属性,使用Version注解。
3.注册乐观锁插件。
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
用在实体的类的属性上,用来指定排序字段。
逻辑删除注解,用在实体类的属性上。对强关联数据,不能做物理删除。
1.在数据库列添加删除标记字段deleted,0:未删除,1:已删除
2.在yml中配置逻辑删除信息
mybatis-plus:
type-aliases-package: com.javasm
global-config:
db-config:
logic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
3.整个项目组所有表的逻辑删除字段都必须叫deleted。
添加链接描述
使用方式1:接收实体对象,按照对象属性名进行where查询。比如:new QueryWrapper(接收实体对象)
Sysuser u = new Sysuser();
u.setUname("");
u.setUphone("1");
QueryWrapper queryWrapper = new QueryWrapper<>(u);
List sysusers = um.selectList(queryWrapper);
方法方式2:调用QueryWrapper对象各种方法灵活的拼接条件,比如,eq,isNull,isNotNUll,like,ge。。。。
@Test
void selectUsersByIds() {
String[] ids=new String[]{"1","2"};
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.in("uid",ids);
List sysusers = um.selectList(queryWrapper);
System.out.println(sysusers);
}
@Test
void selectUserByEmail(){
String email="[email protected]";
//按照邮箱账号查询用户
QueryWrapper w = new QueryWrapper();
w.like("uemail",email);
w.eq("uname","admin");
w.or();
w.gt("create_time","2021-12-20 10:51:41");
List list = um.selectList(w);
}
QueryWrapper两种方式可以混合用,即接收实体,也自定义条件。
应用在update方法,一般是按照其他非主键字段进行条件更新。
UpdateWrapper w = new UpdateWrapper();
w.eq("uemail","[email protected]");
Sysuser u =new Sysuser();
u.setUpwd("345");
int update = um.update(u, w);//update sys_user set upwd='345' where uemail=''
mp中有内嵌的分页插件,也支持原生的pageHelper插件。建议仍然使用原生的pageHelper分页插件
com.github.pagehelper
pagehelper-spring-boot-starter
1.3.0
com.github.jsqlparser
jsqlparser
Page p = new Page(1,2);
um.selectPage(p, null);
System.out.println(p);
要求:数据命名,主键列id,create_time,update_time.create_by,update_by,version,deleted