https://github.com/isnott/nott-mybatis-core
个人的mybatis学习包,基于mybatis3.5,spring6.0,mysql,java17+,spring-aop等依赖,封装通用mapper提供curd基础操作以及动态数据源功能。
https://github.com/isnott/nott-mybatis-core
aop-aspects dynamic-datasource java17 mybatis spring6
Last synced: about 2 months ago
JSON representation
个人的mybatis学习包,基于mybatis3.5,spring6.0,mysql,java17+,spring-aop等依赖,封装通用mapper提供curd基础操作以及动态数据源功能。
- Host: GitHub
- URL: https://github.com/isnott/nott-mybatis-core
- Owner: IsNott
- License: apache-2.0
- Created: 2024-05-10T03:56:14.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2024-05-22T03:23:16.000Z (about 1 year ago)
- Last Synced: 2024-05-22T22:36:18.231Z (12 months ago)
- Topics: aop-aspects, dynamic-datasource, java17, mybatis, spring6
- Language: Java
- Homepage:
- Size: 181 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# mybatis通用操作包
基于mybatis3.5,spring,mysql,java17+的通用操作包,封装curd通用基础操作。## 创建初衷
根据mybatis文档教程从头进行学习(aop、动态数据源、mybatis插件等),封装自用的mybatis数据操作包。## 版本 (Version)
0.0.4## 依赖版本
|name|version|
|--|--|
|spring-boot-starter-parent|3.1.0|
|mysql-connector-j|8.3.0|
|aspectjweaver|1.9.21.1|
|mybatis-spring|3.0.1|
|spring-context|6.0.9|
|spring-boot-configuration-processor|3.1.5|
|log4j-api|2.20.0|
|spring-test|6.0.9|
|mybatis|3.5.11|
|...|...|*完整依赖见[GitHub](https://github.com/IsNott/nott-mybatis-core)项目pom文件*
## 模块
|name|description|
|--|--|
|nott-mybatis-curd|mybaits-基础|
|nott-mybatis-dynamic-datasource|mybatis-动态数据源|
|nott-web-test|web测试模块|## 使用说明
### 引入
pom.xml引入模块(nott-mybatis-orm/dynamic-datasource)
```xml
io.github.isnott
nott-mybatis-orm
0.0.4
io.github.isnott
nott-mybatis-dynamic-datasource
0.0.4
```
在web项目启动主方法上加入注解 @ComponentScan({"org.nott"})
可参考项目web模块test文件夹下的单元测试方法。
自定义service实现类继承ICommonService获取通用service实现方法
(在CommonMapper提供的方法上二次封装分页等方法)
```java
@Service
public class UserService extends ICommonService {}
```自定义mapper可直接获取CommonMapper基础方法(需要传递泛型)
```java
public interface UserMapper extends CommonMapper {}
```## ORM
**application.yml**加入以下配置
```yml
nott:
mybatis:
mapper-location: classpath:mapper/**Mapper.xml
# 不加入dynamic-dataSource时加入下面配置
datasource:
name: mysql-db01
url: jdbc:mysql://127.0.0.1:3306/test?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
username: root
password: 888888
driverClassName: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimumIdle: 0
maximumPoolSize: 20
idleTimeout: 10000
connectionTestQuery: select 1
poolName: nott-hikari-01
```支持Select、Update、Delete、Insert基础方法(selectById、selectOne)、
单表查询、更新条件构造器使用示例:
```java
List users = userMapper.selectList();
// 单表条件查询
User user = userMapper.selectOneByCondition(
QuerySqlConditionBuilder.build()
.eq("name","youKnowWho")
);
``````java
/**
* 单表条件查询支持的方法接口
*/
public interface SqlQuery {
SqlConditionBuilder eq(String colum, Object val);SqlConditionBuilder neq(String colum, Object val);
SqlConditionBuilder gt(String colum, Object val);
SqlConditionBuilder ge(String colum, Object val);
SqlConditionBuilder lt(String colum, Object val);
SqlConditionBuilder le(String colum, Object val);
...
}
```Update、Delete、Insert基础方法,详见CommonMapper文件
```
int affectRow = userMapper.updateById(user);
int affectRow = userMapper.insert(user);
int affectRow = userMapper.deleteById("123435345");
int affectRow = userMapper.deleteByIds(Arrays.asList("123435345"));
```Service封装mapper基础方法、分页方法,详见CommonService文件
```
...
Page page(Page page);Page page(Page page, QuerySqlConditionBuilder querySqlConditionBuilder);
...
```
## dynamic-datasource
切换数据源,支持使用hikari/druid数据源在application.yml加入动态数据源开关
```yaml
nott:
enable-dynamic-datasource: true
```
添加data-source.yml文件,加入数据源列表(hikari/druid),
当application.yml和data-source.yml数据源配置内容同时存在,并且打开动态数据源开关,
程序只加载data-source.yml里的内容。*不需要动态切换数据源时,关闭application.yml中的开关即可。*
```yaml
dataSourceConfigs:
- name: mysql-db01
url: jdbc:mysql://127.0.0.1/test?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
username: root
password: 123456
driverClassName: com.mysql.cj.jdbc.Driver
# 标识默认数据源
primary: true
type: com.zaxxer.hikari.HikariDataSource
#type: com.alibaba.druid.pool.DruidDataSource
hikari:
minimumIdle: 0
maximumPoolSize: 20
idleTimeout: 10000
connectionTestQuery: select 1
poolName: nott-hikari-01
- name: mysql-db02
...
```
在代码或者方法体上切换数据源
```java
public void test(){
// 显式切换
DynamicDataSourceHolder.setDynamicDataSourceKey("mysql-db02");
}@DataSource("mysql-db02")
public void test(){
...
}```
## 迭代
联表查询构造器,Mybatis mapper执行传入SqlBuilder组装的SQL语句并,详见META-INF/mybatis/Mapper.xml文件、ComplexityWrapper类。
```java
// 返回特定对象列表
List result = ComplexityWrapper.build(User.class, "t1")
.leftJoin(UserRelation.class, "t2", Join.on("t1.id", "t2.user_id", SqlOperator.EQ))
.colums(Colum.select("T1.id","userId"))
.condition(Where.eq("t1.id", "410544b2-4001-4271-9855-fec4b62350d"))
.orderByAsc("t1.id")
.groupBy("t1.id")
.beanType(UserRelationVo.class);// 返回分页对象
Page page = ComplexityWrapper.build(User.class, "t1")
.leftJoin(UserRelation.class, "t2", Join.on("t1.id", "t2.user_id", SqlOperator.EQ))
.colums(Colum.select("T1.id", "userId"))
.condition(Where.eq("t1.id", "410544b2-4001-4271-9855-fec4b62350d"))
.groupBy("t1.id")
.page(UserRelationVo.class, 1, 10);
```## 参考文档
mybatis中文文档:https://mybatis.net.cn/getting-started.htmlmybatis与spring整合版本对应关系参考:https://mybatis.org/spring/
jsqlparser:https://jsqlparser.github.io/JSqlParser/usage.html
hikari数据源配置参考: https://www.cnblogs.com/didispace/p/12291832.html
druid配置属性:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8