最开始,我们要在Java中使用数据库时,需要使用JDBC,创建Connection、ResultSet等,然后我们又对JDBC的操作进行了封装,创建了许多类似于DBUtil等工具类。再慢慢的,出现了一系列持久层的框架:Hibernate、JPA和MyBatis等。
其实利用MyBatis 来进行持久层的开发已经大大减少了工作人员的工作量了,但它的使用还是需要一定的门槛的。Mybatis-Plus的出现,进一步降低了这道槛。那我们今天就来看看,Mybatis-Plus到底是如何进一步实现MyBatis的增强的。
MyBatis-Plus官网地址:
https://baomidou.com
MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MP的愿景是成为MyBatis最好的搭档,就像魂斗罗中的1P、2P,基友搭配,效率翻倍。
任何能使用MyBatis进行CRUD,并且支持标准SQL的数据库,具体支持情况如下:
1.引入依赖。在pom.xml文件中添加Mybatis-Plus依赖。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- MyBatis依赖启动器 -->
<!--
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
-->
<!-- MySQL数据库连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 阿里巴巴的Druid数据源依赖启动器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
<!-- 添加Mybatis-Plus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
</dependencies>
2.编写实体类。在springbootdata数据库中创建products商品信息表并插入数据。
CREATE TABLE t_product (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50), #商品名称
price DOUBLE,
flag VARCHAR(2), #上架状态
goods_desc VARCHAR(100), #商品描述
images VARCHAR(400), #商品图片
goods_stock INT, #商品库存
goods_type VARCHAR(20), #商品类型
created_user VARCHAR(20) COMMENT '日志-创建人',
created_time DATETIME COMMENT '日志-创建时间',
modified_user VARCHAR(20) COMMENT '日志-最后修改执行人',
modified_time DATETIME COMMENT '日志-最后修改时间'
);
INSERT INTO t_product VALUES (
NULL,
'HUAWEI P60',
6999,
'1',
'华为P60 5G手机 分期 麒麟990 晨曦金 8+256GB',
'https://img14.360buyimg.com/5f4da578E7c6efde1/2cd53a53083ab2ed.jpg',
99,
'1',
'admin',
'2022-11-04 15:46:55',
'Tom',
'2022-11-04 15:46:55');
3.在com.cy.domain包下创建Product实体类。
package com.cy.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("t_product") // 表明注解,标识实体类对应的表
public class Product implements Serializable {
@TableId(type = IdType.AUTO) // 注解注解
private Integer id;
private String name;
private double price;
private String flag;
// @TableField("goods_desc") // 字段注解(非主键)
private String goodsDesc;
private String images;
private long goodsStock;
private String goodsType;
private String createdUser;
private Date createdTime;
private String modifiedUser;
private Date modifiedTime;
}
4.定义Mapper。在com.cy.mapper包下创建ProductMapper接口并继承BaseMapper接口。
package com.cy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cy.domain.Product;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ProductMapper extends BaseMapper<Product> {
}
MyBatis-Plus的Mapper层接口需要配置扫描,配置方式有两种:
# 开启驼峰命名匹配映射
# mybatis.configuration.map-underscore-to-camel-case=true
# 配置MyBatis的XML配置文件位置
# mybatis.mapper-locations=classpath:mapper/*.xml
# 配置XML映射文件中指定的实体类别名路径
# mybatis.type-aliases-package=com.cy.domain
# 输出SQL语句
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 配置MyBatis的XML配置文件位置
mybatis-plus.mapper-locations=classpath:mapper/*.xml
# 配置XML映射文件中指定的实体类别名路径
mybatis-plus.type-aliases-package=com.cy.domain
说明:MyBatis-Plus默认开启了驼峰命名匹配映射。
1.新增数据操作。在com.cy测试包下编写MyBatisPlusTests测试类,并添加插入数据操作的测试方法。
package com.cy;
import com.cy.domain.Product;
import com.cy.mapper.ProductMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class MyBatisPlusTests {
@Autowired
private ProductMapper productMapper;
@Test
public void test01() {
Product product = new Product();
product.setName("小米手机");
product.setPrice(2999.0);
product.setFlag("1");
product.setGoodsDesc("骁龙8+ 旗舰处理器 | 徕卡光学镜头 | 徕卡原生双画质 | 大师镜头包");
productMapper.insert(product);
}
}
2.删除数据操作。
@Test
public void test02() {
int row = productMapper.deleteById(1);
System.out.println("row = " + row);
}
@Test
public void test03() {
ArrayList<Integer> ids = new ArrayList<>(){{
add(2);
add(3);
add(4);
}};
int row = productMapper.deleteBatchIds(ids);
System.out.println("row = " + row);
}
@Test
public void test04() {
Map<String, Object> columnMap = new HashMap<>(){{
put("name", "小米");
put("price", 1999);
}};
int row = productMapper.deleteByMap(columnMap);
System.out.println("row = " + row);
}
@Test
public void test05() {
// 条件构造器
UpdateWrapper<Product> queryWrapper = new UpdateWrapper<>();
queryWrapper.gt("price", 2000).or().likeRight("name", "小米");
int row = productMapper.delete(queryWrapper);
System.out.println("row = " + row);
}
3.修改数据操。
@Test
public void test06() {
Product product = new Product();
product.setId(3);
product.setName("小米");
product.setPrice(1999);
int row = productMapper.updateById(product);
System.out.println("row = " + row);
}
@Test
public void test07() {
Product product = new Product();
product.setId(3);
// 条件构造器
UpdateWrapper<Product> updateWrapper = new UpdateWrapper<>();
// set():设置更新SQL的SET片段,ge():大于等于
updateWrapper.set("name", "小米Pro").set("price", 3999).ge("goods_stock", 10);
int row = productMapper.update(product, updateWrapper);
System.out.println("row = " + row);
}
现在你知道在SpringBoot中怎么整合Mybatis-Plus了吗?如果你还有其他问题,可以在评论区留言哦。