hibernate添加数据入门小案例

Posted java小斌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate添加数据入门小案例相关的知识,希望对你有一定的参考价值。

1.建立一个java项目,在目录下新建一个lib文件夹引入hibernate架包如图所示:

2. 新建com.LHB.domain包,在包中分别创建一个Employee.java和Employee.hbm.xml文件,

Employee.java中的代码如下:

 1 package com.LHB.domain;
 2 
 3 import java.util.Date;
 4 //该pojo/javabean/domain按照规范应当序列化,目的是可以唯一的表示该对象呢,同时可以在网络和文件传输
 5 public class Employee implements java.io.Serializable {
 6     private static final long serialVersionUID = 1L;
 7     private Integer id;
 8     private String name;
 9     private String email;
10     private Date hiredate;
11     public Integer getId() {
12         return id;
13     }
14     public void setId(Integer id) {
15         this.id = id;
16     }
17     public String getName() {
18         return name;
19     }
20     public void setName(String name) {
21         this.name = name;
22     }
23     public String getEmail() {
24         return email;
25     }
26     public void setEmail(String email) {
27         this.email = email;
28     }
29     public Date getHiredate() {
30         return hiredate;
31     }
32     public void setHiredate(Date hiredate) {
33         this.hiredate = hiredate;
34     }
35     
36 }

Employee.hbm.xml映射文件配置如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!-- 映射文件通过DTD来指定格式 -->
 3 <!DOCTYPE hibernate-mapping PUBLIC 
 4     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 5     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 6 <!-- 该文件用于配置domain对象和表的映射关系 -->
 7 <hibernate-mapping package="com.LHB.domain">
 8     <class name="Employee" table="employee" >
 9         <!-- id元素用于指定主键属性 -->
10         <!-- 
11         <id name="id" column="id" type="java.lang.Integer">
12             该元素用来指定主键生成的策略hilo native increment sequence uuid
13             <generator class="sequence">
14                 <param name="sequence">emp_seq</param>
15             </generator>
16         </id>
17          -->
18          <!-- 在更改数据库时对主键生成策略做了修改 -->
19          <id name="id" column="id" type="java.lang.Integer">
20              <generator class="increment"></generator>
21          </id> 
22         <!-- 如果id号希望用户自己设定,而不是由数据库mysql -->
23        <!--  <id name="id" column="id" type="java.lang.Integer">
24             <generator class="assigned"/>
25         </id> -->
26         <!-- 对其它属性还要配置 -->
27         <property name="name" type="java.lang.String">
28             <column name="name" not-null="false"  />
29         </property>
30         <property name="email" type="java.lang.String">
31             <column name="email" not-null="false" />
32         </property>
33         <property name="hiredate" type="java.util.Date">
34             <column name="hiredate" not-null="false" />
35         </property>
36     </class>
37     
38 
39 </hibernate-mapping>

 

 

3.在项目src文件下创建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 
 6 <hibernate-configuration>
 7     <session-factory>
 8         <!-- 配置使用的driver -->
 9         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
10         <property name="connection.username">root</property>
11         <property name="connection.password">123456</property>
12         <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
13         <!-- 配置dialect方言,明确告诉hibernate连接哪种数据库 -->
14         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
15         <!-- 显示出对应的sql语句 -->
16         <property name="show_sql">true</property>
17         <!-- 让hibernate给我们自动创建表  creat:如果mysql中没有该表则创建,如果有表则删除再创建
18              update:如果没有表则创建新表,如果有表则看表结构有没有变化,如果有变化则创建新表-->
19         <property name="hbm2ddl.auto">update</property>
20         <!-- 指定管理的对象映射文件 -->
21         <mapping resource="com/LHB/domain/Employee.hbm.xml"/>
22         
23     </session-factory>
24 </hibernate-configuration>

 

