Pioneer.HengYu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一.Hibernate

hibernate是基于ORM映射的数据持久层框架,封装了DAO层

hibernate框架搭建步骤:

  1.引入jar包 11个
  2.添加hibernate的配置文件hibernate.cfg.xml
  3.建表 tab_customer表 id,name,des,age
  4.创建实体类 Customer类 id,name,des,age
  5.添加映射文件,建立持久化类和表的映射关系 *.hbm.xml
  6.测试

 

使用hibernate注解的方法配置映射信息需要引入:

ejb3-persistence.jar
hibernate-commons-annotations.jar
hibernate-annotations.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar

 

 

安装与配置hibernate(注解):
  hibernate.hbm.xml 文件中把引xxx.hbm.xml改为引用实体类即把:
  <mapping resource=“xxx.hbm.xml"/>
  改为:<mapping class=“xxx" />

eg:

    <mapping resource="com/edu/oid/Customer.hbm.xml" />

  改为<mapping class="com.edu.anno.Customer" />

 

持久化类中:

  @Entity    //表示当前类是一个持久化类 引的是javax.persistence中的Entity
  @Table(name="anno_cus")    //定义映射表的信息。name属性表示表名称

  @Id      //主键

  @Column(length=255,unique=true)    //其他字段  字段长度255,设置唯一约束

  @Transient    //该属性不会被映射

主键约束与唯一约束区别:

  一张表里只能有一个主键约束,可以有多个唯一约束,主键不能为空,而唯一可以为空

 1 package com.edu.anno;
 2 
 3 import javax.persistence.Column;
 4 import javax.persistence.Entity;
 5 import javax.persistence.Id;
 6 import javax.persistence.Table;
 7 import javax.persistence.Transient;
 8 
 9 
10 @Entity//表示当前类是一个持久化类
11 @Table(name="anno_cus")//定义映射表的信息。name属性表示表名称
12 public class Customer {
13 
14     @Id
15     private int id;
16     @Column(length=255,unique=true)
17     private String name;
18     @Transient//该属性不会被映射
19     private int age;
20     private String des;
21     public int getId() {
22         return id;
23     }
24     public void setId(int id) {
25         this.id = id;
26     }
27     //@Column
28     public String getName() {
29         return name;
30     }
31     public void setName(String name) {
32         this.name = name;
33     }
34     public int getAge() {
35         return age;
36     }
37     public void setAge(int age) {
38         this.age = age;
39     }
40     public String getDes() {
41         return des;
42     }
43     public void setDes(String des) {
44         this.des = des;
45     }
46     
47     
48 }

加载配置文件:

    Configuration cfg = new Configuration();
    cfg.configure("com/edu/anno/hibernate.cfg.xml");

改为  AnnotationConfiguration cfg = new AnnotationConfiguration();
    cfg.configure("com/edu/anno/hibernate.cfg.xml");



 

 

•需求:使用单元测试工具,测试hibernate 的增删改查(CRUD)操作

引包(11个)

日志处理引过来直接放在src下:

   log4j.properties

 1 ### direct log messages to stdout ###
 2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 3 log4j.appender.stdout.Target=System.out
 4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 5 log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
 6 
 7 ### direct messages to file hibernate.log ###
 8 #log4j.appender.file=org.apache.log4j.FileAppender
 9 #log4j.appender.file.File=hibernate.log
10 #log4j.appender.file.layout=org.apache.log4j.PatternLayout
11 #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
12 
13 ### set log levels - for more verbose logging change 'info' to 'debug' ###
14 
15 log4j.rootLogger=warn, stdout
16 
17 log4j.logger.org.hibernate=info
18 
19 ### log just the SQL
20 #log4j.logger.net.sf.hibernate.SQL=debug
21 
22 ### log JDBC bind parameters ###
23 log4j.logger.org.hibernate.type=info
24 
25 ### log schema export/update ###
26 log4j.logger.org.hibernate.tool.hbm2ddl=debug
27 
28 ### log cache activity ###
29 #log4j.logger.net.sf.hibernate.cache=debug
30 
31 ### enable the following line if you want to track down connection ###
32 ### leakages when using DriverManagerConnectionProvider ###
33 #log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trace

数据库表的字段与实体类属性在Customer.hbl.xml中配置映射

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6             <!-- table是表名,name是实体类属性名,column是字段名 -->
 7     <class name="com.edu.domain.Customer" table="tab_customer">
 8         <id name="id" column="id" type="integer">
 9             <!-- 主键生成策略 -->
10             <generator class="increment"/>
11         </id>
12             <!-- 配置普通属性 -->
13         <property name="name" column="name" type="string"/>
14         <property name="age" column="age" type="integer"/>
15         <property name="des"/>
16     </class>
17 </hibernate-mapping>

hibernate.cfg.xml映射配置

 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     <!-- 配置数据库连接的基本信息 -->
 8     <property name="hibernate.connection.driver_class">
 9         oracle.jdbc.driver.OracleDriver
