理解Mybatis-Plus
描述
Mybatis-Plus(简称MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
实现的愿景
我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
特征
1、无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
2、强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求。
3、支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
快速入手
创建数据库
首先需要在mysql(我使用的数据库)中创建一个数据库和数据表
创建数据库sql如下:
CREATE DATABASE 数据库名称
创建数据表sql如下:
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`productName` varchar(50) NOT NULL,
`price` double NOT NULL,
`weight` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO product (id, product_name, price,weight) VALUES (1, '华为p20',2300,24);
INSERT INTO product (id, product_name, price,weight) VALUES (2, '华为p30', 3600,32);
INSERT INTO product (id, product_name, price,weight) VALUES (3, '华为mate20',4600,50);
INSERT INTO product (id, product_name, price,weight) VALUES (4, '华为mate30',5600,60);
INSERT INTO product (id, product_name, price,weight) VALUES (5, '华为p20 pro',3000,36);
INSERT INTO product (id, product_name, price,weight) VALUES (6, '华为p30 pro',4000,40);
创建Maven项目
如果不了解maven的使用可以去我的主页查看关于maven的教程,这里不再做解释。这里使用SpringBpoot方式,我们使用STS创建一个Maven工程,主要修改pom.xml文件:
<!-- Spring Boot 启动父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<!-- 项目全局属性 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mybatis-spring-boot>1.2.0</mybatis-spring-boot>
<mysql-connector>5.1.39</mysql-connector>
</properties>
<dependencies>
<!-- Spring Boot Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--配置mybatis-plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<!-- Spring Boot Test 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 配置lombox依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<version>1.16.12</version>
</dependency>
<!-- Spring Boot devtools 热部署 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- MySQL 连接驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector}</version>
</dependency>
<!-- Junit单元测试类 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
配置数据源
在src/main/resources文件夹下添加application.properties属性文件,文件内容如下:
spring.datasource.url=jdbc:mysql://localhost:3306/数据库的名字?useUnicode=true&characterEncoding=utf8
spring.datasource.username=用户名
spring.datasource.password=密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
编写主程序入口
备注:MapperScan(写自己的路径")
@SpringBootApplication
@MapperScan("com.zhaosong.dao")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
编写实体类
@Data//在编译的时候会自动生产get,set,toString等方法
@AllArgsConstructor//生产有参方法
@NoArgsConstructor//生产无参方法
public class Product {
//主键
@TableId(type =IdType.AUTO)
private Integer id;
//产品名称
private String productName;
//产品售价
private Double price;
//产品权重
private Integer weight;
}
编写dao接口
public interface ProductDao extends BaseMapper<Product> {
}
编写单元测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductTest {
@Resource
private ProductDao productDao;
@Test
public void getProduct() {
List<Product> pr = productDao.selectList(null);
pr.forEach(w -> {
System.out.println(w);
});
}
}
到这里一个简单的查询就完成了。下面实现一个根据姓名模糊查询的单元测试类
@Test
public void getProductName() {
QueryWrapper<Product> qw=new QueryWrapper<Product>();
qw.like("product_name", "%pro%");
List<Product> pr = productDao.selectList(qw);
pr.forEach(System.out::println);
}
编写添加操作的单元测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductTest {
@Resource
private ProductDao productDao;
@Test
public void addProduct() {
Product pr=new Product(7,"华为X",13000.0,100);
int count = productDao.insert(pr);
System.out.println("添加的条数"+count);
}
}
编写修改操作的单元测试类
//实现根据id单个修改
@Test
public void updateProduct() {
Product pr=new Product(7,"华为Xs",13000.0,100);
int count = productDao.updateById(pr);
System.out.println("添加的条数"+count);
}
编写删除操作的单元测试类
@Test
public void delProductId() {
int count = productDao.deleteById(7);
System.out.println("添加的条数"+count);
}