- 浏览: 902331 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (498)
- J2EE (52)
- 数据库 (17)
- java基础 (43)
- web技术 (19)
- 程序设计 (6)
- 操作系统 (18)
- IT资讯 (7)
- 我的IT生活 (12)
- 学习笔记 (9)
- Jquery (25)
- JavaScript (18)
- spring (40)
- Hibernate (12)
- Struts (10)
- YUI (2)
- Extjs (22)
- .net (0)
- Eclipse (10)
- 社会主义 (2)
- 服务器 (9)
- CSS (8)
- 网络安全 (16)
- 版本控制 (9)
- PHP (2)
- Oracle (42)
- SQL server (1)
- Mysql (11)
- 项目管理 (3)
- 开发工具使用 (10)
- SQL语句 (7)
- Perl (0)
- Shell (6)
- 漏洞 (4)
- ibatis (5)
- hacker (2)
- SQL注入 (6)
- Hacker工具 (2)
- 入侵和渗透 (7)
- 插件/组件 (2)
- 最爱开源 (5)
- 常用软件 (2)
- DOS (1)
- HTML (2)
- Android (9)
- CMS (1)
- portal (8)
- Linux (7)
- OSGI (1)
- Mina (5)
- maven (2)
- hadoop (7)
- twitter storm (2)
- sap hana (0)
- OAuth (0)
- RESTful (1)
- Nginx (4)
- flex (1)
- Dubbo (1)
- redis (1)
- springMVC (1)
- node.js (1)
- solr (2)
- Flume (1)
- MongoDB (2)
- ElasticSearch (1)
最新评论
-
M_drm:
请问要怎么设置浏览器才不报没权限呢?
用JS在页面调用本地可执行文件的方法(ACTIVEX) -
Alexniver:
官方文档。When importing data into I ...
mysql导入数据过慢 解决方法 -
camelwoo:
我记得 Criteria 可以做连接查询与子查询,也可以做分页 ...
Hibernate总结篇二 -
zhenglongfei:
楼主如果SubKeyName 这个节点不存在,怎么办??怎么用 ...
Java操作注册表 -
yxx676229549:
用log4j 2 了
logback
什么是命名查询?
Hibernate允许在映射文件中定义字符串形式的查询语句,这种查询方式成为命名查询
使用命名查询有什么好处?
由于使用Hibernate的HQL常常需要在Java代码中写字符串查询语句,HQL混杂在代码之间,破坏代码可读性,通过使用命名查询,可以使业务逻辑和查询语句分离,使您专注于查询,而避免了 SQL 或者 HQL 代码分散于整个应用程序中的情况。
可以应用命名查询做复杂查询的处理
命名查询如何实现?
介绍下面几种方式:
方法一:在配置文件中<class/>标记的下面,声明查询语句
备注: <![CDATA[ ]]>是什么意思?
标明是纯文本的,没有这个的话 < > & 字符是不能直接存入XML的,需要转义,而用这个标记则不需要转义而将这些符号存入XML文档。可以避免未预料的特殊符号导致XML解析出错。
方法二:也可以在配置文件中<class/>标记的里面,声明查询语句, 但是java代码调用时需要指定(包+类+配置名)
方法三:使用原生sql查询<sql-query>,使用此种方式必须把表所有的列写全才可以,否则会出现‘列名无效’的错误 ,除非你使用return-scalar来设置字段类型。
备注: 也可以在<return/>标记里面应用<return-property/>标记将表的所有字段列出来,与上面描述的方法一样,都是查询出来所有列。
方法四:使用原生sql查询<sql-query>, 如果应用return-scalar来设置字段类型, 就可以实现查询部分字段。
Hibernate允许在映射文件中定义字符串形式的查询语句,这种查询方式成为命名查询
使用命名查询有什么好处?
由于使用Hibernate的HQL常常需要在Java代码中写字符串查询语句,HQL混杂在代码之间,破坏代码可读性,通过使用命名查询,可以使业务逻辑和查询语句分离,使您专注于查询,而避免了 SQL 或者 HQL 代码分散于整个应用程序中的情况。
可以应用命名查询做复杂查询的处理
命名查询如何实现?
介绍下面几种方式:
方法一:在配置文件中<class/>标记的下面,声明查询语句
<hibernate-mapping> <class name="com.test.bean.Student" table="student" catalog="users"> <id name="id" type="integer"> <column name="id" /> <generator class="identity" /> </id> <property name="name" type="string"> <column name="name" length="11" /> </property> <property name="age" type="integer"> <column name="age" /> </property> <property name="sex" type="string"> <column name="sex" length="2" /> </property> </class> <!-- 定义查询语句 --> <query name="findStudentByName"> <![CDATA[from Student where name = :name]]> </query> </hibernate-mapping>
备注: <![CDATA[ ]]>是什么意思?
标明是纯文本的,没有这个的话 < > & 字符是不能直接存入XML的,需要转义,而用这个标记则不需要转义而将这些符号存入XML文档。可以避免未预料的特殊符号导致XML解析出错。
public List<Student> query(){ Session session = HibernateSessionFactory.getSession(); Query q = session.getNamedQuery("findStudentByName"); q.setString("name", "zhangsan"); List<Student> list = q.list(); return list; }
方法二:也可以在配置文件中<class/>标记的里面,声明查询语句, 但是java代码调用时需要指定(包+类+配置名)
<hibernate-mapping> <class name="com.test.bean.Student" table="student" catalog="users"> <id name="id" type="integer"> <column name="id" /> <generator class="identity" /> </id> <property name="name" type="string"> <column name="name" length="11" /> </property> <property name="age" type="integer"> <column name="age" /> </property> <property name="sex" type="string"> <column name="sex" length="2" /> </property> <!-- 定义查询语句 --> <query name="findStudentByName"> <![CDATA[from Student where name = :name]]> </query> </class> </hibernate-mapping>
public List<Student> query(){ Session session = HibernateSessionFactory.getSession(); Query q = session.getNamedQuery("com.test.bean.Student.findStudentByName"); q.setString("name", "zhangsan"); List<Student> list = q.list(); return list; }
方法三:使用原生sql查询<sql-query>,使用此种方式必须把表所有的列写全才可以,否则会出现‘列名无效’的错误 ,除非你使用return-scalar来设置字段类型。
<hibernate-mapping> <class name="com.test.bean.Student" table="student" catalog="users"> <id name="id" type="integer"> <column name="id" /> <generator class="identity" /> </id> <property name="name" type="string"> <column name="name" length="11" /> </property> <property name="age" type="integer"> <column name="age" /> </property> <property name="sex" type="string"> <column name="sex" length="2" /> </property> </class> <!-- 定义查询语句 --> <sql-query name="findStudentByName"> <return alias="s" class="com.test.bean.Student"> </return> <![CDATA[select {s.*} from student s where s.name = :name]]> </sql-query> </hibernate-mapping>
备注: 也可以在<return/>标记里面应用<return-property/>标记将表的所有字段列出来,与上面描述的方法一样,都是查询出来所有列。
public List<Student> query(){ Session session = HibernateSessionFactory.getSession(); Query q = session.getNamedQuery("findStudentByName"); q.setString("name", "zhangsan"); List<Student> list = q.list(); return list; }
方法四:使用原生sql查询<sql-query>, 如果应用return-scalar来设置字段类型, 就可以实现查询部分字段。
<hibernate-mapping> <class name="com.test.bean.Student" table="student" catalog="users"> <id name="id" type="integer"> <column name="id" /> <generator class="identity" /> </id> <property name="name" type="string"> <column name="name" length="11" /> </property> <property name="age" type="integer"> <column name="age" /> </property> <property name="sex" type="string"> <column name="sex" length="2" /> </property> </class> <!-- 定义查询语句 --> <sql-query name="findStudentByName"> <return-scalar column="name" type="string"/> <return-scalar column="age" type="integer"/> <![CDATA[select s.name , s.age from student s where s.name = :name]]> </sql-query> </hibernate-mapping>
public List<Object[]> query(){ Session session = HibernateSessionFactory.getSession(); Query query = session.getNamedQuery("findStudentByName"); query.setString("name", "zhangsan"); List<Object[]> list = query.list(); return list; } 或者: public List<Student> query(){ Session session = HibernateSessionFactory.getSession(); Query q = session.getNamedQuery("findStudentByName"). setResultTransformer(Transformers.aliasToBean(Student.class)); q.setString("name", "zhangsan"); List<Student> list = q.list(); return list; }
发表评论
-
为什么用IBATIS不用Hibernate及不用JDBC而用IBATIS
2013-11-23 14:28 0为什么用IBATIS不用Hiberna ... -
Hibernate 面试中最常考察的知识点整合(转)
2013-03-29 16:26 804http://jianfulove.iteye.com/blo ... -
关于Hibernate中占位符式的查询
2013-03-28 17:38 1757占位符式的查询 ( 就是采用 ? 替换查询语句中的变量 ) 是 ... -
Hibernate参考文档
2013-03-28 13:29 872Hibernate参考文档 http://www.redsag ... -
Hibernate总结篇二
2013-01-27 15:43 1653Hibernate总结篇二 一、HQ ... -
spring 监听器 IntrospectorCleanupListener简介
2012-08-02 17:00 1038"在服务器运行过程中,Spring不停的运行的计划任 ... -
hql写的一个取最大值的语句
2011-11-15 00:31 1063hql写的一个取最大值的语句 http://www.itey ... -
Hibernate 参数设置一览表
2011-09-07 13:35 807属性名 用途 hibernate.di ... -
数据持久化Hibernate的标准数据库连接池配置(转)
2011-07-20 11:22 1504转自:http://hi.baidu.com/lanruiji ... -
关于Hibernate获取JDBC连接 直接执行SQL
2011-07-20 11:03 1207今天要做一个显示数据库列表的功能,不想直接用JDBC,呵呵 于 ... -
解决Hibernate原生SQL映射问题
2010-06-01 16:48 2355在问答里和论坛中,经常看到有人问,怎样将使用本地SQL查询出来 ... -
Hibernate工作原机制
2010-05-13 08:54 1185原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建S ...
相关推荐
Hibernate HQL命名参数和Query接口的分页 Hibernate HQL命名参数和Query接口的分页
16.2. 命名SQL查询 16.2.1. 使用return-property来明确地指定字段/别名 16.2.2. 使用存储过程来查询 16.3. 定制SQL用来create,update和delete 16.4. 定制装载SQL 17. 过滤数据 17.1. Hibernate 过滤器...
16.2. 命名SQL查询 16.2.1. 使用return-property来明确地指定字段/别名 16.2.2. 使用存储过程来查询 16.3. 定制SQL用来create,update和delete 16.4. 定制装载SQL 17. 过滤数据 17.1. Hibernate 过滤器...
16.2. 命名SQL查询 16.2.1. 使用return-property来明确地指定字段/别名 16.2.2. 使用存储过程来查询 16.3. 定制SQL用来create,update和delete 16.4. 定制装载SQL 17. 过滤数据 17.1. Hibernate 过滤器...
3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的...
Hibernate允许在映射文件中定义字符串形式的查询语句,这种查询方式成为命名查询,需要的朋友可以参考下
你可以看到这个类对属性的存取方法(getter and setter method)使用了标准JavaBean命名约定,同时把类属性(field)的访问级别设成私有的(private)。这是推荐的设计,但并不是必须的。Hibernate也可以直接访问...
3、Hibernate 框架主要包括持久化对象(PersistentObjects)、Hibernate 配置文件 (一般被命名为*.cfg.xml)、Hibernate 映射文件(一般被命名为*.hbm.xml) 三部分; 4、编译运行基于 Hibernate 框架的工程,需要...
和JDBC比较一下,同样都是数据库中间件(DM,Database Middleware),JDBC利用SQL语言操作的是数据,而Hibernate则是利用自己的查询语言Hibernate Query Language(HQL虽然底层还是要转换成sql语言)操作的是持久化对象...
当应用程序调用Session的save()、update()、savaeOrUpdate()、get()或load(),以及调用查询接口的list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级...
三、Hibernate2和Hibernate3的命名空间有所变化。例如,配置C3P0时的provider_class有Hibernate2环境下使用net.sf.hibernate.connection.C3P0ConnectionProvider,在Hibernate3环境下使用org.hibernate.connection....
本文主要介绍了Hibernate命名策略。具有很好的参考价值,下面跟着小编一起来看下吧
10.1.2 Hibernate应用程序中的事务 10.1.3 使用Java Persistence的事务 10.2 控制并发访问 10.2.1 理解数据库级并发 10.2.2 乐观并发控制 10.2.3 获得额外的隔离性保证 10.3 非事务数据...
16.2. 命名SQL查询 16.2.1. 使用return-property来明确地指定字段/别名 16.2.2. 使用存储过程来查询 16.3. 定制SQL用来create,update和delete 16.4. 定制装载SQL 17. 过滤数据 17.1. Hibernate 过滤器...
NULL 博文链接:https://chaoyi.iteye.com/blog/2148012
3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的...
17.1.14 在映射文件中定义命名查询语句 17.1.15 在HQL查询语句中调用函数 17.2 设定查询条件 17.2.1 比较运算 17.2.2 范围运算 17.2.3 字符串模式匹配 17.2.4 逻辑运算 17.2.5 集合运算 17.3 小结...
三、Hibernate2和Hibernate3的命名空间有所变化。例如,配置C3P0时的provider_class有Hibernate2环境下使用net.sf.hibernate.connection.C3P0ConnectionProvider,在Hibernate3环境下使用org.hibernate.connection....
Hibernate查询语言(Query Language), 即HQL 11.1. 大小写敏感性(Case Sensitivity) 11.2. from 子句 11.3. 联合(Associations)和连接(joins) 11.4. select子句 11.5. 统计函数(Aggregate ...
hibernate dao 操作(一个basedao全部搞定) 两种配置:oracle mysql,切换数据库只要把SessionFactory的配置文件改成对应就可以了 c3p0配置:mysql调试通过,oracle由于存在问题,未配置 spring配置式事务管理...