HibernateTemplate及generator用法(转)

标签: hibernatetemplate generator | 发表时间:2013-08-28 15:32 | 作者:wangcongywzq
出处:http://blog.csdn.net

在ssh或ssh2中,对数据库进行操作的DAO,都可以通过继承 HibernateDaoSupport来实现对数据库的操作.


继承后的实现方式有两种:
super.getSession().A();
getHibernateTemplate().B();或
getHibernateTemplate().getSessionFactory().openSession().C();

用哪个好呢?
网上都是推荐用getHibernateTemplate,原因是:
getSession()和getHibernateTemplate都可以自动释放连接(当然你的配置要正确),但是在一个线程内,若同一时间进行很多次的操作(如:1000次查询),getSession 会get很多个session(就是开很多个会话、连接),很可能导致数据库连接超过上限。 所以推荐使用 getHibernateTemplate。

 

(1)

getSession的各种用法:

查询:
super.getSession().find()
super.getSession().createQuery()
保存:
super.getSession().save()
super.getSession().update()
super.getSession().delete()


query的用法:
select,update,delete,分页都可通过Query来执行:
-1->用query的好处,可以像PreparedStatement一样,可以设置参数.
-2->且不用Iterate,因为只是判断有没值,所以,用list.size()判断,若有值,也只有一个,即用list

(0)来获取即可
-3->同时,query,不但可用于查询,还可以用于更新:
  String hql = "UPDATE User SET userpwd=? WHERE userid=?";
  Query q = super.getSession().createQuery(hql);
  q.setString(0, userpwd);
  q.setString(1, userid);
  q.executeUpdate();
-4->也可delete:
  String hql = "DELETE FROM Item WHERE itemid=?";
  Query q = super.getSession().createQuery(hql);
  q.setInteger(0, itemid);
  q.executeUpdate();
-5->用query进行分页:
  List all = null;
  String hql = "FROM Question AS q WHERE q.itemid=?";
  Query q = super.getSession().createQuery(hql);
  q.setInteger(0, itemid);
  q.setFirstResult((currentPage - 1) * lineSize);
  q.setMaxResults(lineSize);
  all = q.list();
如:
    Query query = session.createQuery("from User");
    query.setFirstResult(0);//从第一条记录开始
    query.setMaxResults(4);//取出四条记录
    List userList = query.list();


(2)
hibernateTemplate:

HibernateTemplate的常用方法简介:
      void delete(Object entity):删除指定持久化实例
      deleteAll(Collection entities):删除集合内全部持久化类实例
      find(String ueryString):根据HL查询字符串来返回实例集合
      findByNameduery(String ueryName):根据命名查询返回实例集合
      get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例
      save(Object entity):保存新的实例
      saveOrUpdate(Object entity):根据实例状态,选择保存或者更新
      update(Object entity):更新实例的状态,要求entity是持久状态
      setMaxResults(int maxResults):设置分页的大小

 

常用方法实例:
查询:
//通过HibernateTemplate的find方法返回Person的全部实例 --> 返回是list类型
returngetHibernateTemplate().find("from Person");

//带参数查询
用这个方法find(Stringhql,Object para)  --> 返回是list类型
String hql = "SELECT u.userName FROM User u WHERE u.userName = ?";
List userList=this.getHibernateTemplate().find(hql,user.getUserName());

//根据主键返回特定实例 -->主键查询  -->返回是对象类型
return (Person)getHibernateTemplate(). get(Person.class, newInteger(personid));
return (Person)getHibernateTemplate(). load(Person.class, newInteger(personid));

//保存的Person实例
getHibernateTemplate().saveOrUpdate(person);

//删除Person实例的主键
 //先加载特定实例
Object p = getHibernateTemplate().load(Person.class, new Integer(personid));
//删除特定实例
getHibernateTemplate().delete(p);

 

Hibernate的主键生成器generator说明

1、如果主键字段为自增类型。
那么对应的.hbm.xml文件中的id字段的xml声明,
应该这么写:
<generator class="native" />
例如:
<id column="user_id" name="Id" type="integer">
<generator class="native" />
</id>

2、如果主键字段不设置为自增,但是是int型的。
可以使用increment,由hibernate产生主键。
<generator class="increment" />
不过这种方法,对于并发量大的应用,似乎最好不要采用。

