(六)Hibernate 映射类型

所有项目导入对应的hibernate的jar包、mysql的jar包和添加每次都需要用到的HibernateUtil.java

第一节:基本类型映射

例子:

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://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5
 6 <hibernate-configuration>
 7
 8     <session-factory>
 9
10         <!--数据库连接设置 -->
11         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
12         <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
13         <property name="connection.username">root</property>
14         <property name="connection.password">123456</property>
15
16
17         <!-- 方言 -->
18         <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
19
20         <!-- 控制台显示SQL -->
21         <property name="show_sql">true</property>
22
23         <!-- 自动更新表结构 -->
24         <property name="hbm2ddl.auto">update</property>
25
26           <mapping resource="com/wishwzp/model/Student.hbm.xml"/>
27
28           <mapping resource="com/wishwzp/model/Book.hbm.xml"/>
29
30     </session-factory>
31
32 </hibernate-configuration>

Book.java

 1 package com.wishwzp.model;
 2
 3 import java.sql.Blob;
 4 import java.util.Date;
 5
 6 public class Book {
 7
 8     private int id;
 9     private String bookName; // 图书名称
10     private float price; // 图书价格
11     private boolean specialPrice; // 是否是特价
12     private Date publishDate; // 发布日期
13     private String author; // 作者
14     private String introduction; // 简介
15     private Blob bookPic; // 图书图片
16
17     public int getId() {
18         return id;
19     }
20     public void setId(int id) {
21         this.id = id;
22     }
23     public String getBookName() {
24         return bookName;
25     }
26     public void setBookName(String bookName) {
27         this.bookName = bookName;
28     }
29     public float getPrice() {
30         return price;
31     }
32     public void setPrice(float price) {
33         this.price = price;
34     }
35     public boolean isSpecialPrice() {
36         return specialPrice;
37     }
38     public void setSpecialPrice(boolean specialPrice) {
39         this.specialPrice = specialPrice;
40     }
41     public Date getPublishDate() {
42         return publishDate;
43     }
44     public void setPublishDate(Date publishDate) {
45         this.publishDate = publishDate;
46     }
47     public String getAuthor() {
48         return author;
49     }
50     public void setAuthor(String author) {
51         this.author = author;
52     }
53     public String getIntroduction() {
54         return introduction;
55     }
56     public void setIntroduction(String introduction) {
57         this.introduction = introduction;
58     }
59     public Blob getBookPic() {
60         return bookPic;
61     }
62     public void setBookPic(Blob bookPic) {
63         this.bookPic = bookPic;
64     }
65
66
67
68 }

Book.hbm.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.wishwzp.model">
 7
 8     <class name="Book" table="t_book">
 9         <id name="id" column="bookId">
10             <generator class="native"></generator>
11         </id>
12
13         <property name="bookName" column="bookName" length="40"></property>
14         <property name="price" column="price" type="float"></property>
15         <property name="specialPrice" column="specialPrice" type="boolean"></property>
16         <property name="publishDate" column="publishDate" type="date"></property>
17         <property name="author" column="author" length="20"></property>
18         <property name="introduction" column="introduction" type="text"></property>
19         <property name="bookPic" column="bookPic" type="blob"></property>
20     </class>
21
22 </hibernate-mapping>

BookTest.java

 1 package com.wishwzp.service;
 2
 3 import java.io.FileInputStream;
 4 import java.io.InputStream;
 5 import java.sql.Blob;
 6 import java.text.SimpleDateFormat;
 7
 8 import org.hibernate.LobHelper;
 9 import org.hibernate.Session;
