@Data
@TableName(value = "tb_employee")//指定表名
public class Employee {
//value与数据库主键列名一致,若实体类属性名与表主键列名一致可省略value
@TableId(value = "id",type = IdType.AUTO)//指定自增策略
private Integer id;
//若没有开启驼峰命名,或者表中列名不符合驼峰规则,可通过该注解指定数据库表中的列名,exist标明数据表中有没有对应列
@TableField(value = "last_name",exist = true)
private String lastName;
private String email;
private Integer gender;
private Integer age;
}
mybatis-plus是基于mybatis,相对于mybatis,他有许多特性是比较好用的,比如分页查询、表字段自动转换为实体类属性等,使用mybatis-plus与Spring Data JPA有点相似的地方,个人觉得mybatis-plus的分页比JPA的分页好用。其实在mybatis-plus官网上已经有很详细的教程了,在这里写博客也是为了自己能够更好的整理思路。先上一下官网基于springboot教程地址:https://baomidou.oschina.io/mybatis-plus-doc/#/spring-boot
1.添加pom引用
maven的引用很简单,官方已经给出starter,不需要我们考虑它的依赖关系了,此处使用的是2.3版本。
com.baomidou
mybatis-plus-boot-starter
2.3
2.配置
官方已经提供了基于springboot的配置,将其拷贝过来放在application.yml中即可使用,此处只是将官方部分的配置删减过一些。其中column-underline: true特别好用,会自动将下划线格式的表字段,转换为以驼峰格式命名的属性。
mybatis-plus:
global-config:
db-config:
id-type: auto
field-strategy: not_empty
#驼峰下划线转换
column-underline: true
#逻辑删除配置
logic-delete-value: 0
logic-not-delete-value: 1
db-type: mysql
refresh: false
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
3.使用
1.创建实体类,创建实体类与JPA特别相似,其中@TableName注解是为了指定此实体类对应数据库的哪一张表;@TableId指定的是主键,type属性指定的是该主键自增的方式,AUTO代表自增,UUID代表使用UUID增加主键;还有一个注解@TableFiled,此注解主要用在非主键实体属性上,下面是官方给出的此注解所有属性。
值 | 描述 |
---|---|
value | 字段值(驼峰命名方式,该值可无) |
update | 预处理 set 字段自定义注入 |
condition | 预处理 WHERE 实体条件自定义运算规则 |
el | 详看注释说明 |
exist | 是否为数据库表字段( 默认 true 存在,false 不存在 ) |
strategy | 字段验证 ( 默认 非 null 判断,查看com.baomidou.mybatisplus.enums.FieldStrategy ) |
fill | 字段填充标记 ( FieldFill, 配合自动填充使用 ) |
生成一个实体类实例
@TableName("t_patrol_task")
public class PatrolTaskEntity {
@TableId(value = "id",type = IdType.AUTO)
private Integer id;
private Integer jobId;
Getter…
Setter….
}
2.创建mapper,与JPA有相像之处。使用@Mapper为了把mapper这个DAO交給Spring管理,且可以不再写mapper映射文件;继承BaseMapper可以方便使用mybatis-plus方法,泛型需要写对用的实体类。此处直接使用slelect * from,mybatis-plus会根据实体类自动驼峰转下划线映射到表的字段中。
@Mapper
public interface PatrolTaskMapper extends BaseMapper {
@Select("select * from t_patrol_task where id = #{id} and deleted_at is null")
PatrolTaskEntity queryByIdAndDeletedAtIsNull(@Param(“id”) Integer id);
}
4.条件构造器
1.查询单条数据,非主键查询,只要在一个实体内写入属性,然后再用mybatis-plus自带的selectOne()方法即可查询(注意:查询的限制条件必须此条数据是唯一的,不然查询后会报错)。个人觉得此种查询使用不便,不如直接使用nativeSql进行查询来的利索。
PatrolJobLogEntity jobLogEntity = new PatrolJobLogEntity();
jobLogEntity.setJobId(12);
jobLogEntity.setTaskFinished(30);
patrolJobLogMapper.selectOne(jobLogEntity);
2.查询数量,含有拼接方式查询。使用mybatis-plus条件查询需要使用到EntityWrapper构造器,它能添加查询的条件,如:.eq(“job_id”,13)表示查询job_id=13的记录,isNull(“deleted_at”)表示deleted_at必须为null(注意:此处查询的条件是使用的是数据库表中的字段名称)。
EntityWrapper wrapper = new EntityWrapper<>().eq("job_id",13).isNull("deleted_at");
List tasks = patrolTaskMapper.selectCount(wrapper);
3.查询列表,与上面基本相同,只不过此处使用的是mybatis-plus的selectList()方法
EntityWrapper wrapper = new EntityWrapper<>().eq("job_id",13).isNull("deleted_at");
List tasks = patrolTaskMapper.selectList(wrapper);
拼接sql查询方式:
查询方式 | 说明 |
---|---|
setSqlSelect | 设置 SELECT 查询字段 |
where | WHERE 语句,拼接 + WHERE 条件 |
and | AND 语句,拼接 + AND 字段=值 |
andNew | AND 语句,拼接 + AND (字段=值) |
or | OR 语句,拼接 + OR 字段=值 |
orNew | OR 语句,拼接 + OR (字段=值) |
eq | 等于= |
allEq | 基于 map 内容等于= |
ne | 不等于<> |
gt | 大于> |
ge | 大于等于>= |
lt | 小于< |
le | 小于等于<= |
like | 模糊查询 LIKE |
notLike | 模糊查询 NOT LIKE |
in | IN 查询 |
notIn | NOT IN 查询 |
isNull | NULL 值查询 |
isNotNull | IS NOT NULL |
groupBy | 分组 GROUP BY |
having | HAVING 关键词 |
orderBy | 排序 ORDER BY |
orderAsc | ASC 排序 ORDER BY |
orderDesc | DESC 排序 ORDER BY |
exists | EXISTS 条件语句 |
notExists | NOT EXISTS 条件语句 |
between | BETWEEN 条件语句 |
notBetween | NOT BETWEEN 条件语句 |
addFilter | 自由拼接 SQL |
last | 拼接在最后,例如:last(“LIMIT 1”) |
5.分页
1.添加配置文件,此处配置文件表示开启mybatis-plus分页功能
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
2.写查询语句,此出的Pagination必须给出,不然无法完成分页功能。
@Mapper
public interface BannerLogMapper extends BaseMapper {
@Select("select * from t_pub_banner_logs")
List queryLogByPage(Pagination page);
}
3.进行分页查询代码块,只需要将要查询的第几页也页面大小写入到Page对象中。然后进行查询,查询后分页属性(当前页,总页数、总条数), 是经过插件自动回写到传入page对象中。
Page page = new Page<>(pageNo,pageSize);
List bannerLogs = bannerLogMapper.queryLogByPage(page);
page.getTotal();
page.getCurrent();
page.getPages();
6.其他
关于mybatis-plus其他功能,代码生成器、性能分析插件、执行分析插件、多数据源处理等可以自行到官网查看学习。
原文链接:https://blog.csdn.net/zc_ad/article/details/83301911