如果这篇文章对您有些用处,请点赞告诉我O(∩_∩)O
一、简介
1、genl:generate lightly,轻量生成mybatis数据层相关文件。
2、gitee地址:Ethan 姚/mybatis-genl
3、解决问题:
(1)mybatis自带的生成程序,generator.xml配置项过多,生成大量冗余文件。
(2)数据库修改字段后,重新生成文件与自定义代码冲突,需要手动处理。
(3)mybaits的Criteria滥用,不易sql调优&查错,需要限定免写sql的场景。
4、支持DB:mysql
二、安装与使用
1、pom.xml中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.1.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
2、将genl.properties 放置到 src/main/resouces (完整文件在gitee)
(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半覆盖:在`<!-- O(∩_∩)O -->`以下部分属于自定义代码部分,不会覆盖,反之为系统生成部分会覆盖生成。
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
3、main方法生成
public static void main(String[] args) throws IOException {
MybatisGenL.generate();
}
三、Mapper API
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<PortalAccount> 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);
四、规范建议
1、SQL规范
mybatis-genl可用于的免写sql的场景:
(1)单表查询(in,like,比较,between,=)
(2)单表新增、修改、删除
除此之外,请自定义sql完成。
2、数据访问层代码规范
当使用xxxByParams方法时,由于直接使用数据库列名作为key,因此需要在Mapper或者DAO层封装后,再在Service使用。
public interface PortalAccountMapper extends BaseMapper<PortalAccount>{
default PortalAccount selectAccountByUserNo(String userNo) {
BaseMapperParams params = new BaseMapperParams();
params.addColumn("user_no", userNo);
return selectOneByParams(params);
}
}
Mybatis-genl是一个轻量级的代码生成工具,旨在解决Mybatis自带生成器配置复杂、冗余文件多以及数据库字段修改后的冲突问题。它支持MySQL数据库,提供简单易用的API进行增删改查操作,同时避免过度使用Criteria,便于SQL优化。安装只需添加依赖,配置genl.properties文件,通过Main方法即可生成代码。建议用于单表查询和基础CRUD操作,遵循SQL和代码规范。

被折叠的 条评论
为什么被折叠?