10     </property>
11     <property name="hibernate.connection.url">
12         jdbc:oracle:thin:@localhost:1521:XE
13     </property>
14     <property name="hibernate.connection.username">lihengyu</property>
15     <property name="hibernate.connection.password">lihengyu</property>
16 
17     <!-- 数据库的方言 使用的是哪种数据库 -->
18     <property name="hibernate.dialect">
19         org.hibernate.dialect.Oracle10gDialect
20     </property>
21     <!-- 显示sql语句 -->
22     <property name="hibernate.show_sql">true</property>
23     <!-- 自动创建数据库表 
24             none:默认值  有表就使用,没表不创建
25             create:每次都创建新表
26             update: 有表就使用,没表创建。如果持久化类及映射文件发生改变,则发生alter语句修改表结构。
27     -->
28     <property name="hibernate.hbm2ddl.auto">update</property>
29     
30     <!-- 添加映射文件 -->
31     <mapping resource="com/edu/domain/Customer.hbm.xml" />
32 
33 </session-factory>
34 
35 
36 </hibernate-configuration>

实体类Customer

 1 package com.edu.domain;
 2 /**
 3  *  持久化类 映射 数据库中tab_customer表
 4  * @author Administrator
 5  *
 6  */
 7 public class Customer {
 8 
 9     private int id;
10     private String name;
11     private int age;
12     private String des;
13     public int getId() {
14         return id;
15     }
16     public void setId(int id) {
17         this.id = id;
18     }
19     public String getName() {
20         return name;
21     }
22     public void setName(String name) {
23         this.name = name;
24     }
25     public int getAge() {
26         return age;
27     }
28     public void setAge(int age) {
29         this.age = age;
30     }
31     public String getDes() {
32         return des;
33     }
34     public void setDes(String des) {
35         this.des = des;
36     }
37     
38     
39 }
  1 TestHibernate测试
  2 
  3 package com.edu.domain;
  4 
  5 import java.util.List;
  6 
  7 import org.hibernate.SessionFactory;
  8 import org.hibernate.Transaction;
  9 import org.hibernate.cfg.Configuration;
 10 import org.hibernate.classic.Session;
 11 import org.junit.Test;
 12 
 13 /**
 14  * 使用单元测试工具,测试hibernate 的增删改查(CRUD)操作
 15  * 
 16  * @author Administrator
 17  * 
 18  */
 19 public class TestHibernate {
 20 
 21     private static SessionFactory sf;
 22     static {
 23         // 1. 加载配置文件
 24         Configuration cfg = new Configuration();
 25         cfg.configure("com/edu/domain/hibernate.cfg.xml");
 26 
 27         // 2. 获得SessionFactory
 28         sf = cfg.buildSessionFactory();
 29     }
 30     
 31     /**
 32      *  用户保存
 33      */
 34     @Test
 35     public void save() {
 36         
 37         Session session = sf.openSession();
 38         Transaction tran = session.beginTransaction();
 39         
 40         Customer c = new Customer();
 41         c.setName("tom1");
 42         c.setAge(12);
 43         c.setDes("cat");
 44         
 45         session.save(c);
 46         
 47         tran.commit();
 48         session.close();
 49     }
 50     /**
 51      *  按id查询用户
 52      */
 53     @Test
 54     public void findById() {
 55         
 56         Session session = sf.openSession();
 57         Transaction tran = session.beginTransaction();
 58         
 59         Customer c = (Customer) session.get(Customer.class, 2);
 60         System.out.println(c.getName());
 61         
 62         tran.commit();
 63         session.close();
 64     }
 65     /**
 66      *  删除客户
 67      */
 68     @Test
 69     public void delete() {
 70         
 71         Session session = sf.openSession();
 72         Transaction tran = session.beginTransaction();
 73         
 74         Customer c = (Customer) session.get(Customer.class, 3);
 75 
 76         session.delete(c);
 77         
 78         tran.commit();
 79         session.close();
 80     }
 81     
 82     /**
 83      *  编辑客户
 84      */
 85     @Test
 86     public void update() {
 87         
 88         Session session = sf.openSession();
 89         Transaction tran = session.beginTransaction();
 90         
 91         Customer c = (Customer) session.get(Customer.class, 2);
 92         
 93         c.setName("松江");
 94         
 95         session.update(c);
 96         
 97         tran.commit();
 98         session.close();
 99     }
100     /**
101      *  查询所有客户
102      */
103     @Test
104     public void findAll() {
105         
106         Session session = sf.openSession();
107         Transaction tran = session.beginTransaction();
108         
109         List<Customer> cs = session.createQuery(
110                     "from Customer").list();
111         
112         for (Customer c : cs) {
113             System.out.println(c.getName());
114         }
115         
116         tran.commit();
117         session.close();
118     }
119 }

运行结果

 

posted on 2017-04-01 02:20  Pioneer.HengYu  阅读(354)  评论(0编辑  收藏  举报