首先引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
mybatis-plus是mybatis的增强工具,提高了效率。
持久层只需实现继承BaseMapper接口便可以直接进行操作
public interface RoleMapper extends BaseMapper<TabRole>//需要放入泛型
在BaseMapper接口中我们可以直观的看所实现的功能
int insert(T entity);
int deleteById(Serializable id);
int deleteByMap(@Param("cm") Map<String, Object> columnMap);
int delete(@Param("ew") Wrapper<T> queryWrapper);
int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
int updateById(@Param("et") T entity);
int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
T selectById(Serializable id);
List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
T selectOne(@Param("ew") Wrapper<T> queryWrapper);
Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
<E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);
<E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
做所有查询时直接调用即可使用(默认是驼峰命名法)
queryWrapper 是查询的条件
void test() {
QueryWrapper<TabRole> wrapper = new QueryWrapper<>();
wrapper.between("role_id", 1, 4);//
wrapper.like("role_state", "0");
List list = roleMapper.selectList(wrapper);
System.out.println(list);
}
执行sql如下
Preparing: SELECT role_id,role_name,role_code,role_desc,role_state,
operator_name,operator_id,
operator_time,insert_time FROM tab_role
WHERE role_state=0
AND (role_id BETWEEN ? AND ? OR role_state LIKE ?)
其他调用也十分简单 直接调用关键词即可如更新roleMapper.updateById(role)、删除 roleMapper.deleteById(id);等
2.实体类注解的的应用
1)主键
主键需要声明@TableId
@TableId(type = IdType.AUTO)
private Long roleId;
type有几种类型AUTO-数据库自增,NONE-MP set主键,雪花算法实现,
INPUT-需要开发者手动赋值,ASSIGN_ID-MP分配ID,Long、Integer.String,
ASSIGN_UUID-分配UUID,String
NONE 自动生成主键需要注意 主键数据类型需要将int转换为long,数据库表长度也要改
INPUT 如果没有对主键ID赋值数据库将为0,如果有自增编号+1
2)日期自动填充
实现该功能需要对字段添加注解
@TableField(fill = FieldFill.INSERT_UPDATE)//更新和插入的时候填充
private Date operatorTime;
@TableField(fill =FieldFill.INSERT )
private Date insertTime;
配置文件
@Configuration
public class MyConfig implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
//插入时insertTime字段自动填充当前时间
this.strictInsertFill(metaObject, "insertTime", Date.class, new Date());
this.strictInsertFill(metaObject, "operatorTime", Date.class, new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
//更新时自动填充当前时间
this.strictUpdateFill(metaObject, "operatorTime", Date.class, new Date());
}
}
3)分页
运用分页插件的时候也需要配置
@Configuration
public class MyConfig implements MetaObjectHandler {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
然后调用Page类调用
Page<TabRole> tabRolePage = new Page<>(page.getPage(), page.getLimit());
List<TabRole> list = roleMapper.selectList(null);