一、特性
Mybatis应该大家现在都知道,而且在项目中都在使用,因为这块ORM框架让大家能专心业务SQL的编写,数据库的连接,连接池的使用都不用关心,极大的提高了生产效率。
今天要给大家介绍的另外一款ORM框架,是Mybatis Plus,这块工具正如其官网说的:
1)润物无声
只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。
2)效率至上
只需简单配置,即可快速进行单表CRUD操作,从而节省大量时间。
3)丰富功能
代码生成、自动分页、逻辑删除、自动填充功能。
二、实战
1)相关依赖
还等什么,赶紧在项目中使用吧。
如果你的项目中已经能够通过正常访问Mysql数据库,那就非常简单,只需要下面依赖即可。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.3</version>
</dependency>
如果你是刚开始学习,那么数据库访问这块就必须加上这些依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2)常用注解
接下来就需要在数据库建个表,如果你有表了那更方便,直接开始建实体类,现在以Order订单表为例:
@TableName("`order`")
public class Order implements Serializable {
@TableId(type = IdType.AUTO)
private Integer orderNo;
private String prodName;
private Float prodPrice;
private Integer prodNum;
public Integer getOrderNo() {
return orderNo;
}
public void setOrderNo(Integer orderNo) {
this.orderNo = orderNo;
}
public String getProdName() {
return prodName;
}
public void setProdName(String prodName) {
this.prodName = prodName;
}
public Float getProdPrice() {
return prodPrice;
}
public void setProdPrice(Float prodPrice) {
this.prodPrice = prodPrice;
}
public Integer getProdNum() {
return prodNum;
}
public void setProdNum(Integer prodNum) {
this.prodNum = prodNum;
}
@Override
public String toString() {
return "Order{" +
"orderNo=" + orderNo +
", prodName='" + prodName + '\'' +
", prodPrice=" + prodPrice +
", prodNum=" + prodNum +
'}';
}
}
这里需要重点讲下,这个实体类用到了Mybatis Plus提供的两个注解:
@TableName
这个注解里面需要填的是表的名称,因为order和MySQL的关键字冲突了,因为需要额外再加一个单引号,否则后面执行程序会报错,如果你是正常的业务表名,不需要额外加单引号。
@TableId
这里针对主键字段需要加这个,表示其注解,类型可以根据数据库的实际情况选择,例如自增长就和我选一样。
3)接口定义
到这里,如果是Mybatis就需要写xxMapper.xml文件和一个xxDao的mapper接口类,今天我们使用的是Mybatis Plus,只需要写一个mapper接口类一步搞定。
@Repository
public interface OrderMapper extends BaseMapper<Order> {
}
这里就是官网提到的效率至上:只需简单配置,即可快速进行单表CRUD操作,从而节省大量时间。
下面我们就使用一下,看怎么访问数据库的。比如从订单表里捞取商品名称是apple的订单:
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Order::getProdName, "apple");
List<Order> orderList = orderMapper.selectList(queryWrapper);
orderList.forEach(o -> System.out.println(o));
是不是非常简单,如果大家想知道基类,也就是BaseMapper里面提供了哪些操作,大家可以自己进入源码看看,总是单个插入、单个查询、批量查询、删除、更新、分页查询都有了。
3.1)LambdaQueryWrapper 和 QueryWrapper的区别
上面的代码中展示了LambdaQueryWrapper的使用方式,下面再用QueryWrapper实现同样的功能:
QueryWrapper<Order> queryWrapper = new QueryWrapper();
queryWrapper.eq("prod_name", "apple");
List<Order> orderList = orderMapper.selectList(queryWrapper);
orderList.forEach(o -> System.out.println(o));
LambdaQueryWrapper可以使用表对应的实体类直接调用get方法获取列名,而QueryWrapper只能填列名字符串,这样如果表有修改,很难知道哪些地方用到了此列名,会造成遗漏。
3.2)分页查询
分页查询要注意的是不能直接用BaseMapper里面的selectPage方法,需要在配置类中引入Page拦截器,这里推荐官方的拦截器。
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfiguration {
/**
* 新增分页拦截器,并设置数据库类型为mysql
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
写一个测试类跑一跑文章来源:https://www.toymoban.com/news/detail-660881.html
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderMapper orderMapper;
@RequestMapping("/page")
public Page<Order> queryPage(@RequestParam("num") Integer pageNum,@RequestParam("size") Integer pageSize){
Page<Order> page = new Page(pageNum, pageSize);
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
Page page1 = orderMapper.selectPage(page, queryWrapper);
return page1;
}
}
{
"records": [{
"orderNo": 1,
"prodName": "apple",
"prodPrice": 3.6,
"prodNum": 3
}, {
"orderNo": 2,
"prodName": "apple",
"prodPrice": 3.8,
"prodNum": 4
}, {
"orderNo": 3,
"prodName": "pear",
"prodPrice": 7.5,
"prodNum": 2
}, {
"orderNo": 4,
"prodName": "pear",
"prodPrice": 7.2,
"prodNum": 3
}],
"total": 6,
"size": 4,
"current": 1,
"orders": [],
"optimizeCountSql": true,
"searchCount": true,
"countId": null,
"maxLimit": null,
"pages": 2
}
三、总结
今天这篇文章的重点是介绍mybatis-plus这块效率工具,希望大家都能尽快的在项目中使用,有什么问题大家相互交流,这样才能提高。文章来源地址https://www.toymoban.com/news/detail-660881.html
到了这里,关于使用Mybatis Plus进行DAO层开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!