# spring-jba
**Repository Path**: leo_xi/spring-jba
## Basic Information
- **Project Name**: spring-jba
- **Description**: JavaBeanAccessjava对象访问
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/leo_xi/spring-jba/wikis/pages
- **GVP Project**: No
## Statistics
- **Stars**: 8
- **Forks**: 1
- **Created**: 2018-01-12
- **Last Updated**: 2025-06-25
## Categories & Tags
**Categories**: database-dev
**Tags**: None
## README
# spring-jba
`JavaBeanAccess`java对象访问,基于JDK1.8+
```目前仅支持MySql ```:grimacing:
# maven依赖
最新版本
`注意:从1.7.0开始与之前版本不兼容` `注意升级`
```
xin.xihc
spring-jba
${jba.version}
```
## SpringJbaDemo演示Demo
https://gitee.com/leo_xi/SpringJbaDemo
# 注解解释 #
1. `@EnableJba` 开启spring-jba创建表功能
2. `@Table` 该注解是声明对象为表对象,属性包含如下:(不支持继承关系)
```
1. value 1.2.0以后支持自定义表名
2. remark 表的备注
3. order (1.5.0+新增)顺序,默认9999
4. ignore (1.5.0+新增)是否忽略表,默认false
```
3. `@Column` 声明字段属性包含如下:(支持继承关系,可以使用父类的属性)
```
1. value 列名,1.7.6+支持自定义列名
2. defaultValue 默认值
3. notNull 是否允许为空(默认允许)
4. primary 是否是主键(默认否)
5. policy 主键生成策略(默认无)
6. length 长度限制
7. remark 备注
8. precision 精度(小于length)(默认4)
9. charset (1.5.5+新增)设置表字符编码,默认utf8
10. order (1.7.8+新增)对应表的列的顺序,默认0
```
4. `@Index` (1.5.7+新增)该注解是声明(单列索引)表字段索引的,属性包含如下:(支持继承关系,可以使用父类的属性)
```
1. value 索引名,用于分组,默认为idx_xxxx
2. type 索引类型,默认为普通索引(Normal,Unique,FullText)
3. remark (1.5.8+新增)索引的备注
```
5. `@OnUpdateCurrentTimestamp` (1.6.1+新增)该注解是声明表字段是否自动更新时间戳(java.util.Date/java.sql.Timestamp)(支持继承关系,可以使用父类的属性)
6. `@Alias` 属性对应的列名(1.7.6+新增)主要用于查询时,列名与属性名不一致的问题。
7. `@GroupIndex` 分组索引、复合索引(1.7.8+)用于创建复合索引、目前没有继承关系。
7. `@JsonHandler` (1.8.9+)使用Json序列化到数据库(查询时并反序列化成对象)、支持继承。
----------
# 类型转换对应表
| `Java`类型(建议使用包装类) | `Mysql`类型 |
|---| --- |
|`String` | (1-64)`char`(65-19999)`varchar`/length>20000的为`text`|
|`Byte` | `tinyint(3)` |
|`Short` | `smallint(5)` |
|`Integer` | `int(10)` |
|`Long` | `bigint(19)` |
|`Double` | `double(length,precision)` |
|`Float` | `double(length,precision)` |
|`BigDecimal` | `decimal(length,precision)` |
|`Boolean` | `tinyint(3)` |
|`java.util.Date` | `datetime(precision)` |
|`java.sql.Date` | `date` |
|`java.sql.Timestamp`| `Timestamp(precision)` |
|`java.sql.Time` | `Time(precision)` |
|`枚举类型` | `varchar(length)` |
|`其他` | `varchar(length)` |
# 使用教程
本项目为简易ORM,是基于spring-JdbcTemplate实现,支持事务管理,复杂操作则需要自己写SQL。
## 数据源连接池配置
```
#数据源配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=*****
#使用阿里巴巴druid数据库连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#jba相关配置
#jba表结构更新模式NONE-不操作,CREATE-只创建表,UPDATE-只更新表结构,ALL-所有,CREATE_DROP-启动时创建关闭时删除
spring.jba.mode=NONE/ALL/CREATE/UPDATE/CREATE_DROP
#打印sql执行记录,日志采用上slf4j记录
logging.level.xin.xihc.jba.core.JbaTemplate=debug
```
## 初始化数据接口`InitDataInterface`
只需要实现如下方法:
```
void doInit(JbaTemplate jbaTemplate);
```
## 表对象的`增删改查`操作
实际使用:
首先主类入口添加注解`@EnableJba`
再需要使用的地方引入:
```
@Autowired
private JbaTemplate jbaTemplate;
```
## 分页对象PageInfo中增加`needTotalCount`是否需要查询总数量(默认true)
即可使用JbaTemplate的方法。。具体方法解析如下:
表对象(需要获取表名)-`model`,参数对象-`params`
`1、public boolean insertModel(Object model);` 插入单个对象INSERT INTO tblName (id,name) VALUES (:id,:name);
`2、public void insertModels(Object... models);` 批量插入多个相同表对象(建议一次性不超过50个)
`3、public boolean updateModel(Object model, String... fieldNames) throws RuntimeException;` 更新对象
`4、public boolean deleteModel(Object model) throws RuntimeException;` 删除对象
`5、public T queryColumn(String sql, Object params, Class clazz);` 只能查询某列的值,支持Map的params
`6、public int queryCount(String sql, Object params);` 查询数量,支持Map的params
`7、public int queryCount(Object model);` 查询某个对象的数量
`8、public T queryModelOne(Object model, Class clazz, String... orderBy);` 查询单个对象
9、public T ~~queryMixModelOne~~ queryOne(String sql, Object params, Class clazz); 查询单个混合(自定义)对象,支持Map的params
`10、public List queryModelList(Object model, Class clazz, PageInfo pageInfo, String... orderBy);` 查询对象的列表
11、public List ~~queryMixModelList~~ queryList(String sql, Object params, Class clazz, PageInfo pageInfo
); 查询混合对象的列表,支持Map的params
`12、public boolean executeSQL(final String sql);` 执行某个sql语句
`13、public boolean executeSQL(final String sql, Object params);` 执行某个带参数的sql语句,支持Map的params
`14、public NamedParameterJdbcTemplate getJdbcOperations();` 可以使用更多内部原生方法(例如:BOLB字段的处理、储存过程的调用)
`15、public void batchUpdate(final String sql, Map... params);` 批量执行sql,插入INSERT、UPDATE都可以
`16、public void batchUpdate(final String sql, Object[] models);` 批量执行sql,插入INSERT、UPDATE都可以
> 1.8.6 新增方法
- `17、public List queryList(Select select, Class clazz, PageInfo pageInfo);` 列表查询数据库--Select
- `18、public T queryOne(Select select, Class clazz);` 单个查询数据库--Select单个查询
- `19、public boolean update(Update update);` 执行sql语句 - Update对象
# 联系&交流
QQ群号:340654726
`更新时间:2020-05-27`