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 查询的支持,也增加对分页的支持.大部分情况下, ...
随机推荐
- PHP扩展开发(5) - PHP常量的定义和读取
1. 定义 //定义PHP常量REGISTER_STRINGL_CONSTANT("SIMPLE_VERSION", PHP_SIMPLE_VERSION, sizeof(PH ...
- 导入表 IMPORT_DESCRIPTOR
typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminating null i ...
- oldboy第十三天学习
1.现在给我的感觉是,python终于入门了开始越学越简单了.变得更好理解了. 一.memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它 ...
- 转:SetWindowText 的用法
SetWindowText 函数功能:该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏).如果指定窗口是一个控件,则改变控件的文本内容.然而,SetWindowText函数不改变其他应用程序 ...
- NGUI类之间的关系和架构
NGUI Drawcall 1.使用同一个altals的元素尽量放在同一个UIPanel下面,在NGUI中,它消耗的drawcall是以每个Panel为独立计算单位进行计算的. 2.如果一个UIPan ...
- Android 检查是否安装SD卡
/** * 检查是否安装SD卡 * @return */ public static boolean checkSaveLocationExists() { String sDCardStatus = ...
- PCB Layout爬电距离、电气间隙的确定
爬电距离的确定:首先需要确定绝缘的种类:基本绝缘:一次电路与保护地工作绝缘 ① :一次电路内部:二次电路内部工作绝缘 ② :输入部分(输入继电器之前)内部,二次电路与保护地加强绝缘:一次电路与二次电路 ...
- JS浏览器对象-Location对象
1.返回web主机的域名 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- js解析json,js转换json成map,获取map的key,value
json串格式 { "10.10.11.1": { "target_1": "34.2", "target_3": &q ...
- 基于简单sql语句的sql解析原理及在大数据中的应用
基于简单sql语句的sql解析原理及在大数据中的应用 李万鸿 老百姓呼吁打土豪分田地.共同富裕,总有一天会实现. 全面了解你所不知道的外星人和宇宙真想:http://pan.baidu.com/s/1 ...