angular做的网站大全,做刷题网站赚钱么,沈阳做网站黑酷科技,网站如何做才能被360收录1.MyBatis-Plus
1.1特性
无侵入#xff1a;只做增强不做改变#xff0c;引入它不会对现有工程产生影响#xff0c;如丝般顺滑损耗小#xff1a;启动即会自动注入基本 CURD#xff0c;性能基本无损耗#xff0c;直接面向对象操作强大的 CRUD 操作#xff1a;内置通用 M…1.MyBatis-Plus
1.1特性
无侵入只做增强不做改变引入它不会对现有工程产生影响如丝般顺滑损耗小启动即会自动注入基本 CURD性能基本无损耗直接面向对象操作强大的 CRUD 操作内置通用 Mapper、通用 Service仅仅通过少量配置即可实现单表大部分 CRUD 操作更有强大的条件构造器满足各类使用需求支持 Lambda 形式调用通过 Lambda 表达式方便的编写各类查询条件无需再担心字段写错支持主键自动生成支持多达 4 种主键策略内含分布式唯一 ID 生成器 - Sequence可自由配置完美解决主键问题支持 ActiveRecord 模式支持 ActiveRecord 形式调用实体类只需继承 Model 类即可进行强大的 CRUD 操作支持自定义全局通用操作支持全局通用方法注入 Write once, use anywhere 内置代码生成器采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码支持模板引擎更有超多自定义配置等您来使用内置分页插件基于 MyBatis 物理分页开发者无需关心具体操作配置好插件之后写分页等同于普通 List 查询分页插件支持多种数据库支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库内置性能分析插件可输出 SQL 语句以及其执行时间建议开发测试时启用该功能能快速揪出慢查询内置全局拦截插件提供全表 delete 、 update 操作智能分析阻断也可自定义拦截规则预防误操作
1.2支持数据库 任何能使用 MyBatis 进行 CRUD, 并且支持标准 SQL 的数据库具体支持情况如下如果不在下列表查看分页部分教程 PR 您的支持。 MySQLOracleDB2H2HSQLSQLitePostgreSQLSQLServerPhoenixGauss ClickHouseSybaseOceanBaseFirebirdCubridGoldilockscsiidbinformixTDengineredshift达梦数据库虚谷数据库人大金仓数据库南大通用(华库)数据库南大通用数据库神通数据库瀚高数据库优炫数据库
1.3框架结构 2.MP快速上手
官网地址https://baomidou.com/pages/24112f/
2.1导入依赖
pom.xml
!--MyBatisPlus--
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3.1/version
/dependency
1234562.2修改配置
application.yml
2.2.1单源
#mybatis-plus
mybatis-plus:#配置类型别名所对应的包type-aliases-package: com.example.domain#设置mybatis-Plus的统全局配置global-config:db-config:#设置实体类对应的统一前缀table-prefix: tb_# 生成统一的主键生成策略id-type: autoconfiguration:# 打印Mybatis-plus的执行日志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
1234567891011121314type-aliases-package: com.example.domain 2.2.2多源
spring:datasource:dynamic:#设置默认的数据源或者数据源组,默认值即为masterprimary: master #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源strict: false datasource:master:url: jdbc:mysql://xx.xx.xx.xx:3306/dynamicusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置mysql2:url: jdbc:mysql://xx.xx.xx.xx:3307/dynamicusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Drivermysql2:url: ENC(xxxxx) # 内置加密,使用请查看详细文档username: ENC(xxxxx)password: ENC(xxxxx)driver-class-name: com.mysql.cj.jdbc.Driver#......省略
1234567891011121314151617181920212223242.3注解使用
Service、Mapper、TableName、TableId、TableFild、TableLogic、EnumValue、DS Service public interface IBookService extends IServiceBook {}
1Service
public class BookServiceImpl extends ServiceImplBookDao, Book implements IBookService {}
12实现接口继承Service 如果多源 DS(master)
Service
public class BookServiceImpl extends ServiceImplBookDao, Book implements IBookService {
}
1234需要使用DS注解使用源 Mapper Mapper
public interface BookDao extends BaseMapperBook {
}
123继承实体类 TableName //设置实体类对应的表名
TableName(t_user)
public class Book {
}
1234若在yml文件中进行了配置此步骤可省略 TableId public class Book {//将属性对应的字段作为主键//TableId注解的value属性用于指定主键的字段//TableId注解的type属性设置主键生成策略TableId(value uid, type IdType.AUTO)//private Integer id;private Integer uid;
}
12345678设置数据库对应主键ID TableFild Data
public class Book {private String type;//指定属性所对应的字段名TableField(book_name)private String name;
}
1234567设置对应数据库的字段名 TableLogic Data
public class Book {//设置属性是否逻辑删除TableLogicprivate int isDelete;
}
123456是否逻辑删除 需要添加数据库字段 EnumValue Getter
public enum SexEnum {MALE(1, 男),FEMALE(2, 女);;//将注解所标识的属性的值存储到数据库中EnumValueprivate Integer sex;private String sexName;SexEnum(Integer sex, String sexName) {this.sex sex;this.sexName sexName;}
}
123456789101112131415使用枚举存入值
2.4条件构造器使用
2.4.1分页使用
若需要使用mp的分页工则需要添加配置类
Configuration
public class MpConfig {Beanpublic MybatisPlusInterceptor mInterceptor() {//1.定义Mp拦截器MybatisPlusInterceptor mpInterceptor new MybatisPlusInterceptor();//2.添加具体的拦截器添加分页拦截器实现分页查询的动态SQLmpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return mpInterceptor;}
}
1234567891011
Test
public void testPage(){
PageUser page new Page( current: 2,size: 3);userMapper.selectPage(pagequeryWrapper: null);system.out.println(page);
}
1234562.4.2查询
2.4.2.1selectMaps
Test
public void test06(){//查询用户的用户名、年龄、邮箱信息QuerywrapperUser querywrapper new Querywrapper();querywrapper.select( user_name age,email );ListMapString,object maps userMapper.selectMaps(querywrapper);maps.forEach(system.out: :println);
}
123456782.4.2.2动态查询
public void test10(){string username a;Integer ageBegin null;Integer ageEnd 30;QuerywrapperUser querywrapper new Querywrapper();querywrapper.like(stringutils.isNotBLank(username)column: user_name username).ge( condition: ageBegin ! nullcolumn: age, ageBegin).le( condition: ageEnd l nullcolumn: age, ageEnd);Listuser list userMapper.selectList(querywrapper);list.forEach(system.out : :println);
}
1234567891011加个条件判断 3.MP基本内容
3.1配置application.yml
spring:
# 设置数据源datasource:# 设置驱动类driver-class-name: com.mysql.cj.jdbc.Driver#配置连接数据库的各个信息url: jdbc:mysql://localhost:3306/ssm_db?serverTimezoneUTCusername: rootpassword: qweasdzxc
123456789流程 设置数据源设置驱动类配置连接数据库的各个信息 注意 MySQL5.7版本的url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncodingutf-8usesSLfalse MySQL8.0版本的url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezoneGMT%2B8characterEncodingutf-8useSSLfalse 否则运行测试用例报告如下错误: java.sql.SQLException: The server time zone value ‘OD1uzé×E士14a’ is unrecognized or representsmore 3.2Mapper接口✳
Mapper
public interface BookDao extends BaseMapperBook {
}
123使用Mapper注解。在IOC容器中只能存在类所存在的Bean不能存在接口所存在的Bean。因此将动态生成的代理类交给了IOC容器管理 Mapeper将当前接口标为持久层并为Springboot所管理 3.3加入日志功能
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
123加入日志功能可打印出相关的sql语句。注意sql语句的生成是mybatis-plus将实体类对应的泛型反射为SQL语句。 例如BaseMapper此处的Book就为实体类 3.4测试自定义功能
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.example.mapper.BookDao!--定义接口方法对应的 SQL 语句--/mapper
123456783.5Service接口✳
public interface IBookService extends IServiceBook {}
1IService T为泛型填写对象 Service
public class BookServiceImpl extends ServiceImplBookDao, Book implements IBookService {}
12ServiceImplBookDao, Book M为MapperT为泛型 3.6TableName注解
//设置实体类对应的表名
TableName(t_user)
Data
public class Book {private Integer id;private String type;private String name;private String description;
}
123456789同时我们也可以在yml文件中对表的前缀进行统一处理
#mybatis-plus
mybatis-plus:#设置mybatis-Plus的统全局配置global-config:db-config:#设置实体类对应的统一前缀table-prefix: tb_
12345673.7TableId注解
Data
public class Book {//将属性对应的字段作为主键TableId// private Integer id;private Integer uid;private String type;private String name;private String description;
}
12345678910mybatis-plus会将表中的属性作为数据库中的字段名 当数据库的表中的主键id没有设置为默认自增长时而实体类的唯一标识为“ uid”而不是“id”那么MyBatis-Plus就不能通过反射实体类的属性来找到表中字段的唯一标识就需要通过注解来指明 3.7.1Value属性
Data
public class Book {//将属性对应的字段作为主键//TableId注解的value属性用于指定主键的字段TableId(uid)private Integer id;private String type;private String name;private String description;
}
12345678910当数据库中的字段名与实体类的类名对应不上时进行使用。vaule默认可以省略 3.7.2Type属性
Data
public class Book {//将属性对应的字段作为主键//TableId注解的value属性用于指定主键的字段//TableId注解的type属性设置主键生成策略TableId(value uid, type IdType.AUTO)private Integer id;private String type;private String name;private String description;
}
1234567891011常用的主键策略 ldType.ASSIGN_ID(默认)基于雪花算法的策略生成数据id与数据库id是否设置自增无关 ldType.AUTO使用数据库的自增策略注意该类型请确保数据库设置了id自增否则无效 #mybatis-plus
mybatis-plus:#设置mybatis-Plus的统全局配置global-config:db-config:#设置实体类对应的统一前缀table-prefix: tb_# 生成统一的主键生成策略id-type: autoconfiguration:# 打印Mybatis-plus的执行日志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
123456789101112Type属性也可以根据yml文件的 id-type: auto来进行统一生成 3.8雪花算法
背景
需要选择合适的方案去应对数据规模的增长以应对逐渐增长的访问压力和数据量。数据库的扩展方式主要包括:业务分库、主从复制数据库分表。 雪花算法中在分布式中应用非常的广泛因为雪花算法的有点性 3.9TableFild注解
Data
public class Book {//将属性对应的字段作为主键//TableId注解的value属性用于指定主键的字段//TableId注解的type属性设置主键生成策略TableId(value uid, type IdType.AUTO)private Integer id;private String type;//指定属性所对应的字段名TableField(book_name)private String name;private String description;
}
12345678910111213TableField不是特别的常用若数据库中的字段名是这样的形式“book_name”那么mybatis-plus会自动的将下划线转换为bookName如此大驼峰的命名方式反之亦然 3.10TableLogic注解
物理删除:真实删除将对应数据从数据库中删除之后查询不到此条被删除的数据逻辑删除:假删除将对应数据中代表是否被删除字段的状态修改为被删除状态”之后在数据库中仍旧能看到此条数据记录使用场景:可以进行数据恢复
Data
public class Book {//将属性对应的字段作为主键//TableId注解的value属性用于指定主键的字段//TableId注解的type属性设置主键生成策略TableId(value uid, type IdType.AUTO)private Integer id;private String type;//指定属性所对应的字段名TableField(book_name)private String name;private String description;//设置属性是否逻辑删除TableLogicprivate int isDelete;
}
12345678910111213141516当数据库中的字段有isDelete字段时给对应的实体类加上此注解。在后续的mybatis-plus的删除功能中实际会执行sql中的update的修改操作将isDelete变为1。与此同时mybatis-plus的查询的操作实际在执行sal中自动加上and is_delete 0的操作查询出未删除的数据 4.MP条件构造器✳
4.1Wapper介绍 Wrapper:条件构造抽象类最顶端父类AbstractWrapper : 用于查询条件封装生成sql 的where条件 QueryWrapper :查询条件封装UpdateWrapper : Update条件封装AbstractLambdaWrapper:使用Lambda语法 LambdaQueryWrapper:用于Lambda语法使用的查询WrapperLambdaUpdateWrapper : Lambda更新封装wrapper
4.2QuerryWrapper
4.2.1组装查询
Test
public void testo1(){//查询用户名包含a年龄在20到3o之间邮箱信息不为nuLl的用户信息QuerywrapperUser querywrapper new Querywrapper();querywrapper.like( user_name, a).between( age, 20 30).isNotNull( email);Listuser list userMapper.selectList(querywrapper);list.forEach(system.out: : println) ;
}
123456789注: querywrapper.like中的参数 column是数据库中的字段名并不是实体类中的属性名 4.2.2组装排序
Test
public void test02(){//查询用户信息按照年龄的降序排序若年龄相同则按照id升序排序QuerywrapperUser querywrapper new Querywrapper();querywrapper.orderByDesc(age).orderByAsc(uid);Listuser list userMapper.selectListlquerywrapper);list.forEach(system.out::println);
}
123456789注: querywrapper.orderByDesc中的参数 column是数据库中的字段名并不是实体类中的属性名 4.2.3组装删除
Test
public void test03(){
//删除邮箱地址为null的用户信息
QuerywrapperUser querywrapper new Querywrapper();querywrapper.isNull( email );
int result userMapper.delete(querywrapper);system.out.print1n(result: result);
}
1234567注: querywrapper.isNull中的参数 column是数据库中的字段名并不是实体类中的属性名 4.2.4组装修改
Test
public void test04(){//将年龄大于20并且用户名中包含有a或邮箱为nuLl的用户信息修改QuerywrapperUser querywrapper new Querywrapper();querywrapper.gt( age, 20).like( user_name, a).or().isNul1( email);user user new User();user.setName(小明);user.setEmail( testatguigu.com );int result userMapper.update(user,querywrapper);system.out.println(result: result);}
12345678910111213注: querywrapper.gt中的参数 column是数据库中的字段名并不是实体类中的属性名 gt大于or或许like 模糊匹配 4.2.5条件的优先级条件优先级查询
Testpublic void test05(){//将用户名中包含有a并且年龄大于20或邮箱为null的用户信息修改// Lambda中的条件优先执行QuerywrapperUser querywrapper new Querywrapper();querywrapper.like( column: user_name,val: a).and(i-i.gt( column: age , val: 20).or( ).isNull( column: email));User user new User();user.setName(小红);user.setEmail(testatguigu.com ) ;int result userMapper.update(user,querywrapper);system.out.println( result: result);
}
123456789101112注意Lambada表达式优先执行 参考资料深入浅出 Java 8 Lambda 表达式 - 姚春辉 - 博客园 (cnblogs.com) 4.2.6组装select字句排除某些字段查询
Test
public void test06(){//查询用户的用户名、年龄、邮箱信息QuerywrapperUser querywrapper new Querywrapper();querywrapper.select( user_name age,email );ListMapString,object maps userMapper.selectMaps(querywrapper);maps.forEach(system.out: :println);
}
12345678如果想要查询数据库中的某些值可用select进行组装 4.2.7组装字查询
public void test07(){//查询id小于等于100的用户信息QuerywrapperUser querywrapper new Querywrapper();querywrapper.inSql( column: uidinValue: select uid from t_user where uid 100)ListUser list userMapper.selectList(querywrapper);list.forEach(system.out : :print1n);
123456嵌套子查询如需要用到字查询类的值可使用嵌套子查询进行 4.2.8动态查询✳
public void test10(){string username a;Integer ageBegin null;Integer ageEnd 30;QuerywrapperUser querywrapper new Querywrapper();querywrapper.like(stringutils.isNotBLank(username)column: user_name username).ge( condition: ageBegin ! nullcolumn: age, ageBegin).le( condition: ageEnd l nullcolumn: age, ageEnd);Listuser list userMapper.selectList(querywrapper);list.forEach(system.out : :println);
}
1234567891011当需要使用动态Sql来进行条件拼接时可使用mp的condition功能 4.3UpdateWrapper
public void testo8(){//将用户名中包含有a并且年龄大于20或邮箱为null的用户信息修改UpdatewrapperUser updatewrapper new updatewrapper();updatewrapper.like( column: user_name,val: a).and(i - i.gt( column: ageval: 20).or( ).isNull( column: email));updatewrapper.set(user_name,小黑).set(email , abcatguigu.com );int result userMapper.update( entity: nullupdatewrapper);system.out.println(result: resulth);
}
12345678910修改功能的使用 4.4LambdaQueWrapper
Test
public void test11(){
string username a;Integer ageBegin null;Integer ageEnd 30;
LambdaQuerywrapperUserquerywrapper new LambdaQuerywrapper();
querywrapper.like(stringutils.isNotBLank(username),user::getName,username);
.ge( ageBegin ! null,user::getAge,ageBegin);
.le( ageEnd ! null,user::getAge,ageEnd);
ListUser list userMapper.selectList(querywrapper);
list.forEach(system.out::print1n);
}
123456789101112当使用LambadaQuerapper时配置参数的第二个参数是与QuerryWrepper不相同的它是函数式的接口其中第二个参数可设置为user::getAge为了防止程序员将查询的名字写错 4.5LambdaUpdateWrapper
Test
public void test12(){//将用户名中包含有a并且年龄大于20或邮箱为null的用户信息修改LambdaUpdatewrapperUser updatewrapper new LambdaUpdatewrapper();updatewrapper.like(User: :getNameval: a).and(i - i.gt(User : :getAgeval: 20).or().isNull(User::getEmail));updatewrapper.set(User::getName,小黑).set(User::getEmail,abcatguigu.com);int result userMapper.update( entity: nullupdatewrapper);System.out.println(result: result);
}
12345678910当使用LambdaUpdateWrapper时配置参数的第二个参数是与updatewrapper不相同的它是函数式的接口其中第二个参数可设置为user::getAge为了防止程序员将查询的名字写错 跟LambdaQueWrapper类似 5.MP分页插件✳
5.1常规分页
若需要使用mp的分页工则需要添加配置类
Configuration
public class MpConfig {Beanpublic MybatisPlusInterceptor mInterceptor() {//1.定义Mp拦截器MybatisPlusInterceptor mpInterceptor new MybatisPlusInterceptor();//2.添加具体的拦截器添加分页拦截器实现分页查询的动态SQLmpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return mpInterceptor;}
}
1234567891011
Test
public void testPage(){
PageUser page new Page( current: 2,size: 3);userMapper.selectPage(pagequeryWrapper: null);system.out.println(page);
}
123456MP分页功能的其余方法 iPage.getPages();
iPage.getSize();
iPage.getCurrent();
iPage.getRecords();
iPage.getTotal();
123455.2自定义分页
在自定义的sql查询后实现分页功能
UserMapper.java
/**
*通过年龄查询用户信息并分页
*param page MyBatis-PLus所提供的分页对象必须位于第一个参数的位訇param age
*return
*/
PageUser selectPagevo(Param( page) PageUser pageParam(age) Integer age);
123456application.yml
mybatis-plus:#配置类型别名所对应的包type-aliases-package: com.example.domain#设置mybatis-Plus的统全局配置global-config:db-config:#设置实体类对应的统一前缀table-prefix: tb_ # 生成统一的主键生成策略id-type: autoconfiguration:# 打印Mybatis-plus的执行日志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
12345678910111213type-aliases-package: com.example.domain 对应映射文件UserMapper.xml
select idselectPagevo resultTypeUserselect uid,user_name,age,email from t_user where age #{age}
/select
123返回值类型 设置返回的为User因为最终是返回为User对象 注意此处需要在yml文件中进行配置别名 测试
Test
public void testPagevo(){PageUser page new Page( 1, 3);userMapper.selectPagevo(page 20);system.out.println(page.getRecords());system.out.println(page.getPages());system.out.println(page.getTotal());system.out.println(page.hasNext());system.out.println(page.hasPrevious());
}
123456789106.MP乐观锁和悲观锁
6.1乐观锁插件
乐观锁实现流程 数据库中添加version字段取出记录时获取当前version SELECT id, name,price, version FROM product WHERE id1
1更新时version 1如果where语句中的version版本不对则更新失败 UPDATE product SET priceprice50‘version version 1 WHERE id1 AND‘version1
11.数据库中添加version字段
2.实体类添加Version注解
Data
public class Book {private Integer id;private String type;private String name;private String description;Version //标识乐观锁版本号字段private Integer version;
}
1234567893.配置类中添加乐观锁拦截器
Configuration
public class MpConfig {Beanpublic MybatisPlusInterceptor mInterceptor() {//1.定义Mp拦截器MybatisPlusInterceptor mpInterceptor new MybatisPlusInterceptor();//2.添加具体的拦截器添加分页拦截器实现分页查询的动态SQLmpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//3.添加具体的拦截器添加乐观锁拦截器实现乐观锁的查询mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return mpInterceptor;}
}
123456789101112136.2悲观锁插件
一个人在操作时另一个人不能同时进行操作
7.MP通用枚举EnumValue
1.假设数据库中存储age字段类型为int(类型不相匹配的字段)
2.枚举类添加EnumValue注解
Getter
public enum SexEnum {MALE(1, 男),FEMALE(2, 女);;//将注解所标识的属性的值存储到数据库中EnumValueprivate Integer sex;private String sexName;SexEnum(Integer sex, String sexName) {this.sex sex;this.sexName sexName;}
}
123456789101112131415注意需要添加EnumValue来实现数据库的存值某则会将汉字存入数据库中 Data
public class Book {private Integer id;private String type;private String name;private String description;private SexEnum sex;}
123456789补充在实体类中使用枚举类时需要将类型设定为枚举类型 3.配置application.yml
#mybatis-plus
mybatis-plus: #扫描通用枚举包type-enums-package: com.example.enums
12344.使用枚举类型
user.setsex(SexEnum.MALE);
1在使用时需要从枚举类中读取即可 8.MP代码生成器
1.导入依赖 pom.xml
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-generator/artifactIdversion3.5.1/version
/dependency
dependencygroupIdorg.freemarker/groupIdartifactIdfreemarker/artifactIdversion2.3.31/version
/dependency
123456789102.快速生成
FastAutoGenerator.create(url, username, password).globalConfig(builder - {builder.author(baomidou) // 设置作者//.enableSwagger() // 开启 swagger 模式.fileOverride() // 覆盖已生成文件.outputDir(D://); // 指定输出目录}).packageConfig(builder - {builder.parent(com.baomidou.mybatisplus.samples.generator) // 设置父包名.moduleName(system) // 设置父包模块名.pathInfo(Collections.singletonMap(OutputFile.xml, D://)); // 设置mapperXml生成路径}).strategyConfig(builder - {builder.addInclude(t_simple) // 设置需要生成的表名.addTablePrefix(t_, c_); // 设置过滤表前缀}).templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板默认的是Velocity引擎模板.execute();9.MP配置多数据源
1.添加yml配置
application.yml
spring:datasource:dynamic:#设置默认的数据源或者数据源组,默认值即为masterprimary: master #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源strict: false datasource:master:url: jdbc:mysql://xx.xx.xx.xx:3306/dynamicusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置mysql2:url: jdbc:mysql://xx.xx.xx.xx:3307/dynamicusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Drivermysql2:url: ENC(xxxxx) # 内置加密,使用请查看详细文档username: ENC(xxxxx)password: ENC(xxxxx)driver-class-name: com.mysql.cj.jdbc.Driver#......省略2.更改数据源
DS(master)
Service
public class BookServiceImpl extends ServiceImplBookDao, Book implements IBookService {
}
123410.MyBatisX插件
使用方法
1.idea中 DataBase右击构造快速生成
2.选择modulepackage实体类忽略前缀和表前缀 3.一般如下选择配置 11.知识加油站
11.1 lombok
!--lombok--
dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId
/dependency
12345
Data
public class Book {private Integer id;private String type;private String name;private String description;
}LomBok不会生成有参构造的方法