项目中需要一个json对象,封装的时候,需要数据的列名。

在jdbc里面,可以有个ResultMetaData对象获取列名字。因为我用的是hibernate,这个框架已经封装了很多,一般是难以获得resultset的。

经过不懈的bing和google(作为一个环保的准程序员,拒绝用百度了),发现在hibernate里面,可以获得resultset对象。不过现在是hibernate4,比较新,获取的方式改变了不少。

在之前的hibernate里面,可以用下面的代码获取connection,还有其他对象。

     java.sql.Connection c = null;
java.sql.PreparedStatement ps = null;
java.sql.ResultSet rs = null; public List method(String sql) {
List ret = new ArrayList();
try {
c =SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
ps = c.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()) {
.....
}
ret.add(ro);
}
} catch (Exception e) {
e.printStackTrace(); } finally {
close();
}
return ret;
}

这样,可以像jdbc一样,使用resultset等对象。

但是在hibernate4里面,方法已经改了,SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection() 这一句已经不能使用,换的是新的方法。

如下:

getSession().doWork(new Work() {
@Override
public void execute(Connection connection) { }
});

在方法体里面,可以直接使用connection了。

但是这样,返回的是一个void,而我要取用的是获得resultset对象。好在IDE有智能提示,发现里面有一个能传递返回值得的方法,算是上面一种方法的扩展吧。

直接上我项目中的代码:

 @Test
public void tests() throws SQLException {
Session session=HibernateSessionFactory.getSession();
ResultSet resultSet=session.doReturningWork(
new ReturningWork<ResultSet>() {
@Override
public ResultSet execute(Connection connection) throws SQLException {
String sql="select * from t_auth";
PreparedStatement preparedStatement=connection.prepareStatement(sql);
ResultSet resultSet=preparedStatement.executeQuery();
return resultSet;
}
}
);
while (resultSet.next()){
System.out.println("rs:"+resultSet.getString("authid"));
}
}

就是这个doReturnWork方法,里面通过内部类,把resultset对象一层一层返回给这个doReturnWork,这样就可以像用jdbc一样使用hibernate了。

个人一点心得,希望能给大家一些帮助。

Hibernate4获取Connection,ResultSet对象的更多相关文章

  1. resultset 对象获取行字段数据时报:java.sql.SQLException: Column 'id' not found.

    resultset 对象获取行字段数据时报:java.sql.SQLException: Column 'id' not found. 代码: String sql="SELECT d.co ...

  2. atitit.获取connection hibernate4

    atitit.获取connection hibernate4 1. SessionFactoryUtils法(推荐) 1 2. ConnectionProvider 法( ) 1 3. 嘎自实现法(不 ...

  3. Hibernate Session 获取connection

    Hibernate Session 获取connection 由于最近一个项目要用到一条辅助的SQL ,hibernate里面的SQLQuery API 总的SQL语句不能包含 : 冒号, 固放弃Hi ...

  4. 关于SessionFactory的不同实现类分别通过getCurrentSession()方法 和 openSession() 方法获取的Session对象在保存对象时的一些区别

    一.单向多对一关联关系 一).使用LocalSessionFactoryBean类,即在applicationContext中配置的 <!-- 配置SessionFactory 使用LocalS ...

  5. easyUI中onLoadSuccess方法获取多个对象

    后台将一个list中的对象循环放到map中,如下: @RequestMapping("/getSaleOrderDetailList") @ResponseBody public ...

  6. java 27 - 2 反射之 反射的概述以及获取Class文件对象的方式

    反射: JAVA语言的反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调 ...

  7. ObjectMapper处理从远程获取的Object对象

    微服务中从其他服务获取过来的对象,如果从Object强转为自定义的类型会报错,利用ObjectMapper转换. ObjectMapper mapper = new ObjectMapper(); D ...

  8. java 获取实体类对象属性值的方法

    在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...

  9. Java获取线程的对象和名称

    /*获取线程对象以及名称(很有意义的) 原来线程都有自己默认的名称Thread-编号  该编号从0开始 Thread 父类的方法static  Thread currentThread() :获取当前 ...

随机推荐

  1. Java 简单UDP通信

    Java手册 java.net Class DatagramSocket java.lang.Object java.net.DatagramSocket All Implemented Interf ...

  2. jsp中 RequestDispatcher接口的两种跳转:forward()和include()

    在web程序中,经常是由多个Servlet来完成请求.RequestDispatcher接口就是为了多个Servlet之间的调整而实现的.该接口可以用httpSerbletRequest的getReq ...

  3. 获取中文的首字母demo

    import net.sourceforge.pinyin4j.PinyinHelper; /** * * @Title: getPinYinHeadChar * @Description: TODO ...

  4. Python web框架——Tornado

    Tornado是一个Python Web框架和异步网络库,最初由FriendFeed开发.通过使用非阻塞网络I / O,Tornado可以扩展到数万个开放连接,使其成为需要长时间连接每个用户的长轮询, ...

  5. pdf转换成可在线浏览的电子杂志zmaker_pdf

    zmaker是曾经国内最流行的电子杂志制作软件,可惜可惜,不过幸好有人给发布了 最新版的 其实主要是2个流程 一个是软件的安装 软件的下载和安装请参考 官方教材 http://bbs.emaghome ...

  6. asp.net 不用控件,自动登录(用于和其他系统对接的时候,自动登录系统,用户体验好)

    if (System.Web.Security.Membership.ValidateUser("admin", "123456")) { //这句话很重要,他 ...

  7. JAVA 获取文件的MD5值大小以及常见的工具类

    /** * 获取文件的MD5值大小 * * @param file * 文件对象 * @return */ public static String getMD5(File file) { FileI ...

  8. col标签的相关实验

    col上有width属性,如果对应值没有单位,默认是像素 <!DOCTYPE html> <html> <head> <title>col相关实验< ...

  9. aria2自动更新BT Tracker服务器列表脚本

    vi /root/trackers-list-aria2.sh 内容如下: #!/bin/bash #/usr/sbin/service aria2 stop list=`wget -qO- http ...

  10. consul service

    {      "name": "consul-agent (host:{{ .MONITOR_CONSUL }})",      "command&q ...