【昭阳】开源第1弹 mybatis-genl

Mybatis-genl是一个轻量级的代码生成工具,旨在解决Mybatis自带生成器配置复杂、冗余文件多以及数据库字段修改后的冲突问题。它支持MySQL数据库,提供简单易用的API进行增删改查操作,同时避免过度使用Criteria,便于SQL优化。安装只需添加依赖,配置genl.properties文件,通过Main方法即可生成代码。建议用于单表查询和基础CRUD操作,遵循SQL和代码规范。

如果这篇文章对您有些用处,请点赞告诉我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);
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值