目录
通用枚举
当表中的有些字段值是固定的,例如性别(男或女),此时我们可以使用MyBatis-Plus的通用枚举来实现。
- 在数据库表中添加字段sex
- 创建通用枚举类型
我们要想把哪一个属性的值存储到数据库当中,我们就在这个属性上面添加一个注解@EnumValue,将注解所标识的属性的值存储到数据库中。
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;
@Getter
public enum SexEnum {
MALE(1, "男"),
FEMALE(2, "女");
@EnumValue
private Integer sex;
private String sexName;
SexEnum(Integer sex, String sexName) {
this.sex = sex;
this.sexName = sexName;
}
}
- 配置扫描通用枚举
还需要再配置文件当中设置一个扫描通用枚举,只有通过扫描之后让mp知道扫描是谁,这个时候才能够将当前所添加的这个注解的功能来进行解析。
mybatis-plus:
configuration:
# 配置MyBatis日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
# 配置MyBatis-Plus操作表的默认前缀
table-prefix: t_
# 配置MyBatis-Plus的主键策略
id-type: auto
# 配置扫描通用枚举
type-enums-package: com.zqf.mybatisplus.enums
MP来使用通用枚举的话,只有两个操作,第一个操作我们在枚举中,把某一个属性的值存储到数据库中,直接把这个属性上添加@EnumValue,然后再在配置文件中来扫描咱们的枚举就可以了。
- 测试
@Test
public void testSexEnum(){
User user = new User();
user.setName("Enum");
user.setAge(20);
//设置性别信息为枚举项,会将@EnumValue注解所标识的属性值存储到数据库
user.setSex(SexEnum.MALE);
//INSERT INTO t_user ( username, age, sex ) VALUES ( ?, ?, ? )
//Parameters: Enum(String), 20(Integer), 1(Integer)
userMapper.insert(user);
}
代码生成器
- 引入相关依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
- 快速生成
package com.zqf.mybatisplus;
import java.util.Collections;
public class FastAutoGeneratorTest {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/mybatis_plus?characterEncoding=utf-8&userSSL=false", "root", "123456")
.globalConfig(builder -> {
builder.author("zqf") // 设置作者
//.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("D://mybatis_plus"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.zqf") // 设置父包名
.moduleName("mybatisplus") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://mybatis_plus"));// 设置mapperXml生成路径
})
//策略配置
.strategyConfig(builder -> {
builder.addInclude("t_user") // 设置需要逆向生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}
多数据源
适用于多种场景:纯粹多库(工程中所操作的表分散在不同的数据库当中)、 读写分离(有的数据库专门实现读的功能,有的数据库专门实现写的功能)、 一主多从、 混合模式等。
我们创建两个库,第一个是我们之前所使用的mybatis_plus,第二个是mybatis_plus1,然后我们把user表放在咱们以前的mybatis_plus中,然后把product表放在mybatis_plus1中,然后这个时候通过MP设置的多数据源之后,来测试一下看能否从这两个数据库中来读取到数据。
- 创建数据库及表
CREATE DATABASE `mybatis_plus_1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use `mybatis_plus_1`;
CREATE TABLE product
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '商品名称',
price INT(11) DEFAULT 0 COMMENT '价格',
version INT(11) DEFAULT 0 COMMENT '乐观锁版本号',
PRIMARY KEY (id)
);
INSERT INTO product (id, NAME, price) VALUES (1, '外星人笔记本', 100);
--删除原本mybatis_plus库product表
use mybatis_plus;
DROP TABLE IF EXISTS product;
- 引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
- 配置多数据源
说明:注释掉之前的数据库连接,添加新配置
spring:
# 配置数据源信息
datasource:
dynamic:
# 设置默认的数据源或者数据源组,默认值即为master
primary: master
# 严格匹配数据源,默认false.true未匹配到指定数据源时抛异常,false使用默认数据源(master)
strict: false
datasource:
master:
url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
slave_1:
url: jdbc:mysql://localhost:3306/mybatis_plus_1?characterEncoding=utf8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
- 创建用户service以及mapper接口
通过@DS注解来设置当前的业务逻辑操作的是哪一个数据源
public interface UserService extends IService<User> {
}
@DS("master") //指定所操作的数据源
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements
UserService {
}
- 创建商品service以及mapper
public interface ProductService extends IService<Product> {
}
@DS("slave_1")
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product>
implements ProductService {
}
- 测试
@Autowired
private UserService userService;
@Autowired
private ProductService productService;
@Test
public void testDynamicDataSource(){
System.out.println(userService.getById(1L));
System.out.println(productService.getById(1L));
}
如果我们实现读写分离,将写操作方法加上主库数据源,读操作方法加上从库数据源
MyBatisX
MyBatis-Plus为我们提供了强大的mapper和service模板,能够大大的提高开发效率 但是在真正开发过程中,MyBatis-Plus并不能为我们解决所有问题,例如一些复杂的SQL,多表 联查,我们就需要自己去编写代码和SQL语句,这个时候可以使用MyBatisX插件。
当我们使用了MyBatisX的时候,我们就可以快速的去定位到mapper接口所对应的映射文件以及映射文件所对应的mapper接口。
代码快速生成
- 连接数据库
- 生成代码
- 基础设置
- 设置mapper接口和映射文件
- 生成结果
- 快速生成CRUD
我们先来生成一个添加的方法,不需要去写返回值,只需要后来写方法名就行,然后我们需要把方法名给写出来,这个时候mybatisx就可以根据方法名快速的帮助我们去生成相对应的sql语句(见面识义)。
Alt+Enter自动补全方法
当我们创建一个方法后,mybatisx会把我们当前接口中的方法跟映射文件中的sql进行关联,如果这个接口的方法没有相对应的sql语句的话,它就会直接报错。
映射文件中的sql:
更多例子:
更多用法:MybatisX快速开发插件 | MyBatis-Plus (baomidou.com)https://baomidou.com/pages/ba5b24/#%E5%8A%9F%E8%83%BD
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99447.html