package com.mini.jdbc;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ParameterizedPreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import com.mini.jdbc.dynamic.DynamicDialect;
import com.mini.jdbc.ehcache.EhCache;
import com.mini.jdbc.translate.TranslateFactory;
import com.mini.jdbc.utils.DbKit;
import com.mini.jdbc.utils.RecordKit;
import com.mini.jdbc.utils.StrKit;
/**
* Db. Powerful database query and update tool box.
*/
@SuppressWarnings("rawtypes")
public class DbHelper {
final Object[] NULL_PARA_ARRAY = new Object[0];
private JdbcTemplate jdbcTemplate;
private DynamicDialect dialect;
private EhCache cache;
private boolean exchange = false;//是否转义数据源方言
/**
* 设置是否转义数据源方言
* @param exchange
*/
public void setExchange(boolean exchange) {
this.exchange = exchange;
}
/**
* 数据库帮助类
*/
public DbHelper(){
this.cache = new EhCache();
}
/**
* 数据库帮助类
*/
public DbHelper(EhCache cache){
this.cache = cache;
}
/**
* 数据库帮助类
*/
public DbHelper(JdbcTemplate jdbcTemplate,DynamicDialect dialect){
this.jdbcTemplate = jdbcTemplate;
this.dialect = dialect;
}
/**
* 获取jdbcTemplate
* @return
*/
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
/**
* 设置jdbcTemplate
* @param jdbcTemplate
*/
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
/**
* 获取转义
* @return
*/
public DynamicDialect getDialect() {
return dialect;
}
/**
* 设置转义
* @param dialect
*/
public void setDialect(DynamicDialect dialect) {
this.dialect = dialect;
}
/**
* 查询
* @param sql
* @param paras
* @param rowMapper
* @return
*/
public <T> List<T> query(String sql, Object[] paras,RowMapper<T> rowMapper) {
if(exchange)
TranslateFactory.translate(sql, dialect.getDialect());
return jdbcTemplate.query(sql, paras, rowMapper);
}
/**
* 查询
* @param sql
* @param rowMapper
* @return
*/
public <T> List<T> query(String sql, RowMapper<T> rowMapper) {
return query(sql, NULL_PARA_ARRAY,rowMapper);
}
/**
* 查询list
* @param sql
* @param elementType
* @return
*/
public <T> List<T> queryForList(String sql,Class<T> elementType) {
if(exchange)
TranslateFactory.translate(sql, dialect.getDialect());
return jdbcTemplate.queryForList(sql,elementType);
}
/**
* 查询list
* @param sql
* @return
*/
public List<Map<String, Object>> queryForList(String sql) {
if(exchange)
TranslateFactory.translate(sql, dialect.getDialect());
return jdbcTemplate.queryForList(sql);
}
/**
* 查询对象
* @param sql
* @param requiredType
* @param rowMapper
* @return
*/
public <T> T queryForObject(String sql,Class<T> requiredType,RowMapper<T> rowMapper){
if(exchange)
TranslateFactory.translate(sql, dialect.getDialect());
return jdbcTemplate.queryForObject(sql, rowMapper);
}
/**
* 查询对象
* @param sql
* @param requiredType
* @param args
* @param rowMapper
* @return
*/
public <T> T queryForObject(String sql,Class<T> requiredType,Object[] args,RowMapper<T> rowMapper){
if(exchange)
TranslateFactory.translate(sql, dialect.getDialect());
return jdbcTemplate.queryForObject(sql, args, rowMapper);
}
/**
* 查询对象
* @param sql
* @param requiredType
* @return
*/
public <T> T queryForObject(String sql,Class<T> requiredType){
if(exchange)
TranslateFactory.translate(sql, dialect.getDialect());
return jdbcTemplate.queryForObject(sql, requiredType);
}
/**
* 查询对象放入缓存
* @param cacheName
* @param key
* @param sql
* @param requiredType
* @param args
* @return
*/
public <T> T queryForObjectByCache(String cacheName, Object key,String sql,Class<T> requiredType,Object[] args){
T result = cache.get(cacheName, key);
if (result == null) {
result = queryForObject(sql, requiredType,args);
cache.put(cacheName, key, result);
}
return result;
}
/**
* 查询对象放入缓存
* @param sql
* @param requiredType
* @param args
* @return
*/
public <T> T queryForObject(String sql,Class<T> requiredType,Object[] args){
if(exchange)
TranslateFactory.translate(sql, dialect.getDialect());
return jdbcTemplate.queryForObject(sql, requiredType,args);
}
/**
* 查询并返回Map
* @param sql
* @return
*/
public Map<String,Object> queryForMap(String sql){
if(exchange)
TranslateFactory.translate(sql, dialect.getDialect());
return jdbcTemplate.queryForMap(sql);
}
/**
* 查询并返回Map
* @param sql
* @param args
* @return
*/
public Map<String,Object> queryForMap(String sql, Object[] args){
if(exchange)
TranslateFactory.translate(sql, dialect.getDialect());
return jdbcTemplate.queryForMap(sql,args);
}
/**
* 查询返回List
* @param sql
* @param elementType
* @param args
* @return
*/
public <T> List<T> queryForList(String sql,Class<T> elementType, Object[] args){
if(exchange)
TranslateFactory.translate(sql, dialect.getDialect());
return jdbcTemplate.queryForList(sql, elementType,args);
}
/**
* 查询返回缓存List
* @param cacheName
* @param key
* @param sql
* @param elementType
* @param args
* @return
*/
public <T> List<T> queryForListByCache(String cacheName, Object key, String sql,Class<T> elementType, Object[] args){
List<T> result = cache.get(cacheName, key);
if (result == null) {
result = queryForList(sql, elementType, args);
cache.put(cacheName, key, result);
}
return result;
}
/**
* 插入或更新
* @param record
* @return
*/
public <T extends Model> int merge(T record) {
Record _record = RecordKit.convert2Record(record);
String[] primaryKeys = _record.getPrimaryKeys();
Object[] ids = new Object[primaryKeys.length];
for(int i = 0;i < primaryKeys.length;i++){
ids[i] = ((Record)_record).get(primaryKeys[i]);
if(ids[i]!=null&&StrKit.notBlank(ids[i].toString())){
return update(record);
}
}
return save(record);
}
/**
* 更新
* @param record
* @return
*/
public <T extends Model> int update(T record) {
StringBuilder sql = new StringBuilder();
List<Object> paras = new ArrayList<Object>();
Map<String,Object> ingore = ModelDeal.dealUpdate(record);
Record _record = RecordKit.convert2Record(record);
String[] primaryKeys = _record.getPrimaryKeys();
Object[] ids = new Object[primaryKeys.length];
for(int i = 0;i < primaryKeys.length;i++){
ids[i] = ((Record)_record).get(primaryKeys[i]);
}
dialect.getDialect().forDbUpdate(record.getTableName(), primaryKeys, ids, _record, sql, paras);
ModelDeal.completeRecord(ingore, record);
return jdbcTemplate.update(sql.toString(), paras.toArray());
}
/**
* 更新
* @param tableName
* @param primaryKeys
* @param record
* @return
*/
public int update(String tableName,String[] primaryKeys,Record record){
Object[] ids = new Object[primaryKeys.length];
for(int i = 0;i < primaryKeys.length;i++){
ids[i] = record.get(primaryKeys[i]);
}
StringBuilder sql = new StringBuilder();
List<Object> paras = new ArrayList<Object>();
Map<String,Object> ingore = ModelDeal.dealUpdate(record);
dialect.getDialect().forDbUpdate(tableName, primaryKeys, ids, record, sql, paras);
ModelDeal.completeRecord(ingore, record);
return jdbcTemplate.update(sql.toString(), paras.toArray());
}
/**
* 执行更新插入或删除
* @param sql
* @return
*/
public int update(String sql){
if(exchange)
TranslateFactory.translate(sql, dialect.getDialect());
return jdbcTemplate.update(
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于spring jdbc的上层封装,底层jdbc操作基于JdbcTemplate,支持MySql、SqlServer、Oracle数据库,强弱类型完美结合 1、mini-jdbc:针对spring jdbc的一些不方便的地方,做了一些封装,大小写不敏感,简化了日常的开发工作。 基于spring jdbc的RowMapper自动实现对象映射,大部分功能已经由spring jdbc实现了。2、数据类型的设计:集成了JFinal和SBORM的优点,对字段的大小写不敏感,对强类型实体、弱类型实体和非实体的支持。3、统一的接口:强类型、弱类型采用统一的数据库接口,例如:可以采用统一的insert方法报错强类型或弱类型数据。4、数据库的支持:目前已经支持MySql、SqlServer、Oracle数据库,屏蔽了数据库的语法差异。5、强弱类型完美结合:例如,在数据库插入一个用户:
资源推荐
资源详情
资源评论
收起资源包目录
MiniJdbc-master.zip (96个子文件)
MiniJdbc-master
.classpath 1KB
.settings
org.maven.ide.eclipse.prefs 241B
org.eclipse.jdt.core.prefs 652B
org.eclipse.core.resources.prefs 150B
org.eclipse.wst.validation.prefs 329B
org.eclipse.wst.common.component 320B
org.eclipse.wst.common.project.facet.core.xml 167B
org.eclipse.m2e.core.prefs 86B
pom.xml 5KB
user.sql 1KB
src
test
java
com
mini
example
MiniStrongExample.java 3KB
CodeExample.java 2KB
ConvertTest.java 336B
DynamicExample.java 1KB
service
DynamicService.java 431B
MiniWeakExample.java 7KB
bean
Demo.java 2KB
User.java 2KB
main
resources
jdbc.properties 525B
ehcache.xml 566B
applicationContext.xml 6KB
java
com
mini
jdbc
EntityMapping.java 2KB
EntityScanner.java 855B
BaseEntityMapper.java 5KB
StrongEntityRowMapper.java 7KB
annotation
Column.java 457B
Entity.java 1KB
dynamic
AbstractRoutingDataSource.java 9KB
TargetDataSource.java 527B
DynamicDataSourceContextHolder.java 867B
DynamicDialect.java 1KB
DynamicDataSource.java 240B
DynamicDataSourceAspect.java 1KB
utils
TypeUtil.java 5KB
PathKit.java 3KB
RecordKit.java 4KB
CommonUtil.java 4KB
ClassScanner.java 5KB
EntityParser.java 7KB
ConvertKit.java 4KB
EnumClazz.java 535B
DbKit.java 3KB
AnnotationUtil.java 3KB
MiniUtil.java 3KB
StrKit.java 2KB
CommonJdbc.java 4KB
translate
OrderBy.java 5KB
ManyRowToOneColumnTranslate.java 912B
SubString.java 871B
Contact.java 2KB
Null.java 2KB
DateTrans.java 10KB
TranslateFactory.java 600B
Underline.java 2KB
ITranslate.java 163B
Length.java 1KB
Trim.java 2KB
Instr.java 2KB
WeakEntityRowMapper.java 6KB
dao
IMiniDao.java 7KB
MiniDao.java 19KB
ModelDeal.java 5KB
MiniDaoException.java 409B
PageResult.java 3KB
ehcache
CacheKit.java 2KB
EhCache.java 530B
EhCacheHelper.java 2KB
StrongEntity.java 3KB
BaseEntity.java 151B
Model.java 434B
EntityContainer.java 968B
RecordRowMapper.java 1KB
DbHelper.java 29KB
Record.java 10KB
EntityInfo.java 5KB
generator
MysqlTypeMapping.java 1KB
EntityGenerator.java 11KB
SqlServerTypeMapping.java 2KB
IDialectMapping.java 131B
OracleTypeMapping.java 1KB
cfg
MiniConfig.java 5KB
StrongEntityInterceptor.java 1KB
dialect
SqlServerDialect.java 6KB
MysqlDialect.java 5KB
Sqlite3Dialect.java 5KB
PostgreSqlDialect.java 5KB
H2Dialect.java 5KB
OracleDialect.java 7KB
DialectFactory.java 3KB
Dialect.java 3KB
ApplicationContextHelper.java 890B
WeakEntity.java 177B
DatabaseRouter.java 1KB
LICENSE 10KB
.project 1KB
.gitignore 54B
共 96 条
- 1
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6649
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功