温故知新:hibernate_01感受基本使用

作为一个ORM框架,hibernate对JDBC进行了轻量级的封装,使得我们在开发时能够把更多的精力放在业务实现上,不过这毕竟是一把双刃剑,在提供了方便的同时,也降低了程序员理解数据库、SQL语句的门槛,所以在平时,还是需要花一些时间在数据库上,至少是SQL上。下面记录的是平时学习,工作中可能用到的一些技术点,或者心得,记录下来,以备查看。

先交代一下和使用环境相关的信息
IDE:Eclipse Kepler Service Release 2
Mysql:5.0.96
使用Maven构建测试项目,所需依赖如下(在实际的使用中,可能涉及更多的依赖,尤其在框架间整合时)
 1     <!-- 方便书写测试案例 -->
 2     <dependency>
 3       <groupId>junit</groupId>
 4       <artifactId>junit</artifactId>
 5       <version>3.8.1</version>
 6       <scope>test</scope>
 7     </dependency>
 8     
 9     <!-- hibernate相关依赖 -->
10     <dependency>
11         <groupId>org.hibernate</groupId>
12         <artifactId>hibernate-entitymanager</artifactId>
13         <version>4.3.5.Final</version>
14     </dependency>
15     
16     <!-- log4j相关依赖 -->
17     <dependency>
18         <groupId>log4j</groupId>
19         <artifactId>log4j</artifactId>
20         <version>1.2.16</version>
21     </dependency>
22 
23     <!-- Mysql驱动依赖 -->
24     <dependency>
25         <groupId>mysql</groupId>
26         <artifactId>mysql-connector-java</artifactId>
27         <version>5.1.6</version>
28     </dependency>
单独使用hibernate时,需要为其指定一个创建sessionFactory的配置文件hibernate.cfg.xml,常规内容如下,放置于项目classpath下
 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 name="sessionFactory">
 7         <!-- 驱动类 -->
 8         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
 9         <!-- 连接字符串 -->
10         <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_begin</property>
11         <property name="hibernate.connection.username">root</property>
12         <property name="hibernate.connection.password">root</property>
13         <!-- 数据库对应方言 -->
14         <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
15         <!-- 实体类自动生成数据表 -->
16         <property name="hibernate.hbm2ddl.auto">update</property>
17         <!-- 控制台显示SQL语句 -->
18         <property name="show_sql">true</property>
19         <!-- 实体类相关XML文件 -->
20         <mapping resource="domain/Student.hbm.xml"/>
21     </session-factory>
22 </hibernate-configuration>
23 
配置完毕之后,我们只需通过sessionFactory来获取session,之后通过session对数据库进行操作即可,通常来说,项目中会把sessionFactory的获取写进一个工具类中,通过工具类获取session,如下
 1 package util;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.boot.registry.StandardServiceRegistry;
 6 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
 7 import org.hibernate.cfg.Configuration;
 8 
 9 /**
10  * Hibernate工具类,用于通过配置文件构建session工厂,通过工厂返回session
11  * @author Alvin Du
12  *
13  */
14 public class HibernateUtil {
15     //SessionFactory是线程安全的,对资源占用较高,一般需要定义为单例的
16     private static final SessionFactory FACTORY = buildSessionFactory();
17 
18     private static SessionFactory buildSessionFactory() {
19         
20         Configuration configuration = new Configuration().configure();
21         //hibernate 4中使用standardServiceRegistryBuilder创建standardServiceRegistry
22         StandardServiceRegistryBuilder standardServiceRegistryBuilder =
23                 new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
24         StandardServiceRegistry standardServiceRegistry = standardServiceRegistryBuilder.build();
25         SessionFactory sessionFactory = configuration.buildSessionFactory(standardServiceRegistry);
26         
27         return sessionFactory;
28     }
29 
30     /**
31      * 获取工厂
32      * @return the factory
33      */
34     public static SessionFactory getFactory() {
35         return FACTORY;
36     }
37     
38     /**
39      * 获取hibernate session
40      * @return
41      */
42     public static Session openSession(){
43         return FACTORY.openSession();
44     }
45     
46     /**
47      * 关闭hibernate session
48      * @param session
49      */
50     public static void closeSession(Session session){
51         if(session !=null){
52             session.close();
53         }
54     }
55 
56 }
57 
之后,我们需要为hibernate配置实体类和表的映射,此处为演示,一切从简,定义Student实体类和对应的hbm配置文件,类和hbm一般习惯放置于同一个包下
(表和实体类之间的映射还可以使用注解的方式进行配置,后续会再记录)
Student.java
 1 package domain;
 2 
 3 public class Student {
 4 
 5     private int id;
 6     private String name;
 7     private String grade;
 8     //get/set方法和构造器省略,但是实际不可不写
 9 
10 }
11 
Student.hbm.xml
 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 <hibernate-mapping>
 5     <!-- 配置类名和表的对应 -->
 6     <class name="domain.Student" table="STUDENT">
 7         <!-- 字段和属性之间的对应 -->
 8         <id name="id" type="int">
 9             <column name="ID" />
10             <generator class="native" />
11         </id>
12         <property name="name" type="java.lang.String">
13             <column name="NAME" />
14         </property>
15         <property name="grade" type="java.lang.String">
16             <column name="GRADE" />
17         </property>
18     </class>
19 </hibernate-mapping>
20 
至此,环境的搭建就告一段落,书写测试类进行测试
 1 package demo;
 2 
 3 import java.util.List;
 4 
 5 import org.hibernate.Session;
 6 import org.junit.Test;
 7 
 8 import domain.Student;
 9 import util.HibernateUtil;
10 
11 public class App 
12 {
13     @Test
14     public void addTest() {
15         //session使用结束之后注意记得释放资源
16         Session session = null;
17         try {
18             //一般使用,考虑采用如下写法
19             session = HibernateUtil.openSession();
20             //开启事物
21             session.beginTransaction();
22             
23             Student stu1 = new Student();
24             stu1.setName("小明");
25             stu1.setGrade("一");
26             session.save(stu1);
27             
28             Student stu2 = new Student();
29             stu2.setName("小红");
30             stu2.setGrade("二");
31             session.save(stu2);
32             
33             session.getTransaction().commit();
34             
35         } catch (Exception e) {
36             //异常时回滚事物
37             if (session != null) {
38                 session.getTransaction().rollback();
39             }
40         } finally{
41             if (session != null) {
42                 session.close();
43             }
44         }
45     }
46     
47 }
48     
49 
以上就是hibernate最简单的使用

posted on 2015-01-18 20:43 都较瘦 阅读(86) 评论(0)  编辑  收藏 所属分类: ORMFramework


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

公告

博客定位:囿于目前的水平,博客定位在记录自己的学习心得和随手的练习

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