# zjdbc **Repository Path**: nowuser118/zjdbc ## Basic Information - **Project Name**: zjdbc - **Description**: mybatis扩展,基于mybatis的Mapper注解@SelectProvider、@InsertProvider、 @UpdateProvider、@DeleteProvider写法生成动态SQL,无需手写xml语句,支持一对一、一对多的映射,支持分页(无需插件),支持基础的聚合函数封装,支持手写SQL自行处理结果集,同时对基础数据类型的数组字段内部做了JSON序列化与反序列化处理。本插件同mybatis高度兼容,无需引入其他jar包,配置基本同mybatis保持一致 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-06-09 - **Last Updated**: 2025-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 本插件实际是基于mybatis的Mapper注解@SelectProvider、@InsertProvider、 @UpdateProvider、@DeleteProvider写法生成动态SQL,无需手写xml语句,支持一对一、一对多的映射,支持分页(无需插件),支持基础的聚合函数封装,支持手写SQL自行处理结果集,同时对基础数据类型的数组字段内部做了JSON序列化与反序列化处理。本插件同mybatis高度兼容,无需引入其他jar包,配置基本同mybatis相同。 ##### 默认的规则 1. 数据表命名以t_开头,可配置 2. 字段以a_b形式命名,且不可出现关键字,des、sort等 3. 时间以datetime表示,timestamp只能向上表示到2037-12-31 23:59:59 4. 默认的SQL方言是MySQL,可配置为MSSQL、ORACLE ```java //在Applicatin中设置当前SQL方言为oracle SQLHelper.setDialect(SQLHelper.DIALECT_ORACLE) ``` ##### jar包配置方法 在pom.xml中添加依赖,将jar包放在项目libs目录下 ```xml 1.7.25 2.9.7 com.png jdbc 1.1.0 system ${project.basedir}/libs/jdbc-1.1.0.jar mysql mysql-connector-java 8.0.13 protobuf-java com.google.protobuf org.mybatis.spring.boot mybatis-spring-boot-starter 1.1.1 org.springframework.boot spring-boot-maven-plugin true ``` ##### application.yml配置,同mybatis一致 ```yml mybatis: type-aliases-package: com.pinc.core.entity.po mapper-locations: classpath:mybatis/*Mapper.xml ``` ##### autoconfigure配置 ```java @MapperScan("com.pinc.core.mapper") @SpringBootApplication(scanBasePackages = {"com.pinc"}) public class CoreApplication { ... } ``` ##### 重点,mapper注入 ```java @Component @Slf4j public class JdbcHandler extends SQLHandler { //这一行是重点,必须要有才行 @Autowired public void setExtMapper(ExtMapper mapper) { super.setMapper(mapper); } ... } //使用db对象执行CRUD操作 @Autowried private JdbcHandler db; ``` **至此,配置完成,此配置将同时支持mybatis的原生xml写法,互不影响** #### API ```html ------------delete------------ int delete(java.lang.Class clz, Builder builder) int delete(java.lang.Class clz, java.lang.Object id) ------------insert------------ int insert(java.lang.Object bean) int insert(java.lang.Object bean, boolean withGenKey, boolean insertOnly, java.lang.String... exclude) void insertBatch(java.util.List fields, java.util.List dtoList) 无需自己组装SQL void insertBatch(java.lang.String sql, java.util.List parameters) 需自己组装SQL语句 void insertOnly(java.lang.Object bean) 插入记录(无id返回) int insertSelective(java.lang.Object bean, java.lang.String... exclude) 插入非空值 void insertSelectiveOnly(java.lang.Object bean, java.lang.String... exclude) 插入非空值(无id返回) ------------select------------ long selectCount(BasicQuery query) long selectCount(java.lang.Class clz, Builder builder) java.util.List selectDistinct(java.lang.Class clz, java.lang.String key, Builder builder) double selectFunc(int funcType, java.lang.Class clz, java.lang.String key, Builder builder) java.lang.Integer selectInteger(java.lang.String sql, java.lang.Object... parameters) java.util.List selectList(BasicQuery query, java.lang.String... include) java.util.List selectList(java.lang.Class clz, Builder builder, java.lang.String... include) java.util.List selectList(java.lang.Class clz, java.lang.String... include) java.util.List selectList(java.lang.String sql, ResultHandle rowHandler, java.lang.Object... parameters) java.util.List selectListExclude(BasicQuery query, java.lang.String... exclude) java.util.List selectListExclude(java.lang.Class clz, Builder builder, java.lang.String... exclude) java.util.List selectListExclude(java.lang.Class clz, java.lang.String... exclude) java.lang.Object selectObject(java.lang.String sql, java.lang.Object... parameters) java.util.List selectObjects(java.lang.String sql, java.lang.Object... parameters) T selectOne(BasicQuery query, java.lang.String... include) T selectOne(java.lang.Class clz, Builder builder) T selectOne(java.lang.Class clz, int id, java.lang.String... include) T selectOne(java.lang.Class clz, java.lang.String fieldName, java.lang.Object value) T selectOne(java.lang.String sql, ResultHandle handler, java.lang.Object... parameters) T selectOneExclude(BasicQuery query, java.lang.String... exclude) T selectOneExclude(java.lang.Class clz, int id, java.lang.String... exclude) T selectOneExist(java.lang.Class clz, Builder builder) T selectOneExist(java.lang.Class clz, int id) Bean selectPageBean(BasicQuery query) 分页查询 Bean selectPageBean(java.lang.Class clz, Builder builder) 分页查询 java.util.Map selectPageList(BasicQuery query) 分页查询 java.util.Map selectPageList(java.lang.Class clz, Builder builder) 分页查询 ------------update------------ int update(java.lang.Object bean) int update(java.lang.Object bean, Builder builder) int update(java.lang.String sql, java.lang.Object... parameters) void updateBatch(java.lang.String sql, java.util.List params) int updateSelective(java.lang.Object bean) 部分字段更新(为空、为0不更新) int updateSelective(java.lang.Object bean, Builder builder) 部分字段更新(为空、为0不更新) ``` ##### select用法示例 ```java //distinct查询 db.selectDistinct(Region.class, "name", Builder.build().limit(10)); //聚合sum查询 db.selectFunc(SQLHandler.FUNC_SUM, Region.class, "code", Builder.build().limit(2)); //列表查询,不带分页 db.selectList(Region.class, Builder.build().limit(2)); //列表查询,不带分页 Region.RegionBasicQuery query = new Region.RegionBasicQuery(); db.selectList(query); //分页查询 db.selectPageBean(query); //分页查询 db.selectPageBean(Region.class, Builder.build().gte("code", 420000)); //count db.selectCount(query); //详情查询 db.selectOne(Region.class,Builder.build().eq("id",111)); //info详情查询,如果info中添加了关联注解,则会一对一,一对多查询 db.selectOne(RegionInfo.class,Builder.build().eq("id",111)); //自定义返回集处理 selectList(java.lang.String sql, ResultHandle rowHandler, java.lang.Object... parameters) List> list = db.selectList("show global status where variable_name in " + "("Queries","Aborted_connects","com_insert" , "com_delete" ," + ""com_update", "uptime"", (rs) -> { Map m = new HashMap<>(8); m.put("Variable_name", rs.get("Variable_name")); m.put("Value", rs.get("Value")); return m; }); ``` ##### insert用法示例 ```java //批量插入,会自动从regionList中取值,内部实现了批量,256为一批 insertBatch(Lists.newArrayList("code","name"),regionList); //单个插入,返回id insert(region); //单个插入,不返回id insertOnly(region); //单个插入,null参不插入 insertSelective(region) //单个插入,null参不插入且code、level不插入 insertSelective(region,"code","level") ``` ##### update用法示例 ```java //单条更新,且id字段必须存在且有值 update(region); //单条SQL更新,?通配符参数占位 update("update t_region set code=? where id =?",420000,111); //根据builder条件更新 update(region,Builder.build().gte("code", 420000)); //单条更新,只修改非null字段,且id字段必须存在且有值 updateSelective(region); //根据builder条件更新,只修改非null字段 updateSelective(region,Builder.build().gte("code", 420000)); //批量更新,内部实现了批量更新,256为一批 updateBatch("update t_region set code=? where id=?",regions) ``` ##### delete用法示例 ```java //删除code>=420000的记录 delete(Region.class,Builder.build().gte("code", 420000)) //删除id=111的记录 delete(Region.class,111) ``` #### 更多使用方法 [zjdbc基础介绍](https://npww.net.cn/article/21) [zjdbc高级用法](https://npww.net.cn/article/22) 未完待续。。。