本文最后更新于:2 个月前
Mybatis-plus快速入门及增删改查(一) 一、简介 1、官网 http://mp.baomidou.com
2、特点 MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
3、支持数据库mysql 、mariadb 、oracle 、db2 、h2 、hsql 、sqlite 、postgresql 、sqlserver 、presto 、Gauss 、FirebirdPhoenix 、clickhouse 、Sybase ASE 、 OceanBase 、达梦数据库 、虚谷数据库 、人大金仓数据库 、南大通用数据库 、 4、框架结构
二、快速入门 1、创建数据库 创建数据库:mybatis_plus
创建数据表:user
1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id) ); INSERT INTO user (id, name, age, email) VALUES (1, 'Jone', 18, 'test1@baomidou.com'), (2, 'Jack', 20, 'test2@baomidou.com'), (3, 'Tom', 28, 'test3@baomidou.com'), (4, 'Sandy', 21, 'test4@baomidou.com'), (5, 'Billie', 24, 'test5@baomidou.com');
2、创建SpringBoot工程(也可以将工程创建在项目中)
3、引入依赖 注意:SpringBoot版本修改为2.3.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <dependencies > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter</artifactId > </dependency > <dependency > <groupId > com.baomidou</groupId > <artifactId > mybatis-plus-boot-starter</artifactId > <version > 3.4.1</version > </dependency > <dependency > <groupId > mysql</groupId > <artifactId > mysql-connector-java</artifactId > <scope > runtime</scope > </dependency > <dependency > <groupId > org.projectlombok</groupId > <artifactId > lombok</artifactId > <optional > true</optional > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-test</artifactId > <scope > test</scope > <exclusions > <exclusion > <groupId > org.junit.vintage</groupId > <artifactId > junit-vintage-engine</artifactId > </exclusion > </exclusions > </dependency > </dependencies >
4、修改配置文件 在 application.properties
配置文件中添加 MySQL 数据库的相关配置:
1 2 3 4 5 spring.datasource.driver-class-name =com.mysql.cj.jdbc.Driver spring.datasource.url =jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8 spring.datasource.username =root spring.datasource.password =123456
注意: 如果定义了mysql驱动的依赖的版本为5,例如
1 <version> 5 .1 .47 </version>
则数据库连接配置为
1 2 3 4 5 spring.datasource.driver-class-name =com.mysql.jdbc.Driver spring.datasource.url =jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=true spring.datasource.username =root spring.datasource.password =123456
5、创建实体类 创建包 entity,编写实体类 User.java,并使用lombok简化实体类的编写
1 2 3 4 5 6 7 @Data public class User { private Long id; private String name; private Integer age; private String email; }
查看编译结果
6、创建mapper接口 创建包 mapper,编写Mapper 接口: UserMapper.java
1 2 3 public interface UserMapper extends BaseMapper <User > { }
7、启动类添加注解 在 Spring Boot 启动类中添加 @MapperScan
注解,扫描 Mapper 文件夹
1 2 3 4 5 @SpringBootApplication @MapperScan("com.atguigu.mybatisplus.mapper") public class MybatisPlusApplication { ...... }
8、测试 添加测试类,进行功能测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 @SpringBootTest class MybatisPlusApplicationTests { @Resource private UserMapper userMapper; @Test void testSelectList () { List<User> users = userMapper.selectList(null ); users.forEach(System.out::println); } }
通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!
补充、查看sql输出日志 1 2 mybatis-plus.configuration.log-impl =org.apache.ibatis.logging.stdout.StdOutImpl
三、通用Mapper MP中的基本CRUD在内置的BaseMapper中都已得到了实现。
创建MapperTests测试类:
1 2 3 4 5 6 package com.atguigu.mybatisplus;@SpringBootTest public class MapperTests { @Resource private UserMapper userMapper; }
1、Create 1 2 3 4 5 6 7 8 9 10 @Test public void testInsert () { User user = new User(); user.setName("Helen" ); user.setAge(18 ); int result = userMapper.insert(user); System.out.println("影响的行数:" + result); System.out.println("id:" + user.getId()); }
2、Retrieve 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @Test public void testSelect () { User user = userMapper.selectById(1 ); System.out.println(user); List<User> users = userMapper.selectBatchIds(Arrays.asList(1 , 2 , 3 )); users.forEach(System.out::println); Map<String, Object> map = new HashMap<>(); map.put("name" , "Helen" ); map.put("age" , 18 ); List<User> users1 = userMapper.selectByMap(map); users1.forEach(System.out::println); }
3、Update 1 2 3 4 5 6 7 8 9 @Test public void testUpdate () { User user = new User(); user.setId(1L ); user.setAge(28 ); int result = userMapper.updateById(user); System.out.println("影响的行数:" + result); }
4、Delete 1 2 3 4 5 @Test public void testDelete () { int result = userMapper.deleteById(5 ); System.out.println("影响的行数:" + result); }
四、通用Service MP中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑
1、创建Service接口 创建 service 包,创建 UserService,继承 IService
1 2 3 public interface UserService extends IService <User > { }
2、创建Service实现类 创建 impl 包,创建 UserServiceImpl,继承 ServiceImpl,实现 UserService
1 2 3 @Service public class UserServiceImpl extends ServiceImpl <UserMapper , User > implements UserService { }
3、创建测试类 创建ServiceTests
1 2 3 4 5 @SpringBootTest public class ServiceTests { @Resource private UserService userService; }
4、测试记录数 1 2 3 4 5 @Test public void testCount () { int count = userService.count(); System.out.println("总记录数:" + count); }
5、测试批量插入 1 2 3 4 5 6 7 8 9 10 11 12 13 @Test public void testSaveBatch () { ArrayList<User> users = new ArrayList<>(); for (int i = 0 ; i < 5 ; i++) { User user = new User(); user.setName("Helen" + i); user.setAge(10 + i); users.add(user); } userService.saveBatch(users); }
五、自定义Mapper 当通用Mapper无法满足我们的需求时,我们可以自定义基于Mapper接口的xml文件,并在xml文件中配置SQL语句
1、接口方法定义 在UserMapper接口中定义如下方法
1 List<User> selectAllByName (String name) ;
2、创建xml文件 在resources目录中创建mapper目录,创建UserMapper.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace ="com.atguigu.mybatisplus.mapper.UserMapper" > <sql id ="Base_Column_List" > id, name, age, email </sql > <select id ="selectAllByName" resultType ="com.atguigu.mybatisplus.entity.User" > select <include refid ="Base_Column_List" /> from user where name = #{name} </select > </mapper >
注意:MP中mapper目录是持久层映射文件的默认目录,如果是其他目录,需要配置mapper-locations,例如:
1 mybatis-plus.mapper-locations =classpath:xml/*.xml
3、测试条件查询 在MapperTests中创建如下测试用例
1 2 3 4 5 @Test public void testSelectAllByName () { List<User> users = userMapper.selectAllByName("Helen" ); users.forEach(System.out::println); }
六、自定义Service 1、添加接口方法 UserService中添加接口方法
1 List<User> listAllByName (String name) ;
2、实现接口方法 1 2 3 4 5 @Override public List<User> listAllByName (String name) { return baseMapper.selectAllByName("Helen" ); }
4、测试 ServiceTests中添加测试方法
1 2 3 4 5 @Test public void testListAllByName () { List<User> users = userService.listAllByName("Helen" ); users.forEach(System.out::println); }