商城网站开发文档,宣传片制作公司报价及图片,模拟登录wordpress c,用文字写美食个人网站设计作品写在前面的话 MyBatis-Flex 是一个优雅的 MyBatis 增强框架#xff0c;它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库#xff0c;其内置的 QueryWrapper 帮助我们极大的减少了 SQL 编写的工作的同时#xff0c;减少出错的可能性…写在前面的话 MyBatis-Flex 是一个优雅的 MyBatis 增强框架它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库其内置的 QueryWrapper 帮助我们极大的减少了 SQL 编写的工作的同时减少出错的可能性。
特征
1、轻量 除了 MyBatis没有任何第三方依赖轻依赖、没有任何拦截器其原理是通过 SqlProvider 的方式实现的轻实现。同时在执行的过程中没有任何的 Sql 解析Parse轻运行。 这带来了几个好处1、极高的性能2、极易对代码进行跟踪和调试 3、更高的把控性。 2、灵活 支持 Entity 的增删改查、以及分页查询的同时MyBatis-Flex 提供了 Db Row^灵活 工具可以无需实体类对数据库进行增删改查以及分页查询。 与此同时MyBatis-Flex 内置的 QueryWrapper^灵活 可以轻易的帮助我们实现 多表查询、链接查询、子查询 等等常见的 SQL 场景。 3、强大 支持任意关系型数据库还可以通过方言持续扩展同时支持 多复合主键、逻辑删除、乐观锁配置、数据脱敏、数据审计、 数据填充 等等功能。 功能对比
功能或特点MyBatis-FlexMyBatis-PlusFluent-MyBatis对 entity 的基本增删改查✅✅✅分页查询✅✅✅分页查询之总量缓存✅✅❌分页查询无 SQL 解析设计更轻量及更高性能✅❌✅多表查询 from 多张表✅❌❌多表查询 left join、inner join 等等✅❌✅多表查询 unionunion all✅❌✅单主键配置✅✅✅多种 id 生成策略✅✅✅支持多主键、复合主键✅❌❌字段的 typeHandler 配置✅✅✅除了 MyBatis无其他第三方依赖更轻量✅❌❌QueryWrapper 是否支持在微服务项目下进行 RPC 传输✅❌未知逻辑删除✅✅✅乐观锁✅✅✅SQL 审计✅❌❌数据填充✅✅✅数据脱敏✅✔️ 收费❌字段权限✅✔️ 收费❌字段加密✅✔️ 收费❌字典回写✅✔️ 收费❌Db Row✅❌❌Entity 监听✅❌❌多数据源支持✅借助其他框架或收费❌多数据源是否支持 Spring 的事务管理比如 Transactional 和 TransactionTemplate 等✅❌❌多数据源是否支持 非Spring 项目✅❌❌多租户✅✅❌动态表名✅✅❌动态 Schema✅❌❌
1.快速上手使用springboot
1.1 依赖 pom文件主要添加mybatis-flex-spring-boot-starter依赖
dependenciesdependencygroupIdcom.mybatis-flex/groupIdartifactIdmybatis-flex-spring-boot-starter/artifactIdversion1.8.2/version/dependencydependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependencydependencygroupIdcom.zaxxer/groupIdartifactIdHikariCP/artifactId/dependency!-- for test only --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency
/dependencies
1.2 配置 在 application.yml文件中进行如下简单数据源配置
# DataSource Config
spring:datasource:url: jdbc:mysql://localhost:3306/flex_testusername: rootpassword: 12345678 在 Spring Boot 启动类中添加 MapperScan 注解扫描 Mapper 文件夹
SpringBootApplication
MapperScan(com.mybatisflex.test.mapper)
public class MybatisFlexTestApplication {public static void main(String[] args) {SpringApplication.run(MybatisFlexTestApplication.class, args);}}
1.3 编写实体类和 Mapper 接口 使用了 Lombok 来简化代码。
Data
Table(tb_account)
public class Account {Id(keyType KeyType.Auto)private Long id;private String userName;private Integer age;private Date birthday;}
使用 Table(tb_account) 设置实体类与表名的映射关系使用 Id(keyType KeyType.Auto) 标识主键为自增 Mapper 接口继承 BaseMapper 接口
public interface AccountMapper extends BaseMapperAccount {}
1.4 启动运行 添加测试类如下代码中ACCOUNT 为 MyBatis-Flex 通过 APT 自动生成只需通过静态导入即可无需手动编码
import static com.mybatisflex.test.entity.table.AccountTableDef.ACCOUNT;SpringBootTest
class MybatisFlexTestApplicationTests {Autowiredprivate AccountMapper accountMapper;Testvoid contextLoads() {QueryWrapper queryWrapper QueryWrapper.create().select().where(ACCOUNT.AGE.eq(18));Account account accountMapper.selectOneByQuery(queryWrapper);System.out.println(account);}} 有同学会发现ACCOUNT.AGE.eq(18)这个ACCOUNT类没法导入包一直报错是因为你还没有导入进来你在编译的时候这个位置需要导入进来 如上操作就行了还有同学说我还没有编译上面的代码也运行不了怎么办你可以把这个测试代码换一下 换成这样的测试代码就解决了先运行编译一下就出现了。 Autowiredprivate AccountMapper accountMapper;Testvoid contextLoads() {QueryWrapper queryWrapper QueryWrapper.create().select().where(ACCOUNT.AGE.eq(18));Account account accountMapper.selectOneByQuery(queryWrapper);System.out.println(account);} 还有的同学编译后了还是没有出现这个辅助类怎么办 你可以按照下面的图片进行操作 没有生成辅助类你可以开启idea的注解处理器如下图所示 然后检查processor这个包是否导入进来了就是有没有在pom文件添加以下依赖刷新maven
dependency
groupIdcom.mybatis-flex/groupId
artifactIdmybatis-flex-spring-boot-starter/artifactId
version1.7.3/version
/dependency 完成以上内容肯定会运行成功的祝你成功
2.代码生成器实现运行 在 mybatis-flex 的模块 mybatis-flex-codegen 中提供了可以通过数据库表生成 Entity 类和 Mapper 类的功能。当把数据库表设计完成后可以使用其快速生成 Entity、 Mapper、 Service、 Controller 等产物。 除此之外还可以通过扩展生成更多种类的物料。
2.1 添加依赖 添加 mybatis-flex-codegen 的 Maven 依赖。 dependencygroupIdcom.mybatis-flex/groupIdartifactIdmybatis-flex-codegen/artifactIdversion1.8.2/version
/dependency
!--也可添换成druid依赖---
dependencygroupIdcom.zaxxer/groupIdartifactIdHikariCP/artifactIdversion4.0.3/version
/dependencydependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdversion8.0.32/version
/dependency
2.2 生成类 最后编写一个任意带有 main 方法的类如下所示 运行可以生成以下内容
Entity 实体类Mapper 映射类TableDef 表定义辅助类Service 服务类ServiceImpl 服务实现类Controller 控制类MapperXml 文件
package com.wei.demo1.controller;import com.mybatisflex.codegen.Generator;
import com.mybatisflex.codegen.config.GlobalConfig;
import com.mybatisflex.core.service.IService;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.zaxxer.hikari.HikariDataSource;/*** BelongsProject: demo1* BelongsPackage: com.wei.demo1.demos.web.controller* ClassName CodeGen* Author: weiq* CreateTime: 2024-03-06 18:24* Description: TODO* Version: 1.0*/
public class CodeGen {public static void main(String[] args) {//配置数据源HikariDataSource dataSource new HikariDataSource();
// DruidDataSource dataSource new DruidDataSource();dataSource.setJdbcUrl(jdbc:mysql://127.0.0.1:3306/flex-test?characterEncodingutf-8useInformationSchematrue);dataSource.setUsername(root);dataSource.setPassword(root);//创建配置内容两种风格都可以。GlobalConfig globalConfig createGlobalConfigUseStyle1();
// GlobalConfig globalConfig createGlobalConfigUseStyle2();//通过 datasource 和 globalConfig 创建代码生成器Generator generator new Generator(dataSource, globalConfig);//生成代码generator.generate();}public static GlobalConfig createGlobalConfigUseStyle1() {//创建配置内容GlobalConfig globalConfig new GlobalConfig();//设置根包globalConfig.setBasePackage(com.wei.demo1);//设置表前缀和只生成哪些表globalConfig.setTablePrefix(tb_);globalConfig.setGenerateTable(tb_account);//设置生成 entity 并启用 LombokglobalConfig.setEntityGenerateEnable(true);globalConfig.setEntityWithLombok(true);//设置项目的JDK版本项目的JDK为14及以上时建议设置该项小于14则可以不设置
// globalConfig.setEntityJdkVersion(17);//设置生成 controllerglobalConfig.setControllerGenerateEnable(true);//设置生成 serviceglobalConfig.setServiceGenerateEnable(true);//设置生成 serviceImplglobalConfig.setServiceImplGenerateEnable(true);//设置生成 mapperglobalConfig.setMapperGenerateEnable(true);//设置生成 mapperXmlglobalConfig.setMapperXmlGenerateEnable(true);globalConfig.getControllerConfig().setClassPrefix().setClassSuffix(Controller).setRestStyle(true);globalConfig.getServiceConfig().setClassPrefix().setClassSuffix(Service).setSuperClass(IService.class).setOverwriteEnable(true);globalConfig.getServiceImplConfig().setClassPrefix().setClassSuffix(ServiceImpl).setSuperClass(ServiceImpl.class).setOverwriteEnable(true);globalConfig.getMapperXmlConfig().setFilePrefix(com.wei.demo1).setFileSuffix(Mapper).setOverwriteEnable(true);//可以单独配置某个列
// ColumnConfig columnConfig new ColumnConfig();
// columnConfig.setColumnName(tenant_id);
// columnConfig.setLarge(true);
// columnConfig.setVersion(true);
// globalConfig.setColumnConfig(tb_account, columnConfig);return globalConfig;}public static GlobalConfig createGlobalConfigUseStyle2() {//创建配置内容GlobalConfig globalConfig new GlobalConfig();//设置根包globalConfig.getPackageConfig().setBasePackage(com.wei.mybatisflex);//设置表前缀和只生成哪些表setGenerateTable 未配置时生成所有表globalConfig.getStrategyConfig().setTablePrefix(tb_);
// .setGenerateTable(tb_account, tb_account_session);//设置生成 entity 并启用 LombokglobalConfig.enableEntity().setWithLombok(true);
// .setJdkVersion(17);//设置生成 mapperglobalConfig.enableMapper();// //可以单独配置某个列
// ColumnConfig columnConfig new ColumnConfig();
// columnConfig.setColumnName(tenant_id);
// columnConfig.setLarge(true);
// columnConfig.setVersion(true);
// globalConfig.getStrategyConfig()
// .setColumnConfig(tb_account, columnConfig);return globalConfig;}
}在 Mybatis-Flex 的代码生成器中支持如下 8 种类型的的产物生成
Entity 实体类Mapper 映射类TableDef 表定义辅助类Service 服务类ServiceImpl 服务实现类Controller 控制类MapperXml 文件package-info.java 文件 启用或关闭某种类型产物的生成代码如下
// 开启 Entity 的生成
globalConfig.enableEntity();
// 关闭 Entity 的生成
globalConfig.disableEntity(); 所有方法均支持链式调用配置代码如下
// 设置生成 Entity 并启用 Lombok、设置父类
globalConfig.enableEntity().setWithLombok(true).setSuperClass(BaseEntity.class);
注意事项 在 MySQL 或者 Oracle 的某些版本中代码生成器可能无法获取 表 或者 字段 的注释内容我们在数据源配置时注意添加如下的配置信息
MySQL
JdbcUrl 上注意添加 useInformationSchematrue 配置如下代码所示
HikariDataSource dataSource new HikariDataSource();//注意url 需添加上 useInformationSchematrue 才能正常获取表的注释
dataSource.setJdbcUrl(jdbc:mysql://127.0.0.1:3306/db?useInformationSchematruecharacterEncodingutf-8);
dataSource.setUsername(username);
dataSource.setPassword(password);
3.MyBatis-Flex配置总结 配置文件可以在yml文件和代码中进行配置
3.1 yml文件配置
server:port: 8080
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/flex-testusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Drivertype: com.zaxxer.hikari.HikariDataSource
mybatis-flex:mapper-locations: classpath:/mapper/**/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3.2 代码中进行配置
Configuration
public class MybatisFlexConfig implementsConfigurationCustomizer,SqlSessionFactoryBeanCustomizer,MyBatisFlexCustomizer {Overridepublic void customize(FlexConfiguration flexConfiguration) {System.out.println(Mybatis Configuration 配置);}Overridepublic void customize(SqlSessionFactoryBean sqlSessionFactoryBean) {System.out.println(sqlSessionFactoryBean 配置);}Overridepublic void customize(FlexGlobalConfig flexGlobalConfig) {System.out.println(MyBatis Flex 配置);}
}
配置文件运行顺序如下所示 后续继续更新