暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MyBatis的好基友 || MyBatis-Plus

一十二章经 2019-12-08
564

MyBatis-Plus 是国内一款非常实用且优秀的ORM框架。在原生MyBatis的基础上有增添了许多CRUD操作,省去了很多书写SQL语句的时间,极大的提高了开发者的开发效率。本篇主要概述基本的数据库CRUD操作

图片来源 https://mp.baomidou.com/guide


本篇是基于SpringBoot整合MyBatisPlus(以下简称Mp),但是本人在学习的时候也做原生MyBatis+Mp,Spring+Mp 这两个整合版本。有需要的小伙伴可以找我拉代码~


一:添加pom依赖

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
</dependencies>


二:创建与数据库对应的pojo类

/**
* 用户实体类对象
*/
@Data
@TableName("tb_user")
public class User {


//在yml文件中已经设置了全局的id策略,所以可以注释掉
//@TableId(type = IdType.AUTO)
private Integer id;
private String userName;
private Date birthday;


@TableField(select = false) //查询时不返回字段的值,可得保护数据
    private String sex;
    
//private String address;
@TableField("address") //这个注解用于映射Java类中的属性名与数据库中的不同且又不是驼峰
private String addresses;


@TableField(exist = false)
private String email; //在数据库中不存在该字段 不加会报错


}


三:定义操作数据库的Mapper接口

public interface UserMapper extends BaseMapper<User> {
}


四:定义SpringBoot启动类

@SpringBootApplication
@MapperScan("com.ethan.sample.mapper")
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class,args);
}
}

五:创建application.yml配置文件

server:
port: 8085
spring:
application:
name: mp-springBoot
datasource:
url: jdbc:mysql://127.0.0.1:3306/mp
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver


# 学习MyBatisPlus的配置
mybatis-plus:
# 指定全局的配置文件
#config-location: classpath:mybatis-config.xml
# 指定Mapper.xml文件路径
#mapper-locations: classpath*:mybatis/*.xml
# 扫描包指定别名
type-aliases-package: com.ethan.sample.pojo
# 开启下划线转驼峰 默认是true,可以不用理这个配置
configuration:
map-underscore-to-camel-case: true
# 二级缓存 默认true
cache-enabled: true
# 全局的id生成策略
global-config:
db-config:
id-type: auto #自增长
# 全局表名前缀
      table-prefix: tb_


项目结构

经过上面五步,SpringBoot整合MyBatis就大功告成了。


:强大的条件包装器

Mp内置的Wrapper条件包装器可以帮助我们定义复杂的的条件,从而操作数据库。

Wrapper是一个抽象类,我们可以创建其子类QueryWrapper,用于封装各种条件。


  • 测试一:根据条件删除数据

@Test
public void testDelete(){
/**
* 用法一
*/
//根据包装条件做删除,eq之间是and关系
/*QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("user_name","张三")
.eq("sex","男");*/
/**
* 用法二 推荐 ,更面向对象
*/
User user = new User();
user.setAddresses("GZ");
user.setUserName("张三");
//把user对象传进来 这个user用于封装条件
QueryWrapper<User> wrapper = new QueryWrapper<>(user);
userMapper.delete(wrapper);
}


  • 测试二:根据条件做更新操作

@Test
public void testUpdate(){
/**
* 第一种方式:根据其他字段条件更新方法
*/
User user = new User();
        user.setAddresses("SH");    //需要更新的字段参数
user.setUserName("王五");
//根据条件做更新
//修改姓名为李四的行数据 QueryWrapper 用户封装匹配的条件
        //QueryWrapper<User> wrapper = new QueryWrapper<>();
        //wrapper.eq("user_name","王五");  //匹配条件 user_name=李四 的行的数据


//这个user1用于封装条件
User user1 = new User();
user1.setUserName("张三");
        QueryWrapper<User> wrapper = new QueryWrapper<>(user1);
userMapper.update(user,wrapper);
}


  • 测试三:分页查询,首先需要定义一个配置类,将分页拦截器注入IOC容器中

@Configuration
public class MpConfiguration {


//配置分页插件
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}


  • 分页测试

@Test
public void testSelectPage(){
//创建分页查找的一些参数,当前页,每页的数据大小
Page<User> page = new Page<>(1,2);


//设置查询条件 ,也可以不设置,到时候在第二个参数写成null就行
QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.gt("birthday","1910-01-01");
IPage<User> userIPage = userMapper.selectPage(page, wrapper);
List<User> records = userIPage.getRecords();
records.forEach(System.err::println);
}


总结:Mp提供了非常多的对数据库操作的API,同样他也能支持扩展,当需要表连接等复杂的SQL语句需要自己定义时,我们也能自己手动书写。正如他的官网所写的一样:为简化开发而生。



文章转载自一十二章经,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论