# 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