com.fly.jdbc.SqlFly Maven / Gradle / Ivy
package com.fly.jdbc;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import com.fly.jdbc.cfg.FlyObjects;
import com.fly.jdbc.exception.FlySQLException;
import com.fly.jdbc.paging.Page;
import com.fly.jdbc.util.FlyDbUtil;
import com.fly.jdbc.util.FlyLambdaBegin;
import com.fly.jdbc.util.FlyLambdaBeginRT;
import com.fly.jdbc.util.FlyLambdaRollback;
import com.fly.jdbc.util.FlyLambdaRollbackRT;
/**
* Fly核心对象,JDBC的封装
*
* 该类提供一系列精简的API进行数据库的访问
*/
public class SqlFly extends SqlFlyBase {
/* * * * * * * * * * * * * 基本交互 * * * * * * * * * * * * * * * * * * * * */
/**
* 执行任意类型sql,args为参数列表(其余函数同理)
* @param sql sql
* @param args args
* @return 返回值
*/
public PreparedStatement getExecute(String sql, Object... args) {
return FlyDbUtil.getExecute(getConnection(), this.prevSql = sql, args);
}
/**
* 增删改,返回受影响行数
* @param sql sql
* @param args args
* @return 返回值
*/
public int getUpdate(String sql, Object... args) {
PreparedStatement ps = getExecute(sql, args);
try {
return ps.getUpdateCount();
} catch (SQLException e) {
throw new FlySQLException("增删改sql执行异常", e);
} finally {
try {
ps.close();
} catch (SQLException e) {
throw new FlySQLException("释放Statement失败", e);
}
closeByIsBegin();
}
}
/**
* 查询,返回ResultSet结果集
*
*
大多数情况下你不应该调用此方法,此方法会将ResultSet处理权交给你
*
这意味着Fly不会自动在处理完毕结果集后将其关闭,
*
因此你必须在处理完结果集后执行rs.getStatement().close()释放资源;
*
并且在调用此方法之前必须开启事务
* @param sql sql
* @param args args
* @return 返回值
*/
public ResultSet getResultSet(String sql, Object... args) {
try {
return getExecute(sql, args).getResultSet();
} catch (SQLException e) {
throw new FlySQLException("获得ResultSet结果集失败", e);
}
}
/**
* 聚合查询,返回第一行第一列值
* @param sql sql
* @param args args
* @return 返回值
*/
public Object getScalar(String sql, Object... args) {
ResultSet rs = getResultSet(sql, args);
try {
if (rs.next()) {
return rs.getObject(1);
}
} catch (SQLException e) {
throw new FlySQLException("聚合查询失败", e);
} finally {
FlyDbUtil.close(rs);
closeByIsBegin();
}
return null;
}
/* * * * * * * * * * * * * 结果集映射为实体类 * * * * * * * * * * * * * * * * * * * * */
/**
*
将结果集映射为指定Model的一条记录
例如查询上一条 insert sql 的主键:SELECT @@identity
* long id = FlyFactory.getFly().getModel(long.class, "SELECT @@identity");
* @param cs 要映射的类型
* @param sql sql
* @param args args
* @return v
*/
public T getModel(Class cs, String sql, Object... args) {
ResultSet rs = getResultSet(sql, args);
try {
return FlyDbUtil.getModel(rs, cs);
} finally {
FlyDbUtil.close(rs);
closeByIsBegin();
}
}
/**
* 将结果集映射为指定Model集合
* 支持基本数据类型,如:Integer、Double等
参数:sql语句,映射类型,参数列表
*
* @param cs cs
* @param sql sql
* @param args args
* @return v
*/
public List getList(Class cs, String sql, Object... args) {
ResultSet rs = getResultSet(sql, args);
try {
return FlyDbUtil.getList(rs, cs);
} finally {
FlyDbUtil.close(rs);
closeByIsBegin();
}
}
/**
* 根据分页获取集合
* @param page page
* @param cs cs
* @param sql sql
* @param args args
* @return v
*/
public List getListPage(Page page, Class cs, String sql, Object... args) {
if(page == null) {
page = new Page(1, FlyObjects.getConfig().getDefaultLimit());
}
if(page.getIs_count()) {
page.setCount(getCount(sql, args));
}
sql = FlyObjects.getPaging().getPagingSql(sql, page);
return getList(cs, sql, args);
}
/* * * * * * * * * * * * * 结果集映射为Map * * * * * * * * * * * * * * * * * * * * */
/**
* 将结果集映射为 -- Map
* @param sql sql
* @param args args
* @return v
*/
public Map getMap(String sql, Object... args) {
ResultSet rs = getResultSet(sql, args);
try {
return FlyDbUtil.getMap(rs);
} catch (SQLException e) {
throw new FlySQLException("将结果集映射为List