4. 创建一个测试类TestMain

  1 package com.LHB.view;
  2 
  3 import java.util.Date;
  4 
  5 import org.hibernate.SessionFactory;
  6 import org.hibernate.Transaction;
  7 import org.hibernate.cfg.Configuration;
  8 import org.hibernate.classic.Session;
  9 
 10 import com.LHB.domain.Employee;
 11 import com.LHB.util.MySessionFactory;
 12 
 13 public class TestMain {
 14 
 15     public static void main(String[] args) {
 16         // TODO Auto-generated method stub
 17 
 18         updateEmp();
 19         //addEmployee();
 20     }
 21     /**
 22      * 删除用户
 23      */
 24     private static void delEmp() {
 25         //删除
 26         //获取一个session
 27         Session session = MySessionFactory.getSessionFactory().openSession();
 28         Transaction transaction = session.beginTransaction();
 29         try {
 30             //修改1.先获取该雇员,然后删除
 31             Employee employee=(Employee) session.load(Employee.class, new Integer(3));
 32             session.delete(employee);
 33             transaction.commit();
 34             session.close();
 35             
 36         }catch (Exception e) {
 37             if(transaction!=null) {
 38                 transaction.rollback();
 39             }
 40             
 41             throw new RuntimeException(e.getMessage());
 42         } finally {
 43             //关闭session
 44             if(session!=null&&session.isOpen()) {
 45                 session.close();
 46             }
 47             
 48         }
 49     }
 50     /**
 51      * 更新用户
 52      */
 53     private static void updateEmp() {
 54         //修改用户
 55         //获取一个会话
 56         /*Session session = MySessionFactory.getSessionFactory().openSession();
 57         
 58         Transaction transaction = session.beginTransaction();
 59         //修改用户1.获取要修改的用户,2.修改
 60         //load是可以通过主键属性,获取该对象实例,《----》表的记录对应
 61         Employee employee = (Employee)session.load(Employee.class, new Integer(3));
 62         employee.setName("张三");
 63         transaction.commit();
 64         session.close();
 65         */
 66         //添加事务回滚优化之后
 67         Session session = MySessionFactory.getSessionFactory().openSession();
 68         Transaction transaction = null;
 69         try {
 70             transaction = session.beginTransaction();
 71             //do...
 72             Employee employee = (Employee)session.load(Employee.class, new Integer(1));
 73             //用户指定id号
 74             //employee.setId(new Integer(100));
 75             employee.setName("李四");
 76             employee.setEmail("lisi@sohu.com");
 77             
 78             /*//异常
 79             int i=9/0;
 80             //....
 81 */            transaction.commit();
 82             
 83             
 84         }catch (Exception e) {
 85             if(transaction!=null) {
 86                 transaction.rollback();
 87             }
 88             
 89             throw new RuntimeException(e.getMessage());
 90         } finally {
 91             //关闭session
 92             if(session!=null&&session.isOpen()) {
 93                 session.close();
 94             }
 95             
 96         }
 97         
 98         
 99     }
100     /**
101      * 添加用户
102      */
103     public static void addEmployee() {
104         //使用hibernate完成crud操作
105         //现在不使用service,直接测试
106         //1.创建Configuration,该对象用于读取hibernate.cfg.xml并完成初始化
107         Configuration configuration = new Configuration().configure();
108         //2.创建SessionFactory【这是一个会话工厂,是一个重量级的对象】
109         SessionFactory sessionFactory = configuration.buildSessionFactory();
110         //3.创建Session,相当于jdbc中的Connection
111         Session  session = sessionFactory.openSession();
112         //4.对于hibernate,要求在进行增加,删除,修改的时候使用事物提交
113         Transaction transaction = session.beginTransaction();
114         
115         try {
116             
117             //添加一个雇员
118             Employee employee = new Employee();
119             employee.setName("zhangsan");
120             employee.setEmail("zhangsan@126.com");
121             employee.setHiredate(new Date());
122             
123             //保存,把对象保存到数据库
124             session.save(employee);//相当于insert into....[被hibernate封装]
125             transaction.commit();
126             session.close();
127             
128         }catch (Exception e) {
129             if(transaction!=null) {
130                 transaction.rollback();
131             }
132             
133             throw new RuntimeException(e.getMessage());
134         } finally {
135             //关闭session
136             if(session!=null&&session.isOpen()) {
137                 session.close();
138             }
139             
140         }
141     }
142 
143 }

 

以上是关于hibernate添加数据入门小案例的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate 入门小案例

Hibernate介绍和入门案例

Hibernate入门配置案例

Hibernate入门案例

hibernate 入门案例

Hibernate入门案例及增删改查