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 查询的支持,也增加对分页的支持.大部分情况下, ...
随机推荐
- nginx虚拟配置
server { listen 8080; server_name www.manihome.com ; root "D:/WWW/mnmnh_2015"; location / ...
- jQuery制作go to top按钮
转自:http://www.w3cplus.com/jquery/scrolling-to-the-top-with-jquery 每每看到网友Blog的页面底部或中间有一个按钮回到页面顶部,羡慕死人 ...
- JS之对象数组遍历?
一.js实现遍历对象 <script> ","destroy":"97%"}; var props = ""; for ...
- JSP网页防止sql注入攻击
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使 ...
- Day02
1.os.system()和os.popen() os.popen() 功能强于os.system() , os.popen() 可以返回回显的内容,以文件描述符返回 eg: import os re ...
- PreparedStatement 和 Statment区别
PreparedStatement vs Statment 1)语法不同:PreparedStatement可以使用预编译的sql,而Statment只能使用静态的sql 2)效率不同: Prepar ...
- Linux命令记录
端口号 1.查看端口号 使用netstat -anp来查看那些端口被打开.加参数'-n'会将应用程序转为端口显示,即数字格式的地址,如:nfs->2049, ftp->21,因此可以开启两 ...
- Web API的CPU占用100%
我用Web API做了一个网站,网站很简单,请求就是几个普通的参数,提交到服务器后,在Web API里做一下参数验证,然后去访问Redis里的TIME命令,最后把TIME命令返回的结果计算出yyyy- ...
- 用“%20”取代字符串中空格的时间复杂度为O(n)的算法
/*length 为字符串数组string的总容量*/ void ReplaceBlank(char stringp[],int length) { ) return; /*originalLengt ...
- Altium Designer 画"差分线"
如何在 Altium Designer 中快速进行差分对走线1:在原理图中让一对网络前缀相同,后缀分别为_N 和_P,并且加上差分队对指示. 让一对差分网络名称的前缀必须相同,后缀分别为_N 和 ...