hibernate,mybatis是java中数据库常用的数据库orm框架,很多时候我们用不了框架的那么多功能,
又是配置又是xml,注解写起来太麻烦,网上找到 Dbutils这个类库,核心代码很小,就拿试试手,
做了个简单的包装,在小项目使用。
依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.2</version>
</dependency>
hikari.properties配置
jdbcUrl=jdbc:mysql://10.27.106.22:3306/test
username=datalog
password=fEaf1f0f62d320
maximumPoolSize=30
minimumIdle=5
connectionTestQuery=SELECT 1
autoCommit=true
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=250
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
dataSource.useLocalSessionState=true
dataSource.useLocalTransactionState=true
dataSource.rewriteBatchedStatements=true
dataSource.cacheResultSetMetadata=true
dataSource.cacheServerConfiguration=true
dataSource.elideSetAutoCommits=true
dataSource.maintainTimeStats=false
DbUtil.java
package com.util;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Map;
public class DbUtil {
private static Logger log = LoggerFactory.getLogger(DbUtil.class);
private static HikariDataSource dataSource;
private static QueryRunner queryRunner;
static {
HikariConfig config = new HikariConfig("/config/hikari.properties");
dataSource = new HikariDataSource(config);
queryRunner = new QueryRunner(dataSource);
}
public static <T> T query(String sql , ResultSetHandler<T> resultSetHandler,Object... params){
T result = null;
try {
result = queryRunner.query(sql,resultSetHandler,params);
}catch (Exception e){
log.error("",e);
}
return result;
}
public static int update(String sql,Object... params){
int result = 0;
try {
result = queryRunner.update(sql,params);
}catch (Exception e){
log.error("",e);
}
return result;
}
public static int insert(String sql,Object... params ){
int result = 0;
try {
result = queryRunner.execute(sql,params);
}catch (Exception e){
log.error("",e);
}
return result;
}
public static Map<String,Object> findById(String table, int id){
String sql = "select * from "+table +" where id = ?";
return query(sql, new MapHandler(),id);
}
public static <T> T findById(String table , int id , BeanHandler<T> beanHandler){
String sql = "select * from "+table +" where id = ?";
return query(sql, beanHandler,id);
}
public static List<Map<String,Object>> findByCondition(String table, String condition){
String sql = "select * from "+table +" where "+ condition;
return query(sql, new MapListHandler());
}
public static <T> List<T> findByCondition(String table, String condition ,BeanListHandler<T> beanListHandler ){
String sql = "select * from "+table +" where "+ condition;
return query(sql, beanListHandler);
}
public static List<Map<String,Object>> findByCondition(String table, String condition,String sort){
String sql = "select * from "+table +" where "+ condition + "order by "+ sort;
return query(sql, new MapListHandler());
}
public static List<Map<String,Object>> findByCondition(String table, String condition,String sort,String limit){
String sql = "select * from "+table +" where "+ condition + "order by "+ sort + limit;
return query(sql, new MapListHandler());
}
public static void close(){
dataSource.close();
}
}
测试代码:
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.util.List;
public class Test {
public static void main(String[] args) throws Exception{
User user = DbUtil.findById("user",1, new BeanHandler<User>(User.class));
System.out.println("id:" + user.getId()+",name:"+user.getName());
String sql = "select * from user limit 2";
List<User> list = DbUtil.query(sql,new BeanListHandler<User>(User.class));
for (User u: list){
System.out.println("id:" + u.getId()+",name:"+u.getName());
}
DbUtil.close();
}
}