3、如果使用uuid.hex产生的随机32位数最为主键。
那么数据库的id字段类型为char,长度为32
hbm.xml中写为: <generator class="uuid.hex" />
另外,uuid.string也是功能类似。
uuid.hex产生的是32位的16进制数字的字符串。
而uuid.string产生的是16个字符长的任意ASCII字符组成的字符串
见参考:
uuid.hex
用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中唯一(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。
uuid.string
使用同样的UUID算法。UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。不能使用在PostgreSQL数据库中

 

 

HibernateDaoSupport中自带了hibernate的模板供编程者使用。

前提条件:你的类必须继承HibernateDaoSupport
一:
回调函数:
public List getList(){
   return (List )getHibernateTemplate().execute(
     new HibernateCallback() {
      public List doInHibernate(final Sessions)
        throws HibernateException, SQLException{

StringBuffer sb = new StringBuffer();
Query query = s.createSQLQuery(sb.toString());//<STRONG>执行普通sql</STRONG>
Query query = s.createQuery(sb.toString());// <STRONG>执行hql </STRONG>
List list = query.list();
return list ;
      }
     });   
}
采用这种做法的好处是:不用关心事务。session的创建和销毁,一切都在程序内部完成。看看名字doInHibernate就知道好处了。不好的是程序看起来比较乱!这也是我用spring最乱的地方,初学者看起来太乱了。
二:
getHibernateTemplate().find():
List list = getHibernateTemplate().find(String hql):
这里传进来的是hql不是sql。

三:
自己获取session处理。
获取session的两种方式:this.getSession();和this.getHibernateTemplate().getSessionFactory().openSession();
获取session以后再createQuery操作就一样了。但是这种做法,是需要自己去手动关闭session的。所以你需要配置openSessioninview。

其他:
getHibernateTemplate.delete(Object);

getHibernateTemplate.save(Object);
getHibernateTemplate.update(Object);

总结:推荐使用回调函数。

 

作者:wangcongywzq 发表于2013-8-28 15:32:28 原文链接
阅读:59 评论:0 查看评论

相关 [hibernatetemplate generator] 推荐:

HibernateTemplate及generator用法(转)

- - CSDN博客架构设计推荐文章
在ssh或ssh2中,对数据库进行操作的DAO,都可以通过继承 HibernateDaoSupport来实现对数据库的操作.. 继承后的实现方式有两种:. getHibernateTemplate().B();或getHibernateTemplate().getSessionFactory().openSession().C();.

mybatis-generator配置

- - 开源软件 - ITeye博客
新项目要用mybatis,为了开发效率和方便开发,研究了mybatis-generate,在maven环境下,通过插件的形式配置,废话不多说. .    由于M2e不支持这个goal,会报错,忽略这个goal就好了,具体原因请看:. 解决办法把下面这段配置添加到与plugins平级目录中即可解决:.

GitHub - smartnews/jpa-entity-generator: Lombok-wired JPA entity source code generator, Gradle and Maven supported.

- -
If you need to make sure if your latest code works with sample project or your existing projects, run the following command to publish the latest build to the local Maven repository..

关于线程Thread、协程Coroutine、生成器Generator、yield资料

- tangsty - 我的宝贝孙秀楠 ﹣C++, Lua, 大连,程序员
关于Green Thread(绿色环保线程)、Native Thread,以及线程的一些普及问题,下面这个presentation最为翔实. 另外毫无疑问要看看维基百科上的这一条 http://en.wikipedia.org/wiki/Thread_%28computer_science%29. 这一篇教程可以帮助你了解Lua协程的基本用法http://lua-users.org/wiki/CoroutinesTutorial .

语法分析瑞士军刀:LEMON Parser Generator

- GFans - DCCMX
Lemon是个类似yacc(bison)的解析器生成器,它是SQLite的子项目. 在SQLite中用来解析SQL语句. 它是一个LALR(1)的解析器,关于LR和LL解析器谁好谁坏网上已经有讨论了. 这里就不发表个人观点了,绝大多数情况下应付普通的DSL哪一种都行. Lemon非常小巧,就一个程序文件(lemon.c)和一个模板文件(lempar.c).

使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件 - Balla_兔子

- - 博客园_首页
  Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件. 关于Mybatis-Generator的下载可以到这个地址: https://github.com/mybatis/generator/releases.