10 import org.hibernate.SessionFactory;
11
12 import com.wishwzp.model.Book;
13 import com.wishwzp.util.HibernateUtil;
14
15 public class BookTest {
16
17     public static void main(String[] args) throws Exception{
18         SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
19         Session session=sessionFactory.openSession(); // 生成一个session
20         session.beginTransaction(); // 开启事务
21
22         Book book=new Book();
23         book.setBookName("java编程思想");
24         book.setPrice(100);
25         book.setSpecialPrice(true);
26         book.setPublishDate(new SimpleDateFormat("yyyy-MM-dd").parse("2013-1-1"));
27         book.setAuthor("埃克尔");
28         book.setIntroduction("简介...");
29
30         //
31         LobHelper lobHelper=session.getLobHelper();
32         InputStream in=new FileInputStream("c://java编程思想.jpg");
33         Blob bookPic=lobHelper.createBlob(in, in.available());
34         book.setBookPic(bookPic);
35
36         session.save(book);
37
38         session.getTransaction().commit(); // 提交事务
39         session.close(); // 关闭session
40
41     }
42 }

HibernateUtil.java

 1 package com.wishwzp.util;
 2
 3 import org.hibernate.SessionFactory;
 4 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
 5 import org.hibernate.cfg.Configuration;
 6 import org.hibernate.service.ServiceRegistry;
 7
 8 /**
 9  *
10  * hibernate封装
11  * @author wishwzp
12  *
13  */
14 public class HibernateUtil {
15
16     private static final SessionFactory sessionFactory=buildSessionFactory();
17
18     /**
19      * 绑定SessionFactory
20      * @return
21      */
22     private static SessionFactory buildSessionFactory(){
23         // 实例化配置文件
24         Configuration configuration=new Configuration().configure();
25         // 实例化服务登记
26         ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
27         //获取Session工厂
28         return configuration.buildSessionFactory(serviceRegistry);
29     }
30
31     public static SessionFactory getSessionFactory(){
32         return sessionFactory;
33     }
34 }

第二节:集合类型映射

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://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5
 6 <hibernate-configuration>
 7
 8     <session-factory>
 9
10         <!--数据库连接设置 -->
11         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
12         <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
13         <property name="connection.username">root</property>
14         <property name="connection.password">123456</property>
15
16
17         <!-- 方言 -->
18         <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
19
20         <!-- 控制台显示SQL -->
21         <property name="show_sql">true</property>
22
23         <!-- 自动更新表结构 -->
24         <property name="hbm2ddl.auto">update</property>
25
26           <mapping resource="com/wishwzp/model/Student.hbm.xml"/>
27           <mapping resource="com/wishwzp/model/Student2.hbm.xml"/>
28           <mapping resource="com/wishwzp/model/Student3.hbm.xml"/>
29           <mapping resource="com/wishwzp/model/Student4.hbm.xml"/>
30
31     </session-factory>
32
33 </hibernate-configuration>

1,Set 无序元素不可重复

