重造DAO车轮
//获取连接
package connection;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import java.util.Stack;
public class ConnectionPool {
private static Stack<Connection> stack = new Stack<Connection>();
private static final int MAX = 10;
private Connection con;
private static Properties p;
static{
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("dataSource.properties");
try {
p.load(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public synchronized Connection getConnection(){
if(stack.isEmpty()){
con = createConnection();
if(con != null){
stack.push(con);
}
}else{
con = stack.pop();
}
//代理模式
con = (Connection)Proxy.newProxyInstance(Connection.class.getClassLoader(), new Class[]{Connection.class }, new CloseInvocationHandler(con));
return con;
}
private class CloseInvocationHandler implements InvocationHandler{
Connection con = null;
public CloseInvocationHandler(Connection con){
this.con = con;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object obj = null;
if(method.getName().equals("close")){
releaseConnection(con);
}else{
obj = method.invoke(con, args);
}
return obj;
}
}
public synchronized void releaseConnection(Connection con){
if(stack.size() > MAX){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
stack.push(con);
}
}
private synchronized Connection createConnection(){
Connection con = null;
try {
Class.forName(p.getProperty("class"));
con = DriverManager.getConnection(p.getProperty("driver"),p.getProperty("userName"),p.getProperty("pass"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
}
package connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public interface PreparedStatementCallback {
Object doInPreparedStatement(PreparedStatement st) throws SQLException;
}
package connection;
import java.sql.SQLException;
import java.sql.Statement;
public interface StatementCallback {
Object doInStatement(Statement st) throws SQLException;
}
//主要DAO操作实现,其他的不写
package connection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public abstract class DaoImpl{
private static ConnectionPool cp;
public abstract List rowMapping(ResultSet rs) throws SQLException;
//单例模式
private synchronized Connection getCon(){
if(cp == null){
cp = new ConnectionPool();
}
return cp.getConnection();
}
private Statement getStatement(){
Statement st = null;
try {
st = getCon().createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return st;
}
public List getObjectStaList(final String sql){
//内部类
class executeStatementCallback implements StatementCallback{
List list = new ArrayList();
public Object doInStatement(Statement st) throws SQLException{
ResultSet rs = st.executeQuery(sql);
//模板模式:提供一个运算的模板,然后使用这个模板
list = rowMapping(rs);
return list;
}
}
List res = new ArrayList();
try {
res = (List)execute(new executeStatementCallback());
} catch (SQLException e) {
e.printStackTrace();
}
return res;
}
public List getObjectPreStaList(final String sql, final String... params){
try {
//匿名内部类
return (List) execute(new PreparedStatementCallback() {
public Object doInPreparedStatement(PreparedStatement pst)
throws SQLException {
List list = new ArrayList();
for (int i = 0; i < params.length; i++) {
pst.setString(1, params[i]);
}
ResultSet rs = pst.executeQuery();
//模板模式
list = rowMapping(rs);
return list;
}
}, sql);
} catch (SQLException e) {
e.printStackTrace();
}
return new ArrayList();
}
//从集合中获取一条数据
public Object getUnique(List list){
if(list.isEmpty()){
return null;
}
return list.get(0);
}
//用statement来查询
public Object execute(StatementCallback action)throws SQLException{
Connection con = getCon();
Statement st = null;
Object obj = null;
try {
st = con.createStatement();
//门面(facade)模式:为子系统中的一组接口提供一个一致的界面.
obj = action.doInStatement(st);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
st.close();
con.close();
}
return obj;
}
//用预处理来查询
public Object execute(PreparedStatementCallback action,String sql)throws SQLException{
Connection con = getCon();
PreparedStatement pst = null;
Object obj = null;
try {
pst = con.prepareStatement(sql);
//门面(facade)模式:为子系统中的一组接口提供一个一致的界面.
obj = action.doInPreparedStatement(pst);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
pst.close();
con.close();
}
return obj;
}
}
package connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserDao extends DaoImpl{
public List rowMapping(ResultSet rs) throws SQLException{
List<User> list = new ArrayList<User>();
while(rs.next()){
User u = new User();
u.setId(rs.getString("id"));
u.setName(rs.getString("name"));
u.setPassword(rs.getString("password"));
list.add(u);
}
return list;
}
public List getUser(){
String sql = "select * from t_user";
return getObjectStaList(sql);
}
public User getUserById(String id){
String sql = "select * from t_user t where t.id='" + id + "'";
return (User)getUnique(getObjectStaList(sql));
}
public List getUserByParam(){
String sql = "select * from t_dept t where t.dept_code = ?";
String[] param = {"123"};
return getObjectPreStaList(sql,param);
}
}
package connection;
public class User {
private String id;
private String name;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
相关推荐
毕业设计含文档和代码VB商品配送中心库存仿真软件设计(源代码+论文)
毕业设计含文档和代码VB商品配送中心库存仿真软件设计(源代码+论文)
硕士复现燃料电池供氢系统建模及控制策略Simulink仿真(附带说明PPT+参考文献+复现模型+实物源码)
内容概要:本文围绕“【硕士复现】燃料电池供氢系统建模及控制策略Simulink仿真”这一科研资源包,系统介绍了燃料电池供氢系统的完整建模与控制策略仿真方案。资源包涵盖Simulink仿真模型、说明PPT、参考文献、复现模型及实物源码,重点实现了供氢系统的动态建模、压力与流量控制、氢气供给稳定性优化等核心功能,并采用先进的控制算法(如PID、MPC等)进行策略设计与验证。该资源注重理论与实践结合,完整呈现从系统建模、控制器设计到仿真调试的全流程,适用于新能源、氢能利用、电力电子与自动控制等领域的科研与工程应用。; 适合人群:具备一定MATLAB/Simulink操作基础,从事新能源、氢能技术、电力电子、自动化控制等方向的硕士研究生、科研人员及工程技术人员。; 使用场景及目标:①用于燃料电池供氢系统的教学演示与课程设计;②支撑科研项目中的系统建模与控制算法验证;③辅助毕业论文或学术论文的仿真部分复现与优化。; 阅读建议:建议使用者先阅读配套PPT和参考文献以建立理论基础,再结合Simulink模型逐步调试与修改参数,深入理解控制策略的设计思路与实现细节,鼓励在此基础上进行创新性改进与拓展研究。
科技中介服务机构如何通过平台提升服务效率与专业度?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
工博会资料工博会资料工博会资料122
工博会资料工博会资料工博会资料122
高校技术转移办公室人员如何提升成果转化项目的匹配效率?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。


Java SE
