需求:获取数据库表中某定义好的字段,与实体bean呼应,获取不同bean中属性值;
方式一:
用到的java反射原理(这样更加浪费内存,多用户访问时会慢,不建议使用)
public Object get(Session session, Mark mark,String id){
try {
Class<?> c = Class.forName(mark.getBeanName());
return session.get(c,id);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
方式二:
(这里获取connection时出现问题,解决后发现也应用了反射,但是相比方式一,可能效率更好些。这里我没做详细测试,有兴趣的朋友可以测试一下。)
public Map<String, Object> get2(Session session, Mark mark,String id){
Map<String,Object> returnMap = new HashMap<String, Object>();
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
try {
String tableName = mark.getBeanName();
StringBuffer sql = new StringBuffer("select id,title from ");
sql.append(tableName).append(" ");
sql.append("where id='");
sql.append(id).append("' ");
//hibernate4.x之后获取connection的方法
Connection connection;
Method method = session.getClass().getMethod("connection");
connection = (Connection) ReflectionUtils.invokeMethod(method, session);
PreparedStatement ps = connection.prepareStatement(sql.toString());
//结合spring管理,但是hibernate4.x之后每次只能获取一次,第二次null
//PreparedStatement ps =session.disconnect().prepareStatement(sql.toString());
ResultSet rs = ps.executeQuery();
while (rs.next()) {
Map dataMap=new HashMap();
dataMap.put("id", rs.getObject("id"));
dataMap.put("title", rs.getObject("title"));
dataList.add(dataMap);
}
} catch (Exception e) {
e.printStackTrace();
}
if(dataList.size()>0){
returnMap=dataList.get(0);
}
return returnMap;
}