学习目标:
- 一周学完mybatis-plus(b站尚硅谷视频)
学习内容:
- mybatis-plus特性和数据库(以下简称mps)
- 搭建mps工程和基本配置(springboot版本)
- mps中BaseMapper的使用和测试
1. mps特性和数据库
mps相对于mybatis来说,像是mybatis的增强版,提高了开发中的效率。
其部分特性如下:
(1)无侵入:引入后不会对现有工程有影响;
(2)损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作
(3)强大的CURD操作:内置通用Mapper(BaseMapper)、通用Service(IService), 仅仅需要少量的配置实现表单大部分CURD操作。
(4)支持Lambda形式调用:通过Lambda表达式,方便的编写各类查询条件
(5)内置分页插件:基于Mybatis物理分页,配置好插件后,写分页等同于普通List查询
支持的数据库:MySQL,Oracle等常见数据库
2. 搭建mps工程和基本配置(springboot版本)
在常规配置一个springboot工程后,pom.xml放入如下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>
</dependency>
<!-- mybatis-plus启动器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
</dependencies>
在navicat新建查询导入表和数据
CREATE DATABASE `mybatis_plus` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use `mybatis_plus`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
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');
接下来在resources中配置application.yml
spring:
#配置数据源信息
datasource:
#配置数据源类型
type: com.zaxxer.hikari.HikariDataSource
#配置连接数据库的各个信息
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useSSL=false&rewriteBatchedStatements=true
username: root
password: root
#为mps的日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
在src目录下创建实体类User和Usermapper(看截图)
在SpringBoot启动类中添加@MapperScan注解,扫描mapper包
3. mps中BaseMapper的使用和测试
mps的基本CRUD在内置的BaseMapper中都得到了实现,可直接使用。
首先在test下创建测试类
(1)插入–在BaseMapper中,如下所示:
测试方法如下:
@Test
public void testInsert(){
//新增用户信息 INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
User user=new User();
user.setName("张三");
user.setAge(23);
user.setEmail("zhangsan@guigu.com");
int result = userMapper.insert(user);
System.out.println("result:"+result);
System.out.println("id:"+user.getId());
}
(2)删除–在BaseMapper中,删除有多种形式,如下所示
测试类如下所示:
@Test
public void testDelete(){
//DELETE FROM user WHERE id=?
// int result = userMapper.deleteById(1620994374206799873L);
// System.out.println("result:"+result);
//根据map的条件来删除
// Map<String,Object> map=new HashMap<>();
// map.put("name","张三");
// map.put("age",23);
// int i = userMapper.deleteByMap(map);
// System.out.println("i:"+i);
//DELETE FROM user WHERE id IN ( ? , ? , ? ) 根据多个id实现批量删除
List<Long> list = Arrays.asList(1L, 2L, 3L);
int result = userMapper.deleteBatchIds(list);
System.out.println("result:"+result);
}
(3)修改–在BseMapper中,多种如下所示:
测试类如下:
@Test
public void testModify(){
//UPDATE user SET name=?, email=? WHERE id=? 修改用户信息
User user=new User();
user.setId(4L);
user.setName("李四");
user.setEmail("lisi@atguigu.com");
int result = userMapper.updateById(user);
System.out.println("result:"+result);
}
(4)查询–在BaseMapper中方法展示:
测试类如下:
@Test
public void testSelect(){
//SELECT id,name,age,email FROM user WHERE id=? 通过id查询用户信息
// User user= userMapper.selectById(4L);
// System.out.println(user);
//SELECT id,name,age,email FROM user WHERE id IN ( ? , ? ) 根据多个id查询多个用户信息
// List<Long> list = Arrays.asList(4L, 5L);
// List<User> users = userMapper.selectBatchIds(list);
// users.forEach(System.out::println);
// Map<String,Object> map=new HashMap<>();
// map.put("name","李四");
// map.put("age",21);
// List<User> users = userMapper.selectByMap(map);
// users.forEach(System.out::println);
//自定义方法 se lect id,name,age,email from user where id =?
Map<String, Object> map = userMapper.SelectMapById(4L);
System.out.println(map);
}