Student.java

 1 package com.wishwzp.model;
 2
 3 import java.util.Set;
 4
 5 public class Student {
 6
 7     private long id;
 8     private String name;
 9     private Set<String> images;
10
11     public long getId() {
12         return id;
13     }
14     public void setId(long 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 Set<String> getImages() {
24         return images;
25     }
26     public void setImages(Set<String> images) {
27         this.images = images;
28     }
29
30
31
32
33 }

Student.hbm.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.wishwzp.model">
 7
 8     <class name="Student" table="t_student">
 9         <id name="id" column="stuId">
10             <generator class="native"></generator>
11         </id>
12
13         <property name="name" column="stuName"></property>
14
15         <set name="images" table="t_image">
16             <key column="studentId"></key>
17             <element column="imageName" type="string"></element>
18         </set>
19     </class>
20
21 </hibernate-mapping>

2,List 有序元素可重复

Studnet2.java

 1 package com.wishwzp.model;
 2
 3 import java.util.List;
 4
 5 public class Student2 {
 6
 7     private long id;
 8     private String name;
 9     private List<String> images;
10
11     public long getId() {
12         return id;
13     }
14     public void setId(long 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 List<String> getImages() {
24         return images;
25     }
26     public void setImages(List<String> images) {
27         this.images = images;
28     }
29
30 }

Student2.hbm.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.wishwzp.model">
 7
 8     <class name="Student2" table="t_student">
 9         <id name="id" column="stuId">
10             <generator class="native"></generator>
11         </id>
12
13         <property name="name" column="stuName"></property>
14
15         <list name="images" table="t_image2">
16             <key column="studentId"></key>
17             <list-index column="imageIndex"></list-index>
18             <element column="imageName" type="string"></element>
19         </list>
20     </class>
21
22 </hibernate-mapping>

3,Bag 无序元素可重复

Student3.java

 1 package com.wishwzp.model;
 2
 3 import java.util.List;
 4
 5 public class Student3 {
 6
 7     private long id;
 8     private String name;
 9     private List<String> images;
10
11     public long getId() {
12         return id;
13     }
14     public void setId(long 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 List<String> getImages() {
24         return images;
25     }
26     public void setImages(List<String> images) {
27         this.images = images;
28     }
29
30 }

Student3.hbm.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.wishwzp.model">
 7
 8     <class name="Student3" table="t_student">
 9         <id name="id" column="stuId">
10             <generator class="native"></generator>
11         </id>
12
13         <property name="name" column="stuName"></property>
14
15         <idbag name="images" table="t_image3">
16             <collection-id type="long" column="imageId">
17                 <generator class="increment"></generator>
18             </collection-id>
19             <key column="studentId"></key>
20             <element column="imageName" type="string"></element>
21         </idbag>
22
23
24     </class>
25
26 </hibernate-mapping>

4,Map 键值对

Student4.java

 1 package com.wishwzp.model;
 2
 3 import java.util.Map;
 4
 5 public class Student4 {
 6
 7     private long id;
 8     private String name;
 9     private Map<String,String> images;
10
11     public long getId() {
12         return id;
13     }
14     public void setId(long 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 Map<String, String> getImages() {
24         return images;
25     }
26     public void setImages(Map<String, String> images) {
27         this.images = images;
28     }
29
30 }

Student4.hbm.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.wishwzp.model">
 7
 8     <class name="Student4" table="t_student">
 9         <id name="id" column="stuId">
10             <generator class="native"></generator>
11         </id>
12
13         <property name="name" column="stuName"></property>
14
15         <map name="images" table="t_image4">
16             <key column="studentId"></key>
17             <map-key column="imageKey" type="string"></map-key>
18             <element column="imageName" type="string"></element>
19         </map>
20
21
22     </class>
23
24 </hibernate-mapping>

上面4种情况的总测试类:

StudentTest.java

  1 package com.wishwzp.service;
  2
  3 import java.util.ArrayList;
  4 import java.util.HashMap;
  5 import java.util.HashSet;
  6 import java.util.Iterator;
  7 import java.util.List;
  8 import java.util.Map;
  9 import java.util.Set;
 10
 11 import org.hibernate.Session;
 12 import org.hibernate.SessionFactory;
 13 import org.junit.After;
 14 import org.junit.Before;
 15 import org.junit.Test;
 16
 17 import com.wishwzp.model.Student;
 18 import com.wishwzp.model.Student2;
 19 import com.wishwzp.model.Student3;
 20 import com.wishwzp.model.Student4;
 21 import com.wishwzp.util.HibernateUtil;
 22
 23 public class StudentTest {
 24
 25     private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
 26     private Session session;
 27
 28     @Before
 29     public void setUp() throws Exception {
 30         session=sessionFactory.openSession(); // 生成一个session
 31         session.beginTransaction(); // 开启事务
 32     }
 33
 34     @After
 35     public void tearDown() throws Exception {
 36          session.getTransaction().commit(); // 提交事务
 37          session.close(); // 关闭session
 38     }
 39
 40     //1、Set 无序元素不可重复
 41     @Test
 42     public void testSetSave(){
 43         Set<String> imageSet=new HashSet<String>();
 44         imageSet.add("image1.png");
 45         imageSet.add("image2.png");
 46         imageSet.add("image3.png");
 47         imageSet.add("image3.png");//这里有重复,但在数据库里面只有一个image3.png并且是无序的。。。所以set元素不可重复
 48
 49         Student s1=new Student();
 50         s1.setImages(imageSet);
 51         session.save(s1);
 52     }
 53
 54     //打印出来Student表id为1的images表的所有image信息
 55     @Test
 56     public void testSetFetch(){
 57         Student student=(Student)session.get(Student.class, Long.valueOf(1));
 58         Iterator it=student.getImages().iterator();
 59         while(it.hasNext()){
 60             System.out.println(it.next());
 61         }
 62     }
 63
 64     //2、List 有序元素可重复
 65     @Test
 66     public void testListSave(){
 67         List<String> imageList=new ArrayList<String>();
 68         imageList.add("image1.png");
 69         imageList.add("image2.png");
 70         imageList.add("image3.png");
 71         imageList.add("image3.png");//这里有重复,数据库里面也可以有两个image3.png并且是有序的。。。所以list元素可重复
 72
 73         Student2 s2=new Student2();
 74         s2.setImages(imageList);
 75         session.save(s2);
 76     }
 77
 78     //打印出来Student表id为1的images表的所有image信息
 79     @Test
 80     public void testListFetch(){
 81         Student2 student2=(Student2)session.get(Student2.class, Long.valueOf(2));
 82         Iterator it=student2.getImages().iterator();
 83         while(it.hasNext()){
 84             System.out.println(it.next());
 85         }
 86     }
 87
 88     //3、Bag 无序元素可重复
 89     @Test
 90     public void testBagSave(){
 91         List<String> imageList=new ArrayList<String>();
 92         imageList.add("image1.png");
 93         imageList.add("image2.png");
 94         imageList.add("image3.png");
 95         imageList.add("image3.png");//这里有重复,数据库里面也有两个image3.png而且是无序的。。。所以Bag 无序元素可重复
 96
 97         Student3 s3=new Student3();
 98         s3.setImages(imageList);
 99         session.save(s3);
100     }
101
102
103     @Test
104     public void testBagFetch(){
105         Student3 student3=(Student3)session.get(Student3.class, Long.valueOf(3));
106         Iterator it=student3.getImages().iterator();
107         while(it.hasNext()){
108             System.out.println(it.next());
109         }
110     }
111
112     //4、Map 键值对
113     @Test
114     public void testMapSave(){
115         Map<String,String> imageMap=new HashMap<String,String>();
116         imageMap.put("i1", "image1.png");
117         imageMap.put("i2", "image2.png");
118         imageMap.put("i3", "image3.png");
119         imageMap.put("i4", "image4.png");//这里都是键值对的
120
121         Student4 s4=new Student4();
122         s4.setImages(imageMap);
123         session.save(s4);
124     }
125
126
127     @Test
128     public void testMapFetch(){
129         Student4 student4=(Student4)session.get(Student4.class, Long.valueOf(4));
130         Map<String,String> imageMap=student4.getImages();
131         Set keys=imageMap.keySet();
132         Iterator it=keys.iterator();
133         while(it.hasNext()){
134             String key=(String)it.next();
135             System.out.println(key+":"+imageMap.get(key));
136         }
137     }
138
139 }

结果显示:

1,Set 无序元素不可重复

testSetSave()方法:





testSetFech()方法:

2,List 有序元素可重复

testListSave()方法:





testListFech()方法:

3,Bag 无序元素可重复

testBagSave()方法:





testBagFech()方法:

4,Map 键值对

testMapSave()方法:





testMapFech()方法:

所有表之间的关系:

时间: 2024-10-11 20:39:19

(六)Hibernate 映射类型的相关文章

3.Hibernate 映射类型

映射类型 当你准备一个 Hibernate 映射文件时,我们已经看到你把 Java 数据类型映射到了 RDBMS 数据格式.在映射文件中已经声明被使用的 types 不是 Java 数据类型:它们也不是 SQL 数据库类型.这种类型被称为 Hibernate 映射类型,可以从 Java 翻译成 SQL,反之亦然. 在这一章中列举出所有的基础,日期和时间,大型数据对象,和其它内嵌的映射数据类型. 原始类型 映射类型 Java 类型 ANSI SQL 类型 integer int 或 java.la

Hibernate映射类型(转)

Hibernate映射类型分为两种:内置映射类型和客户化映射类型.内置映射类型负责把一些常见的Java类型映射到相应的SQL类型:此外,Hibernate还允许用户实现UserType或CompositeUserType接口,来灵活地定制客户化映射类型.客户化类型能够把用户定义的Java类型映射到数据库表的相应字段. 一.Hibernate的内置映射类型 1.Java基本类型的Hibernate映射类型 Hibernate映射类型 Java类型 标准SQL类型 大小和取值范围 integer或者

oracle字段 Hibernate映射类型 java类型

oracle字段 Hibernate映射类型 java类型 number big_decimal java.math.BigDecimal number(1) boolean Boolean number(2)2至4之间 byte Byte number(8)4至8之间 integer Integer numbernumber(10)8以上 long Long

hibernate的映射类型

hibernate的映射类型 hibernate MySQL映射类型 1.Hibernate的映射类型 hibernate mysql映射类型 Hibernate 映射类型 Java 类型 标准 SQL 类型 大小和取值范围 integer 或者 int int 或者 java.lang.Integer INTEGER 4 字节 long long  Long BIGINT 8 字节 short short  Short SMALLINT 2 字节 byte byte  Byte TINYINT

攻城狮在路上(壹) Hibernate(九)--- Hibernate的映射类型

Hibernate采用映射类型作为Java类型和SQL类型的桥梁,对应type属性.分为两种:内置映射类型和客户化映射类型.一.内置映射类型: 1.Java基本类型的Hibernate映射类型: Java基础类型的Hibernate映射类型 Hibernate映射类型 Java类型 标准SQL类型 大小和取值范围 integer或者int int或者java.lang.Integer INTEGER   long long BIGINT   short short SMALLINT   byte

hibernate Java 时间和日期类型的 Hibernate 映射

基础知识: 在 Java 中, 代表时间和日期的类型包含: java.util.Date 和 java.util.Calendar. 此外, 在 JDBC API 中还提供了 3 个扩展了 java.util.Date 类的子类: java.sql.Date, java.sql.Time 和 java.sql.Timestamp, 这三个类分别和标准 SQL 类型中的 DATE, TIME 和 TIMESTAMP 类型相应 在标准 SQL 中, DATE 类型表示日期, TIME 类型表示时间,

Hibernate 基本类型映射

Hibernate映射类型 Java类型 标准SQL类型 大小和取值范围 integer 或者 int int 或者 Integer INTEGER 4字节,-2^31 ~ 2^31-1 long long 或者 Long BIGINT 8字节,-2^63 ~ 2^63-1 short short 或者 Short SMALLINT 2字节,-2^15 ~ 2^15-1 byte byte 或者 Byte TINYINT 1字节,-128 ~ 127 float float 或者 Float F

hibernate教程—映射类型

Hibernate映射类型分为两种:内置映射类型和客户化映射类型.内置映射类型负责把一些常见的Java类型映射到相应的SQL类型:此外,Hibernate还允许用户实现UserType或CompositeUserType接口,来灵活地定制客户化映射类型.客户化类型能够把用户定义的Java类型映射到数据库表的相应字段. 一.Hibernate的内置映射类型 1.Java基本类型的Hibernate映射类型 Hibernate映射类型 Java类型 标准SQL类型 大小和取值范围 integer或者

Hibernate 映射文件详解

Hibernate 映射文件详解 2010-09-02 19:03:33|  分类: Hibernate学习|举报|字号 订阅 Hibernate的持久化类和关系数据库之间的映射通常是用一个XML文档来定义的.该文档通过一系列XML元素的配置,来将持久化类与数据库表之间建立起一一映射.这意味着映射文档是按照持久化类的定义来创建的,而不是表的定义. 一.根元素:<hibernate-mapping>,每一个hbm.xml文件都有唯一的一个根元素,包含一些可选的属性 1)package:指定一个包