【Hibernate】---Query、Criteria、SQLQuery

一、核心配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6     <session-factory>
 7         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
 8         <property name="hibernate.connection.password">root</property>
 9         <property name="hibernate.connection.url">jdbc:mysql:///test</property>
10         <property name="hibernate.connection.username">root</property>
11
12         <property name="hibernate.show_sql">true</property>
13         <property name="hibernate.format_sql">true</property>
14         <property name="hibernate.hbm2ddl.auto">update</property>
15         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
16
17         <property name="current_session_context_class">thread</property>
18
19         <mapping resource="com/chinasofti/entity/EUser.hbm.xml"/>
20
21     </session-factory>
22 </hibernate-configuration>

二、实体类

 1 package com.chinasofti.entity;
 2
 3 public class EUser {
 4     private int id;
 5     private String username;
 6     private String password;
 7
 8     public int getId() {
 9         return id;
10     }
11     public void setId(int id) {
12         this.id = id;
13     }
14     public String getUsername() {
15         return username;
16     }
17     public void setUsername(String username) {
18         this.username = username;
19     }
20     public String getPassword() {
21         return password;
22     }
23     public void setPassword(String password) {
24         this.password = password;
25     }
26     @Override
27     public String toString() {
28         return "EUser [id=" + id + ", username=" + username + ", password="
29                 + password + "]";
30     }
31
32 }

三、映射文件

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- Generated 2017-8-10 10:27:23 by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping>
 6     <class name="com.chinasofti.entity.EUser" table="EUSER">
 7         <id name="id" type="int">
 8             <column name="ID" />
 9             <generator class="native" />
10         </id>
11         <property name="username" type="java.lang.String">
12             <column name="USERNAME" />
13         </property>
14         <property name="password" type="java.lang.String">
15             <column name="PASSWORD" />
16         </property>
17     </class>
18 </hibernate-mapping>

四、封装类

 1 package com.chinasofti.entity;
 2 import org.hibernate.Session;
 3 import org.hibernate.SessionFactory;
 4 import org.hibernate.cfg.Configuration;
 5
 6 public class HibernateUtil {
 7     static Configuration CONFIGURATION = null;
 8     static SessionFactory SESSION_FACTORY = null;
 9     static Session SESSION = null;
10     static{
11         CONFIGURATION = new Configuration();
12         CONFIGURATION.configure();
13         SESSION_FACTORY = CONFIGURATION.buildSessionFactory();
14         SESSION    = SESSION_FACTORY.openSession();
15     }
16     public static SessionFactory getSessionFactory(){
17         return SESSION_FACTORY;
18     }
19     public static Session openSession(){
20         return SESSION;
21     }
22 }

五、测试类

 1 package com.chinasofti.test;
 2
 3 import java.util.List;
 4
 5 import org.hibernate.Criteria;
 6 import org.hibernate.Query;
 7 import org.hibernate.SQLQuery;
 8 import org.hibernate.Session;
 9 import org.hibernate.Transaction;
10 import org.junit.Test;
11
12 import com.chinasofti.entity.EUser;
13 import com.chinasofti.entity.HibernateUtil;
14
15 public class TestHibernateTestQuery {
16
17     @Test
18     public void TestQuery(){
19         Session session = HibernateUtil.openSession();
20         Query query = session.createQuery("from EUser");
21         List<EUser> list = query.list();
22         for (EUser eUser : list) {
23             System.out.println(eUser.getUsername());
24         }
25     }
26
27
28     @Test
29     public void TestCriteriaQuery(){
30         Session session = HibernateUtil.openSession();
31         Criteria criteria = session.createCriteria(EUser.class);
32         List<EUser> list = criteria.list();
33         for (EUser eUser : list) {
34             System.out.println(eUser.getUsername());
35         }
36     }
37     @Test
38     public void TestSqlQuery(){
39         Session session = HibernateUtil.openSession();
40         //创建SQLQuery对象
41         SQLQuery sQLQuery = session.createSQLQuery("select * from euser");
42         //添加一个实体类
43         sQLQuery.addEntity(EUser.class);
44         List<EUser> list = sQLQuery.list();
45         for (EUser eUsers : list) {
46             System.out.println(eUsers.getUsername());
47         }
48     }
49
50
51     @Test
52     public void testRollback(){
53         Session session=null;
54         //注意:先查询再修改
55         Transaction transaction=null;
56         try {
57             session = HibernateUtil.openSession();
58             transaction = session.beginTransaction();
59             EUser user = session.get(EUser.class, 4);
60             //给user对象设置新的值
61             user.setUsername("滚回来");
62             session.save(user);
63             System.out.println(10/0);
64             transaction.commit();
65             //注意:mysql和oracle数据不一样,如果这里操作的是oracle,这里数据就不会变。因为mysql是自动提交的(默认)
66         } catch (Exception e) {
67             // TODO Auto-generated catch block
68             transaction.rollback();
69         }finally{
70             session.close();
71         }
72     }
73
74
75 }

