# mybatis-genl
**Repository Path**: flyzing/mybatis-genl
## Basic Information
- **Project Name**: mybatis-genl
- **Description**: No description available
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2021-01-04
- **Last Updated**: 2021-10-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# mybatis-genl
1、genl是generate lightly的意思:轻量生成。
解决问题:
(1)原有generator.xml配置项过多,生成大量冗余文件。
(2)数据库修改字段后,重新生成文件与自定义代码冲突,需要手动处理。
(3)mybaits的Criteria滥用,不易sql调优&查错,需要限定免写sql的场景。
2、支持DB:mysql
3、使用步骤:
(1)pom.xml中添加依赖:
```
org.springframework.boot
spring-boot-starter-thymeleaf
ognl
ognl
3.1.12
mysql
mysql-connector-java
8.0.11
```
(2)将genl.properties 放置到 src/main/resouces
(3)main方法中执行:
```
public static void main(String[] args) throws IOException {
MybatisGenL.generate();
}
```
4、genl.properties配置说明
(1)jdbc配置:
```
jdbc.driverName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&useSSL=false
jdbc.username=XXXXX
jdbc.password=XXXXX
```
(2)需要生成表设置:
table.schema为db名称,table.prefix按照前缀生成,table.names指定表名生成,两种生成方式只能二选一。
```
table.schema=mydb
table.prefix=portal_
#table.names=Table1, Table1
```
(3)生成文件配置
默认生成策略:
po覆盖(建议不要添加任何代码保持和数据库一致)
mapper不覆盖(BaseMapper,BaseMapperParams除外)
mapperXML半覆盖:在``以下部分属于自定义代码部分,不会覆盖,反之为系统生成部分会覆盖生成。
```
package.po=com.rt.portal.po
package.mapper=com.rt.portal.dao
path.mapperXML=src/main/resources/mapper
```
(4)非必要配置
```
#非必要,select查询limit默认条数,默认1000
BaseMapperParams.rows=5000
#非必要,是否重写,默认true
#override.po=false
```
5、mapper可用方法
(1)insert 插入并返回主键id
```
int id = portalAccountMapper.insert(portalAccount);
```
(2)insertBatch 批量插入,注意,不能依靠数据库默认值,必须设置所有属性。
```
portalAccountMapper.insertBatch(list);
```
(3)deleteByPrimaryKey 按照主键删除
```
portalAccountMapper.deleteByPrimaryKey(8l);
```
(4)update 按照主键修改
```
portalAccount = new PortalAccount();
portalAccount.setId(9l);
portalAccount.setAccountName("xxxxxxxxx");
portalAccountMapper.update(portalAccount);
```
(5)selectByPrimaryKey 按照主键查询
```
PortalAccount portalAccount = portalAccountMapper.selectByPrimaryKey(5l);
```
(6)selectByParams 按照BaseMapperParams自定义条件列表查询
依靠参数BaseMapperParams支持5种查询方式,支持分页,并可以通过clear()方法清空,从而复用。
注意,BaseMapperParams所有参数key对应于数据库字段,不是po属性。
```
BaseMapperParams params = new BaseMapperParams();
//等值查询:
params.addColumn("account_name", "bbb6");
//比较查询:
params.addCompareColumn("create_time", start, CompareTypeEnum.GE);
//between查询:
params.addBetweenColumn("create_time", start, end);
//in查询:
params.addInColumns("id", Arrays.asList(19, 20, 21, 24, 25, 26));
//like查询:
params.addLikeColumn("account_pass", "%0%");
//分页查询,默认限制查询行数为1000,可以通过配置修改,
params.setOffset(0); //起始偏移量
params.setRows(20); //查询行数
params.setOrderByClause("id desc"); //排序
//params.setPage(1, 20); //也可以直接设置pageNo,pageSize
List list = portalAccountMapper.selectByParams(params);
```
(7)selectCountByParams 按照BaseMapperParams自定义条件列表数量查询
```
int count = portalAccountMapper.selectCountByParams(params);
```
(8)selectOneByParams 根据BaseMapperParams自定义条件查询一个Entity,如果多个则返回第一个,如果没有则返回null
```
BaseMapperParams params = new BaseMapperParams();
params.addColumn("id", 21);
PortalAccount account = portalAccountMapper.selectOneByParams(params);
if (account != null) {
System.out.println(account.getAccountName());
}
```
(9)deleteByParams 按照BaseMapperParams自定义条件删除,key为数据库列
```
BaseMapperParams params = new BaseMapperParams();
params.addCompareColumn("id", 16, CompareTypeEnum.LT);
portalAccountMapper.deleteByParams(params);
```
(10)updateByParams 按照BaseMapperParams自定义条件修改,key为数据库列
```
BaseMapperParams params = new BaseMapperParams();
params.addCompareColumn("id", 16, CompareTypeEnum.LT);
params.addUpdateColumn("account_name", "ppppp");
portalAccountMapper.updateByParams(params);
```
简言之,免写sql的场景:
(1)单表查询(in,like,比较,between,=)
(2)单表新增、修改、删除
除此之外,请自定义sql完成。
规范建议:
当使用xxxByParams方法时,由于直接使用数据库列名作为key,因此需要在Mapper或者DAO层封装后,再在Service使用。
```
public interface PortalAccountMapper extends BaseMapper{
default PortalAccount selectAccountByUserNo(String userNo) {
BaseMapperParams params = new BaseMapperParams();
params.addColumn("user_no", userNo);
return selectOneByParams(params);
}
}
```