在数据库内数据类型为datetime类型,在创建实体类型属性时,属性设为Timestamp类型
/**BaseDao内容为**/
package com.lzcc.google_007.base.dao;
import java.lang.reflect.Method; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
/** * @author wqj *所有DAO实现类,定义基本的数据库访问操作 */
package com.lzcc.google_007.base.dao;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
/**
* @author wqj
*所有DAO实现类,定义基本的数据库访问操作
*/
public class BaseDao {
private static Properties pro = null;
public static void setPro(Properties pro){
BaseDao.pro = pro;
}
/**获取连接
* @return
* @throws Exception
* @author wqj
*/
protected Connection getConnection() throws Exception{
DataSource ds = BasicDataSourceFactory.createDataSource(pro);
return ds.getConnection();
}
/** 查询的方法
* @param sql 查询语句,可带“?”占位符
* @param oList “?”号占位符需要填充的值
* @param clazz 封装数据的类
* @return 以封装好数据后
* @throws Exception
* @author wqj
*/
protected <T> List<T> select(String sql, List<Object> oList, Class<T> clazz) throws Exception{
// 创建返回的list集合
List<T> list = new ArrayList<T>();
Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
// 给SQL语句中的?号赋值
for (int i = 0; oList != null && i < oList.size(); i++) {
ps.setObject(i + 1, oList.get(i));
}
// 执行查询方法
ResultSet rs = ps.executeQuery();
// 获取结果集中的元数据
ResultSetMetaData rsmd = rs.getMetaData();
// 遍历保存数据库中对应表的列名
List<String> columnList = new ArrayList<String>();
for (int i = 0; i < rsmd.getColumnCount(); i++) {
columnList.add(rsmd.getColumnName(i + 1));
}
// 循环遍历记录
while(rs.next()){// 每次获取表中对应的一条记录
// 创建封装记录的对象
T obj = clazz.newInstance();
// 遍历一个记录中的所有列
for (int i = 0; i < columnList.size(); i++) {
// 获取列名
String column = columnList.get(i);
// 根据列名创建set方法
String setMethd = "set" + column.substring(0, 1).toUpperCase() + column.substring(1);
// 获取clazz中所有方法对应的Method对象
Method[] ms = clazz.getMethods();
// 循环遍历ms
for (int j = 0; j < ms.length; j++) {
// 获取每一个method对象
Method m = ms[j];
// 判断m中对应的方法名和数据库中列名创建的set方法名是否形同
if(m.getName().equals(setMethd)){
// 反调set方法封装数据
m.invoke(obj, rs.getObject(column));// 获取rs中对应的值,封装到obj中
break; //提高效率
}
}
}
// 封装好的一条记录对应的对象放入list集合中
list.add(obj);
}
// 关闭资源
close(rs, ps, conn);
return list;
}
/** 执行增、删、改方法
* @param sql
* @param oList
* @return
* @throws Exception
* @author wqj
*/
public int executeUpdate(String sql, List<Object> oList) throws Exception{
int rowCount = -1;
Connection conn = this.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
if(oList != null && oList.size() > 0){
for (int i = 0; i < oList.size(); i++) {
ps.setObject(i + 1, oList.get(i));
}
}
rowCount = ps.executeUpdate();
close(null, ps, conn);
return rowCount;
}
/**关闭资源
* @param rs
* @param ps
* @param conn
* @throws SQLException
* @author wqj
*/
public void close(ResultSet rs, PreparedStatement ps, Connection conn) throws SQLException{
if(rs != null){
rs.close();
rs = null;
}
if(ps != null){
ps.close();
ps = null;
}
if(conn != null){
conn.close();
conn = null;
}
}
}