mybatis-plus
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
1、添加依赖:
<dependency>
<groupId>com.baomidou
</groupId>
<artifactId>mybatis-plus-boot-starter
</artifactId>
<version>3.3.2
</version>
</dependency>
(1)、application.yml中的mybatis-plus参数配置
mybatis-plus:
mapper-locations: classpath:mapper/*.xml #xml所在位置 不设置默认是在mapper类同级
type-aliases-package: com.example.demo.*.entity #对应的实体类
configuration:
mapUnderscoreToCamelCase: true # 开启驼峰匹配 默认为true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印sql语句和入参数据
global-config:
db-config:
logic-delete-value: 1 #逻辑删除 配合@TableLogic注解
logic-not-delete-value: 0 #逻辑不删除
update-strategy: not_null # 更新时字段如果为null,就不进行更新该字段。
insert-strategy: not_null # 插入时如果字段为null,就不插入数据,建议数据库表字段设置默认值
2、添加分页和mapper扫描
启动类
在启动类添加 @MapperScan 就不用再 UserDao 上用 @Mapper 注解。
@SpringBootApplication
@MapperScan("cn.rj.springboot.dao")
public class SpringBootMybatisPlusApplication {
public static void main(String
[] args
) {
SpringApplication
.run(SpringBootMybatisPlusApplication
.class, args
);
}
}
分页
@Configuration
public class MybatisPlusConfiguration {
@Bean
public PaginationInterceptor
paginationInterceptor() {
PaginationInterceptor page
= new PaginationInterceptor();
page
.setDbType(DbType
.MYSQL
);
page
.setDialect(new MySqlDialect());
page
.setCountSqlParser(new JsqlParserCountOptimize(true));
page
.setLimit(999L
);
return page
;
}
}
3、实体类的创建
@TableName(value="t_user")
public class UserEntity {
@TableId(value="id",type=IdType.AUTO)
private Long id;
private String userName;
private String userSex;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
}
@TableName 指定数据库表名,否则默认查询表会指向 user_entity ;@TableId(value=”id”,type=IdType.AUTO) 指定数据库主键,否则会报错。
4、创建一个Mapper类继承BaseMapper,就可以简单使用了。
可以参考官方文档入门:https://mp.baomidou.com/guide/quick-start.html
继承 BaseMapper,T表示对应实体类
public interface UserDao extends BaseMapper<UserEntity>{
}
5、示例:
5.1 新增用户
UserEntity user
=new UserEntity();
user
.setUserName("洋洋");
user
.setUserSex("男");
userDao
.insert(user
);
5.2 根据id修改用户
UserEntity user
=new UserEntity();
user
.setUserName("洋洋");
user
.setUserSex("男");
user
.setId(01L
);
userDao
.updateById(user
);
根据entity条件修改用户信息
UserEntity user
=new UserEntity();
user
.setUserSex("女");
userDao
.update(user
,new QueryWrapper<UserEntity>().eq("user_name", "洋洋"));
5.3 根据ID查询
UserEntity user
= userDao
.selectById(id
);
根据entity的条件查询总记录数
int count
= userDao
.selectCount(new QueryWrapper<UserEntity>().eq("user_sex", "男"));
根据entity条件查询一条记录,返回的是实体
(*如果表内有两条或以上的相同数据则会报错,可以用来判断某类数据是否已存在 根据entity条件查询返回第一个字段的值(返回id列表))
QueryWrapper
<UserEntity> queryWrapper
=new QueryWrapper<UserEntity>();
UserEntity user
=new UserEntity();
user
.setUserName("洋洋");
user
.setUserSex("男");
queryWrapper
.setEntity(user
);
user
= userDao
.selectOne(queryWrapper
);
根据map条件查询返回多条数据
Map
<String, Object> map
=new HashMap<String, Object>();
map
.put("user_name", username
);
map
.put("user_sex",sex
);
List
<UserEntity> list
= userDao
.selectByMap(map
);
根据entity条件查询返回多条数据(List)
Map<String, Object> map=new HashMap<String, Object>();
map.put("user_sex","男");
List<UserEntity> list = userDao.selectList(new QueryWrapper<UserEntity>().allEq(map));
根据entity条件查询返回多条数据(List )</map
Map<String, Object> map=new HashMap<String, Object>();
map.put("user_sex","男");
List<Map<String, Object>> list = userDao.selectMaps(new QueryWrapper<UserEntity>().allEq(map));
根据ID批量查询
List<Long> ids=new ArrayList<Long>();
ids.add(1L);
ids.add(2L);
ids.add(3L);
List<UserEntity> list = userDao.selectBatchIds(ids);
主键ID列表(不能为 null 以及 empty)
分页查询
Page
<UserEntity> page
=userDao
.selectPage(new Page<>(1,5), new QueryWrapper<UserEntity>().eq("user_sex", "男"));
Page
<Map
<String, Object>> page
=userDao
.selectMapsPage(new Page<>(1,5), new QueryWrapper<UserEntity>().eq("user_sex", "男"));
需先配置分页插件bean,否则分页无效。如有pagehelper需先去除,以免冲突。 new Page<>(1,5),1表示当前页,5表示页面大小。
5.4 删除
根据id删除用户
userDao.deleteById(1);
根据entity条件删除用户
userDao.delete(new QueryWrapper<UserEntity>().eq("id", 1));
根据map条件删除用户
Map<String, Object> map=new HashMap<String, Object>();
map.put("user_name", "zwqh");
map.put("user_sex","男");
userDao.deleteByMap(map);
根据ID批量删除
List<Long> ids=new ArrayList<Long>();
ids.add(1L);
ids.add(2L);
ids.add(3L);
userDao.deleteBatchIds(ids);
主键ID列表(不能为 null 以及 empty)