spring结合hibernate访问数据库方式的比较
来源:互联网 发布:淘宝修容棒排行榜 编辑:程序博客网 时间:2024/05/19 06:36
1.直接使用HibernateAPI
public class DaoImp implate Dao{ private SessionFactory sessionFactory; private static String hql = "from User u where u.username=? "; public void setSessionFactory(SessionFactory sessionFactory){ this.sessionFactory=sessionFactory; } public boolean isValidUser(String username) { try{ List userList = sessionFactory.getCurrentSession().creatQuery(hql).setParameter(0,username).list(); if (userList.size() > 0) { return true; } catch (HibernateException ex){ throw converHibernaterAccessException(ex); } } } }
优点:与Spring框架完全分离
缺点:(1)无法使用Spring框架封装所提供的额外功能.如,直接使用Hibernate API 需用try...catch()处理HibernateException异常.
(2)需在实现类中加入setSessionFactory(SessionFactory sessionFactory)属性,接收依赖注入的SessionFactory.
2.继承 Spring 的 HibernateDaoSupport 使用 HibernateTemplate (不推荐使用getSession())
public class DaoImp extend HibernateDaoSupport implates Dao{ private static String hql = "from User u where u.username=? "; public boolean isValidUser(String username) { List userList = getHibernateTemplate().find(hql,username); if (userList.size() > 0) { return true; } public boolean isValidUser(String username,String password) throw DataAccessException { Session session = getSession(); //不推荐使用,用完后需手动关闭 String[] userlist=new String[2]; userlist[0]=username; userlist[1]=password; try{ List userList = session.find(hql,userlist); //Hibernate语句; session.close(); if (userList.size() > 0) { return true; } catch (HibernateException ex){ throw converHibernaterAccessException(ex); } } }}特点:对HibernateTemplate没有提供的功能,可以直接调用HibernateDaoSuppor对象的getSession()方法(极其不推荐使用)得到Session对象实例用try{ Hibernate API }catch (HibernateException ex )操作
3.对 HibernateTemplate 没有提供的功能, 还可以用HibernateCallback 回调的方法管理数据库. (极其推荐)
/** * 使用 hql 语句进行操作 * @param hql HSQL 查询语句 * @param offset 开始取数据的下标 * @param length 读取数据记录数 * @return List 结果集 */ public List getListForPage ( final String hql , final int offset , final int length ) { List list = getHibernateTemplate().executeFind ( new HibernateCallback ( ) { public Object doInHibernate ( Session session ) throws HibernateException, SQLException { Query query = session.createQuery ( hql ) query.setFirstResult ( offset ) query.setMaxResults ( length ) query.setCacheable(false); for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } List list = query.list ( ) return list } }) return list }
4.注入jdbcTemplate
先配置好jdbcTemplate
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="dataSource" /> </property><bean id="classDao" class="cn.jmu.data.dao.impl.ClassImpl"><property name="jdbctemplate"><ref bean="jdbcTemplate" /></property> </bean>
</bean><bean id="classDao" class="cn.jmu.data.dao.impl.ClassImpl"> <property name="jdbctemplate"> <ref bean="jdbcTemplate" /> </property> </bean>
jdbcTemplate使用String SQL= "select name from table"; List list= jdbctemplate.queryForList(SQL); Hashtable hash = new Hashtable(); jdbctemplate.query(SQL, new RowCallbackHandler() { public void processRow(ResultSet rs) throws SQLException { hash.put(rs.getString(1),rs.getString(2)); } });
0 0
- spring结合hibernate访问数据库方式的比较
- spring结合hibernate的数据库操作
- hibernate访问数据库方式
- hibernate访问数据库的几种方式
- spring+hibernate 访问数据库的方法
- Spring 与hibernate 的结合
- SSH应用--Hibernate 访问数据库的三种方法比较
- Spring+Hibernate多线程访问数据库
- 分析总结Spring管理Hibernate中Dao层访问数据库常用方式(附SSH的jar包)
- Spring+Hibernate整合框架下DAO的数据库访问方法
- spring(数据库)jdbc配置、spring与jdbc编程的结合和jdbc模板方式的使用
- MyBatis, MyBatis-Spring 常用访问数据库的方式
- 分析总结Spring管理Hibernate中Dao层访问数据库两种方式
- Spring与Hibernate Dao中操作数据库的另外方式
- struts2+spring+hibernate s2sh结合方式框架搭建开发
- Spring-hibernate使用全xml配置结合方式搭建开发
- Hibernate和spring结合的OpenSessionInViewFilter
- Spring与Hibernate结合的使用
- AfxBeginThread的用法
- achartengine画出动态折线图
- vector 动态数组
- 【转载】VC中实现语音(声音)数据的采集(附源代码)
- htonl() htons()及inet_ntoa() inet_addr()的用法
- spring结合hibernate访问数据库方式的比较
- Android震动的调用
- 海量Android教程、开发资料和源码
- 基于51单片机的外部中断实例1
- Android进入activity时输入法的操作
- 51单片机外部中断编程实例2
- Android 屏幕旋转问题
- setContentView(R.layout.activity_main) Error解决方法
- vc utf8与gb2312互相转换.