# 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); } } ```