前言
mybatis 在持久层框架中还是比较火的,一般项目都是基于ssm。虽然 mybatis 可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的解决了这个问题。
简介
MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官方地址: mp.baomidou.com
SpringBoot整合MyBatis-Plus
1.创建数据库及表
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;
2.创建springboot工程并添加依赖
<!--mysql连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
<scope>runtime</scope>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!--lombok非必须方便操作-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
3.配置application.yml
spring:
# 配置数据源信息
datasource:
# 配置数据源类型
type: com.zaxxer.hikari.HikariDataSource
# 配置连接数据库信息
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
4.添加实体类
@Data //lombok注解
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
5.添加mapper类
public interface UserMapper extends BaseMapper<User> {
}
6.配置启动类
在Spring Boot启动类中添加@MapperScan注解,扫描mapper包
@SpringBootApplication
@MapperScan("com.atguigu.mybatisplus.mapper")
public class MybatisplusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisplusApplication.class, args);
}
}
7.单元测试
@SpringBootTest
public class UserMapperTest {
@Autowired
private MyUserMapper userMapper;
@Test
@Rollback(value = false)
public void insert(){
MyUser user = new MyUser();
user.setName("李四");
user.setAge(20);
user.setEmail("422943393@qq.com");
userMapper.insert(user);
}
@Test
public void findAll(){
// 参数是一个 Wrapper ,条件构造器,这里我们先不用 null 查询全部用户
List<MyUser> list = userMapper.selectList(null);
Assert.isTrue(list.size()==5);
list.forEach(System.out::println);
}
@Test
public void findById(){
System.out.println(userMapper.selectById(12).toString());
}
@Test
public void selectBatchIds(){
List<Integer> ids = Arrays.asList(
12,
13
);
List<MyUser> myUsers = userMapper.selectBatchIds(ids);
myUsers.stream().forEach(myUser -> {
System.out.println(myUser.toString());
});
}
@Test
public void selectByMap(){
Map<String, Object> map = new HashMap<>();
//map的key指代的是mysql表中的列名,并非java实体的属性名
map.put("name", "张三");
List<MyUser> myUsers = userMapper.selectByMap(map);
myUsers.stream().forEach(myUser -> {
System.out.println(myUser.toString());
});
}
@Test
public void selectList(){
QueryWrapper<MyUser> query = new QueryWrapper<>();
query.select("name", "张三") //指定查询结果字段
.in("name", Arrays.asList("111", "222"))
.last("limit 1");
List<MyUser> myUsers = userMapper.selectList(query);
myUsers.stream().forEach(myUser -> {
System.out.println(myUser.toString());
});
}
@Test
public void deleteById(String id){
userMapper.deleteById(Long.valueOf(id));
}
@Test
public void update(){
UpdateWrapper<MyUser> update = new UpdateWrapper<>();
update.eq("name", "222").eq("age", 2); //eq是MP的条件构造器,表示"等于"关系
MyUser user = new MyUser();
user.setName("ccc");
user.setAge(11);
userMapper.update(user,update);
}
@Test
public void deleteByMap(){
//构造条件
Map<String,Object> map = new HashMap<>();
map.put("age",22);
userMapper.deleteByMap(map);
}
}
8.添加日志
在application.yml中配置日志输出
# 配置MyBatis日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl