- 浏览: 152758 次
最新评论
-
hekuilove:
除了饿汉式单例本身是线程安全的除外,你写的其它全都是不安全的
JAVA设计模式之单例模式 -
zwdsmileface:
lpy3654321 写道有demo吗下载地址:http:// ...
Openfire jsjac构建webIM -
zwdsmileface:
lpy3654321 写道有demo吗.可以运行的例子这是我写 ...
构建 基于openfire + jwchat 的 WEB IM -
lpy3654321:
有demo吗.可以运行的例子
构建 基于openfire + jwchat 的 WEB IM -
lpy3654321:
有demo吗
Openfire jsjac构建webIM
getHibernateTemplate()常用方法
一、find(String queryString);
示例:
返回所有User对象
二、find(String queryString , Object value);
示例:
或模糊查询:
返回name属性值为test的对象(模糊查询,返回name属性值包含test的对象)
三、find(String queryString, Object[] values);
示例:
返回用户名为test并且密码为123的所有User对象
四、findByExample(Object exampleEntity) 示例:
返回:用户名为bb密码为123的对象
五、findByExample(Object exampleEntity, int firstResult, int maxResults) 示例:
返回:满足用户名为bb密码为123,自start起共max个User对象。(对象从0开始计数)
六、findByNamedParam(String queryString , String paramName , Object value)
使用以下语句查询:
返回name为xiyue的User对象的条数
七、 findByNamedParam(String queryString , String[] paramName , Object[] value) 示例:
返回用户名为xiyue密码为123的User对象
八、findByNamedQuery(String queryName) 示例:
1、首先需要在User.hbm.xml中定义命名查询
2、如下使用查询:
九、findByNamedQuery(String queryName, Object value)
1、首先需要在User.hbm.xml中定义命名查询
2、如下使用查询:
十、findByNamedQuery(String queryName, Object[] value) 示例:
1、首先需要在User.hbm.xml中定义命名查询
2、如下使用查询:
十一、findByNamedQueryAndNamedParam(String queryName, String paramName, Object value) 示例:
1、首先需要在User.hbm.xml中定义命名查询
2、如下使用查询:
十二、findByNamedQueryAndNamedParam(String queryName, String[] paramName, Object[] value) 示例:
1、首先需要在User.hbm.xml中定义命名查询
2、如下使用查询:
十 三、findByValueBean(String queryString , Object value); 示例:
1、定义一个ValueBean,属性名必须和HSQL语句中的:后面的变量名同名,此处必须至少有两个属性,分别为myName和 myPassword,使用setter方法设置属性值后
2、
十 四、findByNamedQueryAndValueBean(String queryName , Object value); 示例:
1、首先需要在User.hbm.xml中定义命名查询
2、定义一个ValueBean,属性名必须和User.hbm.xml命名查询语句中的:后面的变量名同名,此处必须至少有两个属性,分别为 myName和myPassword,使用setter方法设置属性值后
3、
hibernatetemplate hibernate 使用 总结
使用HibernateTemplate的方法进行CRUD操作,其中查询操作通常可分为两种, 一种为固定条件查询,
另一种为动态多条件查询(如查询界面的实现),固定条件查询可以很方便地通过createQuery,find()等方法实现,但是我在动态条件查询的实 现过程中,hibernate0可以实现英文的条件查询,而中文条件则会出现乱码。现将具体的过程描述如下: 固定条件查询
可以使用常规的方法,如 Java代码
getHibernateTemplate().find(),getHibernateTemplate().createQuery()等
getHibernateTemplate().find(),getHibernateTemplate().createQuery()等
动态多条件查询
由于查询条件的不确定性,我曾尝试用拼参数的方法将拼好的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()中也拼一次赋值。 如:
Java代码
以上方法可以实现动态中文条件查询,在有的书中看到并不推荐用find()方法,find()只提供一些简单的HQL查询,不具有动态绑定参数的功能,在 将来的hibernate新版本中,有可能会淘汰find()方法,而Query接口才是真正的HQL查询接口,提供更为丰富的功能。基于此,可能对于一 个将被淘汰的方法find()不支持中文也就不足为奇了。^_^毕竟人家重心转移了。而且find()中拼sql字符串的方式虽然是实现查询的常用手段, 实现起来也比较方便,但是不利于hibernate更好地利用缓存,而采用Query接口可以更好地利用缓存,提高程序执行效率。
HibernateTemplate的常用方法简介:
q void delete(Object entity):删除指定持久化实例
q deleteAll(Collection entities):删除集合内全部持久化类实例
q find(String queryString):根据HQL查询字符串来返回实例集合
q findByNamedQuery(String queryName):根据命名查询返回实例集合
q get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例
q save(Object entity):保存新的实例
q saveOrUpdate(Object entity):根据实例状态,选择保存或者更新
q update(Object entity):更新实例的状态,要求entity是持久状态
q setMaxResults(int maxResults):设置分页的大小
q void delete(Object entity):删除指定持久化实例
q deleteAll(Collection entities):删除集合内全部持久化类实例
q find(String queryString):根据HQL查询字符串来返回实例集合
q findByNamedQuery(String queryName):根据命名查询返回实例集合
q get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例
q save(Object entity):保存新的实例
q saveOrUpdate(Object entity):根据实例状态,选择保存或者更新
q update(Object entity):更新实例的状态,要求entity是持久状态
q setMaxResults(int maxResults):设置分页的大小
一、find(String queryString);
示例:
this.getHibernateTemplate().find("from bean.User");
返回所有User对象
二、find(String queryString , Object value);
示例:
this.getHibernateTemplate().find("from bean.User u where u.name=?", "test");
或模糊查询:
this.getHibernateTemplate().find("from bean.User u where u.name like ?", "%test%");
返回name属性值为test的对象(模糊查询,返回name属性值包含test的对象)
三、find(String queryString, Object[] values);
示例:
String hql= "from bean.User u where u.name=? and u.password=?" this.getHibernateTemplate().find(hql, new String[]{"test", "123"});
返回用户名为test并且密码为123的所有User对象
四、findByExample(Object exampleEntity) 示例:
User u=new User(); u.setPassword("123" );//必须 符合的条件但是这两个条件时并列的(象当于sql中的and) u.setName("bb" ); list=this .getHibernateTemplate().findByExample(u,start,max);
返回:用户名为bb密码为123的对象
五、findByExample(Object exampleEntity, int firstResult, int maxResults) 示例:
User u=new User(); u.setPassword("123" );//必须 符合的条件但是这两个条件时并列的(象当于sql中的and) u.setName("bb" ); list=this .getHibernateTemplate().findByExample(u,start,max);
返回:满足用户名为bb密码为123,自start起共max个User对象。(对象从0开始计数)
六、findByNamedParam(String queryString , String paramName , Object value)
使用以下语句查询:
String queryString = "select count(*) from bean.User u where u.name=:myName" String paramName= "myName"; String value= "xiyue"; this .getHibernateTemplate().findByNamedParam(queryString, paramName, value); System.out.println(list.get(0 ));
返回name为xiyue的User对象的条数
七、 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[]{"xiyue", "123"}; this .getHibernateTemplate().findByNamedParam(queryString, paramName, value);
返回用户名为xiyue密码为123的User对象
八、findByNamedQuery(String queryName) 示例:
1、首先需要在User.hbm.xml中定义命名查询
<hibernate-mapping> <class>......</class> <query name="queryAllUser "><!--此查询被调用的名字--> <![CDATA[ from bean.User ]]> </query> </hibernate-mapping>
2、如下使用查询:
this .getHibernateTemplate().findByNamedQuery("queryAllUser ");
九、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、如下使用查询:
this .getHibernateTemplate().findByNamedQuery("queryByName ", "test");
十、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"}; this .getHibernateTemplate().findByNamedQuery("queryByNameAndPassword " , values);
十一、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、如下使用查询:
this .getHibernateTemplate().findByNamedQuery("queryByName " , "myName", "test");
十二、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"}; this .getHibernateTemplate().findByNamedQuery("queryByNameAndPassword " , names, values);
十 三、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"; this .getHibernateTemplate().findByValueBean(queryString , valueBean);
十 四、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"; this .getHibernateTemplate().findByNamedQueryAndValueBean("queryByNameAndPassword ", valueBean);
hibernatetemplate hibernate 使用 总结
使用HibernateTemplate的方法进行CRUD操作,其中查询操作通常可分为两种, 一种为固定条件查询,
另一种为动态多条件查询(如查询界面的实现),固定条件查询可以很方便地通过createQuery,find()等方法实现,但是我在动态条件查询的实 现过程中,hibernate0可以实现英文的条件查询,而中文条件则会出现乱码。现将具体的过程描述如下: 固定条件查询
可以使用常规的方法,如 Java代码
getHibernateTemplate().find(),getHibernateTemplate().createQuery()等
getHibernateTemplate().find(),getHibernateTemplate().createQuery()等
动态多条件查询
由于查询条件的不确定性,我曾尝试用拼参数的方法将拼好的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()中也拼一次赋值。 如:
Java代码
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) getHibernateTemplate().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) getHibernateTemplate().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(); } }); }
以上方法可以实现动态中文条件查询,在有的书中看到并不推荐用find()方法,find()只提供一些简单的HQL查询,不具有动态绑定参数的功能,在 将来的hibernate新版本中,有可能会淘汰find()方法,而Query接口才是真正的HQL查询接口,提供更为丰富的功能。基于此,可能对于一 个将被淘汰的方法find()不支持中文也就不足为奇了。^_^毕竟人家重心转移了。而且find()中拼sql字符串的方式虽然是实现查询的常用手段, 实现起来也比较方便,但是不利于hibernate更好地利用缓存,而采用Query接口可以更好地利用缓存,提高程序执行效率。
HibernateTemplate的常用方法简介:
q void delete(Object entity):删除指定持久化实例
q deleteAll(Collection entities):删除集合内全部持久化类实例
q find(String queryString):根据HQL查询字符串来返回实例集合
q findByNamedQuery(String queryName):根据命名查询返回实例集合
q get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例
q save(Object entity):保存新的实例
q saveOrUpdate(Object entity):根据实例状态,选择保存或者更新
q update(Object entity):更新实例的状态,要求entity是持久状态
q setMaxResults(int maxResults):设置分页的大小
q void delete(Object entity):删除指定持久化实例
q deleteAll(Collection entities):删除集合内全部持久化类实例
q find(String queryString):根据HQL查询字符串来返回实例集合
q findByNamedQuery(String queryName):根据命名查询返回实例集合
q get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例
q save(Object entity):保存新的实例
q saveOrUpdate(Object entity):根据实例状态,选择保存或者更新
q update(Object entity):更新实例的状态,要求entity是持久状态
q setMaxResults(int maxResults):设置分页的大小
发表评论
-
Hibernate 配置属性
2016-03-01 13:47 9544.4. 可选的配置属性 有大量属性能用来控制Hibern ... -
c3p0连接池的详细配置
2015-03-23 10:29 4241数据库连接是一个耗费 ... -
hibernate中dbcp.BasicDataSource连接池配备属性
2015-03-20 08:51 1033org.apache.commons.dbcp.BasicDa ... -
struts2 标签详解
2015-03-19 08:38 2839要使用Struts2的标签,只需要在JSP页面添加如下一行定义 ... -
SSH中hibernate的事务配置
2015-03-18 08:54 1278XML配置文件 <?xml version=" ... -
hql 继承HibernateDaoSupport类下的增删改查
2015-03-13 08:54 2617hibernate 在继承HibernateDaoSuppor ... -
Struts2 限制文件的上传格式和大小
2015-03-12 08:16 1591Struts2对文件进行上传文件的大小和类型的限制 Strut ... -
Struts2 文件上传
2015-03-11 10:17 926在struts2中实现文件的上传(采用Struts2标签) 首 ... -
Struts2错误:The Struts dispatcher cannot be found.
2015-03-11 10:07 1413如果你在配置struts2如果出现下列问题 The Strut ... -
struts2自定义Filter
2015-03-05 14:55 1174在struts2中自定义filter 防止用户通过手动输入网址 ... -
Struts2 登陆拦截器
2015-03-05 14:48 942用于做拦截是否已经登陆 检测session中是否已经存在用户信 ... -
Struts2 action之间传值与跳转
2015-03-05 14:40 2139最近在学习struts2关于action之间的跳转 后台代码: ...
相关推荐
Hibernate hql查询语法总结 Hibernate hql查询语法总结
Hibernate HQL基础练习小列子+数据库
Hibernate HQL.txt Hibernate HQL.txt Hibernate HQL.txt
对hibernate的hql进行了详尽的讲解
Hibernate中的关联查询实际上生成的是数据库表连接查询的SQL语句
Hibernate HQL 深度历险 深入讲解Hibernate HQL 查询
Hibernate HQL.docHibernate HQL.docHibernate HQL.doc
hibernate hql基本操作
hibernate hql各类查询范例
一个关于Hibernate-HQL 的文档 内容实际而且实用
Hibernate HQL命名参数和Query接口的分页 Hibernate HQL命名参数和Query接口的分页
hibernate hql语句 hql语言汇总
hibernate查询之HQLhibernate查询之HQLhibernate查询之HQL
Hibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询....
Hibernate HQL 插入,查询,更新
hibernate-HQL语句大全
weblogic12 下最新 org.hibernate.hql.ast.HqlToken解决办法
Hibernate查询语言HQL.PPT
Hibernate HQL查询语句总结.docx 网络下载的
精通HQL.doc精通HQL.doc精通HQL.doc精通HQL.doc精通HQL.doc