之前Hibernate API的使用(Query、Criteria、SQLQuery对象) 没有附代码    今天补上

时间: 2024-11-05 20:46:07

【Hibernate】---Query、Criteria、SQLQuery的相关文章

【Hibernate】Hibernate的聚类查询、分组查询、排序与时间之差

在Hibernate中的HQL语句其实能够基本能够实现SQL语句所做的事情,正如jQuery至于javascript一样.虽然HQL语句是对类的查询,但是HQL在实行聚类查询.分组查询.排序与时间之差等查询,也无须把查询结果查询出来,再通过对List的处理才得到结果. 比如有一张如下的Testtable表: 要像<[Mysql]求出离最近相差X天的项,sql语句关于日期的比对>(点击打开链接)一样,查询date字段离现在具有30年的项有多少,SQL语句则这样写: select count(*)

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查

这篇文章有很多槽点,在Hibernate4.x上面用着Hibernate3.x的写法去写.而且程序中放到Eclipse中会有一大堆警告,但是这好歹也在一定程度上完成了Hibernate的入门.毕竟现在很多介绍Hibernate的书籍都是用Hibernate3.x的写法去写.上次那篇<[Hibernate]最简单的Hibernate工程--账号注册系统>(点击打开链接)杂糅Struts的技术其实是不对的.因为Hibernate完成的是,从Java到数据库,从数据库到Java的任务.之后Java与

【Python】定位一组元素、

前几天生病加懒惰 TAT ========================================================================== 1.getAttribute()方法是一个函数.它只有一个参数--你打算查询的属性的名字: 2.http://www.cnblogs.com/fnng/p/3190966.html 注意路径 3. [Python]定位一组元素.,布布扣,bubuko.com

【Android】状态栏通知Notification、NotificationManager详解(转)

在Android系统中,发一个状态栏通知还是很方便的.下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置? 首先,发送一个状态栏通知必须用到两个类:  NotificationManager . Notification. NotificationManager :  是状态栏通知的管理类,负责发通知.清楚通知等. NotificationManager 是一个系统Service,必须通过 getSystemService()方法来获取. [java] view plainc

JavaScript学习笔记【2】表达式和运算符、语句、对象

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 表达式和运算符 语句 对象 表达式和运算符 数组直接量中的列表逗号之间的元素可以省略,这时省略的空位会填充值undefined.元素列表末尾可以留下单个逗号,这时并不会创建一个新的值为undefined元素. 属性访问表达式,.identifier的写法只适用于要访问的属性名称是合法的标识符,并且需要知道要访问的属性的名字.如果属性名称是一个保留字或者包含空格和标识符,或是一个数字(对于数组来说),则必须使用方括号的写法.当属性

【转载】Android的fill_parent、match_parent和wrap_content的区别

fill_parent在全体系的Android版本中通过,match_parent使用在Android 2.2及以上版本.两者作用一致. 1)fill_parent 主动方:父组件 被动方:子组件 1.在高度或者宽度上设置为fill_parent,则子组件的高度或者长度根据父组件的值而定.通常值与父组件相等. 2.当子组件的内容高/宽值小于父组件高/宽值,子组件内容被拉长. 3.当子组件的内容高/宽值大于父组件高/宽值,子组件内容被裁剪. fill_parent设置一个顶部布局或控件强制性让它布

【转】C#中continue、break和return用法

continue和break的用法一样,直接写上这个单词,后面加一个分号就行 比如: continue; break; 我们先来谈continue 看代码 for (int i=0; i<10; i++) { Console.Write(i); } 这个程序的意思输出从0到9的数字 那如果我在i等于3的时候,我不想输出,那该怎么办呢?那就要用到continue了,在等于3的时候,我们用continue来跳过他,代码如下 for (int i=0; i<10; i++) { if (i == 3

【Bootstrap】一个兼容IE8、谷歌等主流浏览器的受众门户式风格页面

上一次写的<[Bootstrap]一个兼容IE8.谷歌等主流浏览器的受众巨幕式风格页面>(点击打开链接) 部分老一辈的需求可能对这种后现代的风格并不满意, 没关系,我们完全可以改变布局 拉成门户式的风格, 他们马上屁颠屁颠地接受了: 首先,门户式的布局的大概你要清楚, 这一才利于我们快速布局 开头是一个较小的巨幕, 之后是一个导航栏,这里还是用到了按钮组 接着是各个专栏,这里是关于bootstrap栅格系统与面板的运用 最后是版权信息,这里还是一个面板 反正个人觉得这种门户式的布局风格烂大街,

【转载】图的割点、桥与双连通分支

[点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合.一个图的点连通度的定义为,最小割点集合中的顶点数. 类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合.一个图的边连通度的定义为,最小割边集合中的边数. [双连通图.割点与桥] 如果一个无向连通图的点连通度大于1,则称该图是点双连通的(point biconnected),简称双连通或重连通.一个