使用hibernate利用实体类生成表和利用表生成实体类

1,配置数据库,这里以oracle数据库为例。点击右侧Database图标:

展开后选择oracle

将SID下拉框打开选择Service Name,之后按自己的数据库信息填写就可以了

可以点击Schemas选择连接的数据库,一般情况下我们就选择当前连接的数据库就好了(Current Schema),配置完成展开就可以看到当前数据库

2,根据数据库中的表在我们的项目中生成实体类。在Tool Windows中点击Persistance,打开持久化窗口,右键持久化窗口中的项目名称:

右键项目

点击从数据库中生成映射,显示

点击某个表,选择包,点击OK就可以生成实体类了。然后再将生成的实体类写到hibernate的配置文件中,写在配置的sessionFactory的bean的标签内。这里有两种方式:

第一种,逐个类添加:

1     <!-- 扫描单个class-->
2         <property name="annotatedClasses">
3         <list>
4             <value>com.example.pojo.Message</value>
5         </list>

第二种,直接扫描整个包,将包下所有的实体类都配置进去:

1 <!--扫描整个package,加载整个包下的class-->
2         <property name="packagesToScan">
3             <list>
4                 <value>com.example.pojo</value>
5             </list>
6         </property>

配置完之后,我们就可以利用hibernate的session工厂生成的session对这个表进行操作了:

1 public Message findMessageById(String id) {
2         //实例化Configuration,这行代码默认加载hibernate.cfg.xml文件
3         //String hql = "FROM  Message where id = ?";
4         String hql = "FROM  Message where id = ?";
5         Query query = getSession().createQuery(hql).setString(0,id);
6         Message message = (Message) query.uniqueResult();
7         return message;
8     }

2,利用写好的实体类和xx.hbm.xml文件生成数据库表,我们正常定义一个model:

 1 package com.example.pojo;
 2 
 3 import org.hibernate.annotations.Entity;
 4 
 5 @Entity
 6 public class Book {
 7     private Integer id;
 8     private String bookName;
 9     private String isbn;
10     private int price;
11     private int stock;
12 
13     public Book(Integer id,String bookName,String isbn,int price,int stock){
14         super();
15         this.id = id;
16         this.bookName = bookName;
17         this.isbn = isbn;
18         this.price = price;
19         this.stock = stock;
20     }
21 
22     public Book() {
23     }
24 
25     public Integer getId() {
26         return id;
27     }
28 
29     public void setId(Integer id) {
30         this.id = id;
31     }
32 
33     public String getBookName() {
34         return bookName;
35     }
36 
37     public void setBookName(String bookName) {
38         this.bookName = bookName;
39     }
40 
41     public String getIsbn() {
42         return isbn;
43     }
44 
45     public void setIsbn(String isbn) {
46         this.isbn = isbn;
47     }
48 
49     public int getPrice() {
50         return price;
51     }
52 
53     public void setPrice(int price) {
54         this.price = price;
55     }
56 
57     public int getStock() {
58         return stock;
59     }
60 
61     public void setStock(int stock) {
62         this.stock = stock;
63     }
64 }

然后添加一个book.hmb.xml,相当于映射文件,用于hibernate读取生成数据库表的以及对应字段与属性直接的关联:

 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 2016-3-15 16:30:05 by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping>
 6     <class name="com.example.pojo.Book" table="BOOK">
 7         <id name="id" type="java.lang.Integer">
 8             <column name="ID" />
 9             <generator class="native" />
10         </id>
11         <property name="bookName" type="java.lang.String">
12             <column name="BOOK_NAME" />
13         </property>
14         <property name="isbn" type="java.lang.String">
15             <column name="ISBN" />
16         </property>
17         <property name="price" type="int">
18             <column name="PRICE" />
19         </property>
20         <property name="stock" type="int">
21             <column name="STOCK" />
22         </property>
23     </class>
24 </hibernate-mapping>

然后将映射文件配置到hibernate配置文件的sessionFactory中:

1 <property name="mappingResources">
2         <array>
3             <value>com/example/dao/orm/Book.hbm.xml</value>
4         </array>
5    </property>

重启程序就会生成名为Book的表了,这里要注意一下的就是我们在hibernate配置文件中配置的数据库属性<property name="hbm2ddl.auto">update</property> 
我的配置如下:

create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失。update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表;如果表里缺少列,则自动添加列。

none:不会对数据库进行任何操作。

所以我们一般要对数据库有操作时,就选择update,如果不需要生成表或者表数据不需要改动的情况下,我们就配置none,特定开发情况下用create。

 

posted @ 2017-10-31 16:45  晴朗依旧  阅读(1193)  评论(0编辑  收藏  举报