SpringBoot整合MyBatis-Plus

199 阅读2分钟
前言

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
代码完整地址

github.com/cocoamu/myb…