Hibernate的添加,修改,查询(三种查询方式)的方法:
案例演示:
1:第一步,导包,老生常谈了都是,省略;
2:第二步,创建数据库和数据表,表结构如下所示:
3:第三步创建实体类User.java
1 package com.bie.po;
2 /**
3 * @author BieHongLi
4 * @version 创建时间:2017年3月8日 下午5:17:23
5 *
6 */
7 public class User {
8
9 private int id;
10 private String name;
11 private String password;
12 private String email;
13 private String phone;
14 public int getId() {
15 return id;
16 }
17 public void setId(int id) {
18 this.id = id;
19 }
20 public String getName() {
21 return name;
22 }
23 public void setName(String name) {
24 this.name = name;
25 }
26 public String getEmail() {
27 return email;
28 }
29 public void setEmail(String email) {
30 this.email = email;
31 }
32 public String getPhone() {
33 return phone;
34 }
35 public void setPhone(String phone) {
36 this.phone = phone;
37 }
38 public String getPassword() {
39 return password;
40 }
41 public void setPassword(String password) {
42 this.password = password;
43 }
44 @Override
45 public String toString() {
46 return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone
47 + "]";
48 }
49
50
51 }
4:第四步,完成实体类的属性和数据表字段的映射,映射的.xml如下所示,前面的博客已经介绍如何写这个映射,这里略过;
1 <?xml version="1.0"?>
2 <!DOCTYPE hibernate-mapping PUBLIC
3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
5
6 <hibernate-mapping package="com.bie.po">
7 <!-- 操作条件:
8 1:对象与表
9 2:属性与字段的对应
10 3:类型的对应,类型默认采用属性的类型,type不写的话
11 -->
12 <class name="User" table="user">
13 <!-- 主键,映射 -->
14 <id name="id" column="id">
15 <generator class="native"></generator>
16 </id>
17
18 <!-- 非主键,映射 -->
19 <property name="name" column="name"></property>
20 <property name="password" column="password"></property>
21 <property name="email" column="email"></property>
22 <property name="phone" column="phone"></property>
23
24
25 </class>
26
27 </hibernate-mapping>
5:映射之后写Hibernate的配置文件,配置文件如下所示:
1 <!DOCTYPE hibernate-configuration PUBLIC
2 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
3 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
4
5 <hibernate-configuration>
6 <session-factory>
7 <!--
8 1:数据连接配置
9 2:加载所有的映射(*.hbm.xml)
10 -->
11
12 <!-- 1:数据连接配置 -->
13 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
14 <property name="hibernate.connection.url">jdbc:mysql:///test</property>
15 <property name="hibernate.connection.username">root</property>
16 <property name="hibernate.connection.password">123456</property>
17 <!-- mysql数据库的方言 -->
18 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
19
20 <property name="hibernate.show_sql">true</property>
21
22 <!-- 2:加载所有的映射(*.hbm.xml) -->
23 <mapping resource="com/bie/po/User.hbm.xml"/>
24
25 </session-factory>
26 </hibernate-configuration>
6:完成上面的之后写测试的类即可;
6.1:首先实现Hibernate的插入操作《session.save(user)》:
核心代码:
//获取加载配置文件的管理类对象 Configuration config=new Configuration(); //默认加载src/hibernate.cfg.xml文件 config.configure(); //创建session的工厂文件 SessionFactory sf=config.buildSessionFactory(); //创建session(代表一个会话,与数据库连接的会话) Session session=sf.openSession(); //开启事务 Transaction tx=session.beginTransaction(); //保存到数据库 session.save(user); //提交事务 tx.commit(); //关闭 session.close(); //sessionFactory关闭 sf.close();
源码如下所示:
1 package com.bie.test;
2
3 import org.hibernate.Session;
4 import org.hibernate.SessionFactory;
5 import org.hibernate.Transaction;
6 import org.hibernate.cfg.Configuration;
7 import org.junit.Test;
8
9 import com.bie.po.User;
10
11 /**
12 * @author BieHongLi
13 * @version 创建时间:2017年3月8日 下午5:28:35
14 *
15 */
16 public class HelloTest {
17
18 @Test
19 public void testHello(){
20 //对象
21 User user=new User();
22 user.setName("张三");
23 user.setPassword("123456");
24 user.setEmail("1748741329@qq.com");
25 user.setPhone("15236083005");
26
27 //获取加载配置文件的管理类对象
28 Configuration config=new Configuration();
29 //默认加载src/hibernate.cfg.xml文件
30 config.configure();
31 //创建session的工厂文件
32 SessionFactory sf=config.buildSessionFactory();
33 //创建session(代表一个会话,与数据库连接的会话)
34 Session session=sf.openSession();
35 //开启事务
36 Transaction tx=session.beginTransaction();
37 //保存到数据库
38 session.save(user);
39 //提交事务
40 tx.commit();
41 //关闭
42 session.close();
43 //sessionFactory关闭
44 sf.close();
45
46
47 }
48 }
演示效果如下所示:
6.2:实现Hibernate的修改操作,核心代码《session.saveOrUpdate(user); session.update(user);这个就不演示了,用法一样,将他们替换一下即可,只是saveOrUpdate更加强大的说》:
session.saveOrUpdate(user);
这个实现的是如果没有实体类的编号就执行保存操作,如果有实体类的编号就执行修改操作;
设计Hibernate框架的人太TMD有才了,当然这是夸赞,大大简化了我们对数据库的操作,必须赞一个;
源码如下所示:
1 package com.bie.test;
2
3 import org.hibernate.Session;
4 import org.hibernate.SessionFactory;
5 import org.hibernate.Transaction;
6 import org.hibernate.cfg.Configuration;
7 import org.junit.Test;
8
9 import com.bie.po.User;
10
11 /**
12 * @author BieHongLi
13 * @version 创建时间:2017年3月8日 下午5:28:35
14 *
15 */
16 public class HelloTest2 {
17
18 //SessionFactory代表整个配置文件,所以没必要加载多次,放到全局即可
19 private static SessionFactory sf;
20 static{
21 //1:创建配置管理类对象
22 Configuration config=new Configuration();
23 //加载配置文件,(默认加载/src/hibernate.cfg.xml)
24 config.configure();
25
26 //2:根据加载的配置管理类对象,创建SessionFactory对象
27 sf=config.buildSessionFactory();
28
29 //简介写法,写到一行里面
30 //sf=new Configuration().configure().buildSessionFactory();
31 }
32 @Test
33 public void testHello(){
34 //对象
35 User user=new User();
36 user.setId(1);
37 user.setName("李四22222");
38 user.setPassword("222222");
39 user.setEmail("22222222@qq.com");
40 user.setPhone("15236083005");
41
42 //3:根据sesson的工厂创建session对象
43 Session session = sf.openSession();
44
45 //开启事务
46 Transaction tx = session.beginTransaction();
47 //执行操作
48 //session.save(user);
49 session.saveOrUpdate(user);
50
51 //提交事务
52 tx.commit();
53 //关闭事务
54 session.close();
55 sf.close();
56 }
57
58 }
演示结果如下所示:
6.3:实现Hibernate的查询操作:
6.3.1:主键查询的方法
两种方法:
User u=(User)session.get(User.class, 1); User u=(User)session.load(User.class, 1);支持懒加载
源码如下所示:
1 package com.bie.test;
2
3 import org.hibernate.Session;
4 import org.hibernate.SessionFactory;
5 import org.hibernate.Transaction;
6 import org.hibernate.cfg.Configuration;
7 import org.junit.Test;
8
9 import com.bie.po.User;
10
11 /**
12 * @author BieHongLi
13 * @version 创建时间:2017年3月9日 下午8:47:46
14 * Hibernate查询的几种方式:
15 *
16 */
17 public class SelectTest {
18
19 //全局静态session工厂
20 private static SessionFactory sf;
21 static{
22 //1:创建sesson工厂
23 sf=new Configuration().configure().buildSessionFactory();
24 }
25
26 @Test
27 public void select(){
28 User user=new User();
29
30 //2:根据session工厂创建session
31 Session session=sf.openSession();
32 //3:开启事务
33 Transaction tx=session.beginTransaction();
34 //4:主键查询,执行查询操作,方法一:get方法,方法2:load方法
35 //User u=(User)session.get(User.class, 1);
36 User u=(User)session.load(User.class, 1);
37
38 //主键查询测试结果
39 System.out.println(u);
40 //5:提交事务
41 tx.commit();
42 //6:关闭事务和session
43 session.close();
44 sf.close();
45
46 }
47
48 }
演示效果如下所示:
6.3.2:HQL查询,特别注意的是查询语句必须是实体类的方法名,不能是表名称,必须和sql语句查询区别:
HQL查询和sql查询的区别:
(1):sql查询是表以及字段,不区分大小写,也叫做结构化的查询语句;
(2):HQL查询是Hibernate提供的面向对象的查询语句,查询的是对象以及对象的属性,区分大小写的。
源码如下所示:
1 package com.bie.test;
2
3
4
5 import java.util.List;
6
7 import org.hibernate.Query;
8 import org.hibernate.Session;
9 import org.hibernate.SessionFactory;
10 import org.hibernate.Transaction;
11 import org.hibernate.cfg.Configuration;
12 import org.junit.Test;
13
14 import com.bie.po.User;
15
16 /**
17 * @author BieHongLi
18 * @version 创建时间:2017年3月9日 下午8:47:46
19 * Hibernate查询的几种方式:
20 *
21 */
22 public class SelectTest2 {
23
24 //全局静态session工厂
25 private static SessionFactory sf;
26 static{
27 //1:创建sesson工厂
28 sf=new Configuration().configure().buildSessionFactory();
29 }
30
31 @Test
32 public void select(){
33 User user=new User();
34
35 //2:根据session工厂创建session
36 Session session=sf.openSession();
37 //3:开启事务
38 Transaction tx=session.beginTransaction();
39
40 //HRL查询,查询全部信息,注意HRL查询的是实体类的名称,不是数据表的名称,特别注意这一点
41 //Query q=session.createQuery("from User");
42 Query q=session.createQuery("from User user where user.id=1 or user.id=2 ");
43
44 List<User> list=q.list();
45 System.out.println(list);
46
47 //5:提交事务
48 tx.commit();
49 //6:关闭事务和session
50 session.close();
51 sf.close();
52
53 }
54
55 }
效果如下所示:
6.3.3:完全面向对象的查询,Criteria查询也叫做 QBC查询 query by criteria
核心代码:
//Criteria查询也叫做 QBC查询 query by criteria //完全的面向对象的查询 Criteria criteria = session.createCriteria(User.class); //添加条件 criteria.add(Restrictions.eq("id", 1)); //查询全部,没有sql语句 List<User> list = criteria.list(); System.out.println(list);
源码如下所示:
1 package com.bie.test;
2
3
4
5 import java.util.List;
6
7 import org.hibernate.Criteria;
8 import org.hibernate.Session;
9 import org.hibernate.SessionFactory;
10 import org.hibernate.Transaction;
11 import org.hibernate.cfg.Configuration;
12 import org.hibernate.criterion.Restrictions;
13 import org.junit.Test;
14
15 import com.bie.po.User;
16
17 /**
18 * @author BieHongLi
19 * @version 创建时间:2017年3月9日 下午8:47:46
20 * Hibernate查询的几种方式:
21 *
22 */
23 public class SelectTest3 {
24
25 //全局静态session工厂
26 private static SessionFactory sf;
27 static{
28 //1:创建sesson工厂
29 sf=new Configuration().configure().buildSessionFactory();
30 }
31
32 @Test
33 public void select(){
34 User user=new User();
35
36 //2:根据session工厂创建session
37 Session session=sf.openSession();
38 //3:开启事务
39 Transaction tx=session.beginTransaction();
40
41 //Criteria查询也叫做 QBC查询 query by criteria
42 //完全的面向对象的查询
43 Criteria criteria = session.createCriteria(User.class);
44 //添加条件
45 criteria.add(Restrictions.eq("id", 1));
46
47 //查询全部,没有sql语句
48 List<User> list = criteria.list();
49
50
51 System.out.println(list);
52
53 //5:提交事务
54 tx.commit();
55 //6:关闭事务和session
56 session.close();
57 sf.close();
58
59 }
60
61 }
演示效果如下所示:
6.3.4:本地查询sql语句,适合使用复杂的查询,或者不想使用HQL或者criteria查询,可以使用本地sql查询,缺点,不能跨越数据库,一般不适用,除非遇到复杂的sql语句才使用:
核心代码:
//sql语句 //SQLQuery sql= session.createSQLQuery("select * from user "); SQLQuery sql=session.createSQLQuery("select * from user where id=1 "); sql.addEntity(User.class); List<User> list=sql.list(); System.out.println(list);源码如下所示:
1 package com.bie.test;
2
3
4
5 import java.util.List;
6
7 import org.hibernate.SQLQuery;
8 import org.hibernate.Session;
9 import org.hibernate.SessionFactory;
10 import org.hibernate.Transaction;
11 import org.hibernate.cfg.Configuration;
12 import org.junit.Test;
13
14 import com.bie.po.User;
15
16 /**
17 * @author BieHongLi
18 * @version 创建时间:2017年3月9日 下午8:47:46
19 * Hibernate查询的几种方式:
20 *
21 */
22 public class SelectTest4 {
23
24 //全局静态session工厂
25 private static SessionFactory sf;
26 static{
27 //1:创建sesson工厂
28 sf=new Configuration().configure().buildSessionFactory();
29 }
30
31 @Test
32 public void select(){
33 User user=new User();
34
35 //2:根据session工厂创建session
36 Session session=sf.openSession();
37 //3:开启事务
38 Transaction tx=session.beginTransaction();
39
40 //sql语句
41 //把每一行记录封装为对象数组,再添加到list集合中
42 //SQLQuery sql= session.createSQLQuery("select * from user ");
43 //把每一行记录封装为指定的对象类型
44 SQLQuery sql=session.createSQLQuery("select * from user where id=1 ").addEntity(User.class);
45 List<User> list=sql.list();
46 System.out.println(list);
47
48 //5:提交事务
49 tx.commit();
50 //6:关闭事务和session
51 session.close();
52 sf.close();
53
54 }
55
56 }
演示如下所示:
为了美好明天,加油!!!