Hibernate 命名查询、本地SQL、自定义SQL
来源:互联网 发布:dota2怎么看数据 编辑:程序博客网 时间:2024/06/03 17:06
命名查询
使用HQL查询时,HQL代码分布在程序代码内,不利于维护,使用命名查询可以解决此问题。
1).修改相应的映射文件,添加如下代码<hibernate-mapping> <query name="testNamedQuery"> <![CDATA[ from Emp where empno >:empno ]]> </query></hibernate-mapping>2).在程序中调用Session的getNameQuery()方法获取此映射文件HQL语句示例: public void method() { Session session = HibernateSessionFactory.getSession(); //获取映射文件内的HQL语句 Query query = session.getNamedQuery("testNamedQuery"); //实例化一个Emp对象 Emp emp = new Emp(); emp.setEmpno(50); //将雇员信息作为查询条件组合到HQL语句中 query.setProperties(emp); List<Emp> list = query.list(); for(Emp e : list) { System.out.println(e.getEmpno() + " " + e.getEname()); } HibernateSessionFactory.closeSession(); }
本地SQL
当HQL语句满足不了查询需求时,可以使用SQL来查询
示例:
/** * 使用SQL进行查询 */ public void method1() { Session session = HibernateSessionFactory.getSession(); String sql = "select {e.*} from Emp e where e.empno >?"; SQLQuery query = session.createSQLQuery(sql).addEntity("e", Emp.class); query.setInteger(0, 50); List<Emp> list = query.list(); for(Emp emp : list) { System.out.println(emp.getEmpno() + " " + emp.getEname()); } HibernateSessionFactory.closeSession(); }
1).映射文件代码<hibernate-mapping> <sql-query name="testSqlQuery"> <![CDATA[ select {e.*} from Emp e where e.empno >? ]]> <return alias="e" class="com.bc.demo03.pojo.Emp"/> </sql-query></hibernate-mapping>2).程序代码 /** * 命名SQL查询 */ public void method2() { Session session = HibernateSessionFactory.getSession(); Query query = session.getNamedQuery("testSqlQuery"); query.setInteger(0, 20); List<Emp> list = query.list(); for(Emp emp : list) { System.out.println(emp.getEmpno() + " " + emp.getEname()); } HibernateSessionFactory.closeSession(); }
自定义SQL
在使用Session来执行save()、update()、delete()操作的时候会通过映射标记<sql-insert><sql-update><sql-delete>
来重载Hibernate默认的语句,因此我们可以使用这些标记来让Hibernate加载我们自定义的SQL语句
1).实体类映射文件配置<hibernate-mapping> <class name="com.bc.demo03.pojo.Emp" table="emp" catalog="hibernate_data" lazy="true"> <id name="empno" type="java.lang.Integer"> <column name="EMPNO" /> <generator class="identity"></generator> </id> <property name="ename" type="java.lang.String"> <column name="ENAME" length="10" /> </property> <property name="job" type="java.lang.String" update="false"> <column name="JOB" length="9" /> </property> <property name="mgr" type="java.lang.Integer" insert="false"> <column name="MGR" /> </property> <sql-insert> insert into Emp (ename,job) values(?,?) </sql-insert> <sql-update> update Emp set ename = ?,mgr = ? where empno = ? </sql-update> <sql-delete> delete from Emp where empno = ? </sql-delete> </class></hibernate-mapping>程序代码
0 0