HibernateTemplate常用方法总结
HibernateTemplate常用方法
(本文章内容相当于转载自:http://www.tuicool.com/articles/fU7FV3,只是整理了一下内容结构和修改了部分内容,方便阅读)
一、获取HibernateTemplate对象
HibernateTemplate hibernateTemplate=HibernateTemplate() ; //当然还有很多种其他的获取方式
下面的例子都是用hibernateTemplate对象
二、HibernateTemplate常用方法
1、find(String queryString);
示例:hibernateTemplate.find("from bean.User");
返回所有User对象
2、find(String queryString , Object value);
示例:hibernateTemplate.find("from bean.User u where u.name=?", "test");
或模糊查询:hibernateTemplate.find("from bean.User u where u.name like ?", "%test%");
返回name属性值为test的对象(模糊查询,返回name属性值包含test的对象)
3、find(String queryString, Object[] values);
示例:String hql= "from bean.User u where u.name=? and u.password=?";
hibernateTemplate.find(hql, new String[]{"test", "123"});
返回用户名为test并且密码为123的所有User对象
4、findByExample(Object exampleEntity)
示例:User u=new User();
u.setPassword("123" );
u.setName("bb" ); //必须符合的条件但是这两个条件时并列的(象当于sql中的and)
list=hibernateTemplate.findByExample(u);
返回:用户名为bb密码为123的对象
5、findByExample(Object exampleEntity, int firstResult, int maxResults)
示例:User u=new User();
u.setPassword("123" );
u.setName("bb" ); //必须 符合的条件但是这两个条件时并列的(象当于sql中的and)
list=hibernateTemplate.findByExample(u,start,max);
返回:满足用户名为bb密码为123,自start起共max个User对象。(对象从0开始计数)
6、findByNamedParam(String queryString , String paramName , Object value)
示例:String queryString = "select count(*) from bean.User u where u.name=:myName" ;
String paramName= "myName";
String value= "abc";
list=hibernateTemplate.findByNamedParam(queryString, paramName, value);
System.out.println(list.get(0 ));
返回:name为abc的User对象的条数
7、 findByNamedParam(String queryString , String[] paramName , Object[] value)
示例:String queryString = "select count(*) from bean.User u where u.name=:myName and u.password=:myPassword";
String[] paramName= new String[]{"myName", "myPassword"};
String[] value= new String[]{"abc", "123"};
hibernateTemplate.findByNamedParam(queryString, paramName, value);
返回:用户名为abc密码为123的User对象
8、findByNamedQuery(String queryName)
示例:
1、首先需要在User.hbm.xml中定义命名查询
<hibernate-mapping>
<class>......</class>
<query name="queryAllUser "> <!--此查询被调用的名字-->
<![CDATA[
from bean.User
]]>
</query>
</hibernate-mapping>
2、如下使用查询:
hibernateTemplate.findByNamedQuery("queryAllUser ");
9、findByNamedQuery(String queryName, Object value)
示例:
1、首先需要在User.hbm.xml中定义命名查询
<hibernate-mapping>
<class>......</class>
<query name="queryByName "> <!--此查询被调用的名字-->
<![CDATA[
from bean.User u where u.name = ?
]]>
</query>
</hibernate-mapping>
2、如下使用查询:
hibernateTemplate.findByNamedQuery("queryByName ", "test");
10、findByNamedQuery(String queryName, Object[] value)
示例:
1、首先需要在User.hbm.xml中定义命名查询
<hibernate-mapping>
<class>......</class>
<query name="queryByNameAndPassword "> <!--此查询被调用的名字-->
<![CDATA[
from bean.User u where u.name =? and u.password =?
]]>
</query>
</hibernate-mapping>
2、如下使用查询:
String[] values= new String[]{"test", "123"};
hibernateTemplate.findByNamedQuery("queryByNameAndPassword " , values);
11、findByNamedQueryAndNamedParam(String queryName, String paramName, Object value)
示例:
1、首先需要在User.hbm.xml中定义命名查询
<hibernate-mapping>
<class>......</class>
<query name="queryByName "><!--此查询被调用的名字-->
<![CDATA[
from bean.User u where u.name =:myName
]]>
</query>
</hibernate-mapping>
2、如下使用查询:
hibernateTemplate.findByNamedQuery("queryByName " , "myName", "test");
12、findByNamedQueryAndNamedParam(String queryName, String[] paramName, Object[] value)
示例:
1、首先需要在User.hbm.xml中定义命名查询
<hibernate-mapping>
<class>......</class>
<query name="queryByNameAndPassword "> <!--此查询被调用的名字-->
<![CDATA[
from bean.User u where u.name =:myName and u.password=:myPassword
]]>
</query>
</hibernate-mapping>
2、如下使用查询:
String[] names= new String[]{"myName", "myPassword"};
String[] values= new String[]{"test", "123"};
hibernateTemplate.findByNamedQuery("queryByNameAndPassword " , names, values);
13、findByValueBean(String queryString , Object value)
示例:
1、定义一个ValueBean,属性名必须和HSQL语句中的:后面的变量名同名,此处必须至少有两个属性,分别为myName和 myPassword,使用setter方法设置属性值后
ValueBean valueBean= new ValueBean();
valueBean.setMyName("test");
valueBean.setMyPasswrod("123");
2、
String queryString= "from bean.User u where u.name=:myName and u.password=:myPassword";
hibernateTemplate.findByValueBean(queryString , valueBean);
14、findByNamedQueryAndValueBean(String queryName , Object value)
示例:
1、首先需要在User.hbm.xml中定义命名查询
<hibernate-mapping>
<class>......</class>
<query name="queryByNameAndPassword "> <!--此查询被调用的名字-->
<![CDATA[
from bean.User u where u.name =:myName and u.password=:myPassword
]]>
</query>
</hibernate-mapping>
2、定义一个ValueBean,属性名必须和User.hbm.xml命名查询语句中的:后面的变量名同名,此处必须至少有两个属性,分别为 myName和myPassword,使用setter方法设置属性值后
ValueBean valueBean= new ValueBean();
valueBean.setMyName("test");
valueBean.setMyPasswrod("123");
3、
String queryString= "from bean.User u where u.name=:myName and u.password=:myPassword";
hibernateTemplate.findByNamedQueryAndValueBean("queryByNameAndPassword ", valueBean);
三、hibernatetemplate hibernate 使用总结
使用HibernateTemplate的方法进行CRUD操作,其中查询操作通常可分为两种, 一种为固定条件查询,另一种为动态多条件查询(如查询界面的实现),固定条件查询可以很方便地通过createQuery,find()等方法实现,但是我在动态条件查询的实现过程中,hibernate0可以实现英文的条件查询,而中文条件则会出现乱码。现将具体的过程描述如下:
1、固定条件查询
可以使用常规的方法,如 Java代码
hibernateTemplate.find(),hibernateTemplate.createQuery()等
hibernateTemplate.find(),hibernateTemplate.createQuery()等
2、动态多条件查询
由于查询条件的不确定性,我曾尝试用拼参数的方法将拼好的sql语句传入find(qlStr),但是查询时hibernate会将中文的条件报为乱码。 不过如果条件全部是英文参数的话拼sql是可以的。
乱码报错如下:
3:49,946 INFO [STDOUT] Hibernate:
select incometype0_.id as id, incometype0_.name as name0_,incometype0_.type_comment as type3_0_ from income_type incometype0_ where 1=1 and incometype0_.type_comment='·á????×?????'
因此这种方法无法使用。另外find()的另一种find(String arg0,Object[] arg1),采用数组参数将sql的条件参数传入的方式只是适合固定条件参数的查询,不适合这种动态多条件的中文查询,因此也无法使用。
说明:由于find(String arg0,Object[] arg1)采用数组参数的方式可以使用中文条件查询,因此可以确定不是我的编码问题。而是Hibernate0的find(sqlStr)方法本身的问 题。
为此只能换成另一种实现途径,如下:
- 得到session
- 用Query q = session.createQuery(sql);该方法返回一个Query 类型
- 利用q.setString(String arg0,String arg1)将参数赋值给sql的参数条件。
- 在sql语句中拼一次参数,在setString()中也拼一次赋值。 如:
public List phraseQuery(final String id, final String name, final String typecomment) {
StringBuffer sql = new StringBuffer();
sql.append("from IncomeType where 1=1 ");
if (id != null && id.length() > 0)
sql.append(" and id = :id ");
if (name != null && name.length() > 0)
sql.append(" and name = :name ");
if (typecomment != null && typecomment.length() > 0)
sql.append(" and typeComment = :tc ");
final String typeSql = new String(sql);
return (List) hibernateTemplate.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query q = session.createQuery(typeSql);
if (id != null && id.length() > 0)
q.setString("id", id);
if (name != null && name.length() > 0)
q.setString("name", name);
if (typecomment != null && typecomment.length() > 0)
q.setString("tc", typecomment);
return q.list();
}
});
}
public List phraseQuery(final String id, final String name, final String typecomment) {
StringBuffer sql = new StringBuffer();
sql.append("from IncomeType where 1=1 ");
if (id != null && id.length() > 0)
sql.append(" and id = :id ");
if (name != null && name.length() > 0)
sql.append(" and name = :name ");
if (typecomment != null && typecomment.length() > 0)
sql.append(" and typeComment = :tc ");
final String typeSql = new String(sql);
return (List) hibernateTemplate.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query q = session.createQuery(typeSql);
if (id != null && id.length() > 0)
q.setString("id", id);
if (name != null && name.length() > 0)
q.setString("name", name);
if (typecomment != null && typecomment.length() > 0)
q.setString("tc", typecomment);
return q.list();
}
});
}
HibernateTemplate常用方法总结的更多相关文章
- HibernateTemplate常用方法
HibernateTemplate常用方法 (本文章内容相当于转载自:http://www.tuicool.com/articles/fU7FV3,只是整理了一下内容结构和修改了部分内容,方便阅读) ...
- HibernateTemplate 常用方法
HibernateTemplate 提供非常多的常用方法来完成基本的操作,比如通常的增加.删除.修改.查询等操作,Spring2.0更增加对命名SQL查询的支持,也增加对分页的支 持.大部分情况下,使 ...
- s2sh三大框架整合过程(仅供参考)
三大框架顾名思义就是非常有名的Struts2 ,Hibernate,Spring, 框架整合的方法很多,现在我写一个非常简单的整合过程,相信大家一看就会! 这里使用的struts-2.2.1.1.hi ...
- HibernateTemplate的一些常用方法总结
1:get/load存取单条数据 public Teacher getTeacherById(Long id) { return (Teacher)this.hibernateTemplate.get ...
- Spring和Hibernate集成的HibernateTemplate的一些常用方法总结
1:get/load存取单条数据 public Teacher getTeacherById(Long id) { return (Teacher)this.hibernateTemplate.get ...
- HibernateDaoSupport和HibernateTemplate
hibernateTemplate的常用方法: Ø void delete(Object entity):删除指定持久化实例 Ø deleteAll(Collection entities):删除 ...
- HibernateTemplate用法
private HibernateTemplate hibernateTemplate; 使用HbernateTemplate HibernateTemplate提供持久层访问模板化,使用Hibern ...
- HibernateTemplate和HibernateDaoSupport
Spring整合Hibernate后,为Hibernate的DAO提供了两个工具类:HibernateTemplate和HibernateDaoSupport HibernateTemplateHib ...
- HibernateTemplate的使用
HibernateTemplate 提供了非常多的常用方法来完成基本的操作,比如增加.删除.修改及查询等操作,Spring 2.0 更增加对命名 SQL 查询的支持,也增加对分页的支持.大部分情况下, ...
随机推荐
- RBAC角色权限设计思路
1 设计思路 为了设计一套具有较强可扩展性的用户认证管理,需要建立用户.角色和权限等数据库表,并且建立之间的关系,具体实现如下. 1.1 用户 用户仅仅是纯粹的用户,用来记录用户相关信息,如用户名.密 ...
- phpcms V9 修改生成静态文件路径/html
在论坛看到部分用户反馈这个问题,要修改的其实是html_root的值,默认是"/html"如果要生成在网站根目录的话,这个值则要为空.论坛上现在看到的办法是打开caches\con ...
- PHPCMS v9修改栏目或者单页没有权限
问题: 普通管理员没有权限修改栏目,只有超级管理员才有权限修改,凡是非超级管理员,设置栏目权限后只能添加栏目,不能对栏目进行修改和删除操作,提示您没有权限操作该项这使系统的一个BUG. 一.对于普 ...
- git clone 远程分支
先初始化一个git 仓库 命令:git init git clone 相应的地址 这样就会形成一个.git 隐藏文件夹 一定要注意的,要进入到子文件夹去git checkout feature/0. ...
- var genreModel =storeDB.Genres.Include("Albums").Single(g => g.Name == genre);是什么意思?
g => g.Name == genre代表一个匿名函数.即这里向Single方法传入了一个方法类型的参数. =>左边的g代表方法的参数,可以有多个,如(g,f) => ...,=& ...
- C++Primer charpter1.
一.输入输出流 endl:会刷新buffer.刷新之后你才能看到.不手动用endl的话,就只能依靠系统自动刷.程序崩溃的话,你看到的调试信息可能是错误的. >>: 两个连续的符号 ci ...
- ubuntu 12.04 安装nginx
nginx是一个强大的高性能反向代理服务器,其特点是占内存少,并发能力强,在高并发的情况下是apache 的一个不错的代替品,能够支持高达50000个并发连接数的响应,那么这么强大的武器,究竟如何在l ...
- iOS 数据库操作(使用FMDB)
iOS 数据库操作(使用FMDB) iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...
- 解读 《2014 最流行编程语言》 by Code Eval
此文已转至http://cn.abnerchou.me/2014/02/23/fa87ae80/ 原文:点我 原文翻译:点我 首先了解下CodeEval是做什么的: A tool for auto e ...
- 转:VC中UpdateData()函数的使用
VC中UpdateData()函数的使用 UpdateData(FALSE)与UpdateData(TRUE)是相反的过程 UpdateData(FALSE)是把程序中改变的值更新到控件中去 ...