J2EE系列之Hibernate4学习笔记(八)--Hibernate基本类型映射

hibernate中基本的数据类型与Java中的类型以及标准的SQL类型映射关系如图所示:


Hibernate中布尔类型boolean对应着SQL类型为BIT(位)类型,Hibernate中text和clob对应数据库的CLOB,这个是字符的大对象,一般用来存储大的文章啊,纯文字的。
BLOB是二进制,一般存储图像视频等大文件。


通过一个例子来看一下各个类型的应用:

1.新建工程Hibernate06

2.新建Book类:

package com.test.model;

import java.sql.Blob;
import java.util.Date;



public class Book {

	private int id;
	private String bookName;//书名
	private float price;//价格
	private boolean specialPrice;//是否是特价图书
	
	private Date publishDate;//出版日期
	private String author;//作者
	private String introduction;//简介
	private Blob bookPic;//图书图片
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
	public boolean isSpecialPrice() {
		return specialPrice;
	}
	public void setSpecialPrice(boolean specialPrice) {
		this.specialPrice = specialPrice;
	}
	public Date getPublishDate() {
		return publishDate;
	}
	public void setPublishDate(Date publishDate) {
		this.publishDate = publishDate;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getIntroduction() {
		return introduction;
	}
	public void setIntroduction(String introduction) {
		this.introduction = introduction;
	}
	public Blob getBookPic() {
		return bookPic;
	}
	public void setBookPic(Blob bookPic) {
		this.bookPic = bookPic;
	}
	
}
这里说一下,introduction属性为图书的简介,内容比较多,在数据库中要使用CLOB类型来保存,根据映射图知道其在JAVA中用String或者Clob类型,我们这里使用了String类型。bookPic为图书的封面图片,在数据库中使用BLOB类型保存,根据映射关系,其JAVA类型为Blob类型。
3.写配置文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.test.model">

	<class name="Book" table="t_book">
		<id name="id" column="bookId">
			<generator class="native"></generator>
		</id>
		
		<property name="bookName" column="bookName" length="40"></property>
		<property name="price" column="price" type="float"></property>
		<property name="specialPrice" column="specialPrice" type="boolean"></property>
		<property name="publishDate" column="publishDate" type="date"></property>
		<property name="author" column="author" length="20"></property>
		<property name="introduction" column="introduction" type="text"></property>
		<property name="bookPic" column="bookPic" type="blob"></property>
	</class>

</hibernate-mapping>

这里对于String类型的bookName,我们设定了其最大长度为40个字符。price属性,我们使用type指定其类型为float,这里的类型就是hibernate中的类型。introduction这个属性是关于书的简介,内容比较长,在SQL中要使用CLOB类型来保存,其Java类型使用的是String,通过映射关系知道其hibernate类型为text类型。bookPic在SQL中使用BLOB类型保存,其Java类型为Blob,对应的其hibernate类型为blob。


4.写配置文件:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!--数据库连接设置 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>

       
        <!-- 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
	
        <!-- 控制台显示SQL -->
        <property name="show_sql">true</property>

        <!-- 自动更新表结构 -->
        <property name="hbm2ddl.auto">update</property>
        
        <mapping resource="com/test/model/Book.hbm.xml"/>
        

    </session-factory>

</hibernate-configuration>

5.写测试文件BookTest.java:

package com.test.service;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.test.util.HibernateUtil;

public class BookTest {
	
	
	public static void main(String[] args) {
		
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); // 获取Session工厂
		Session session=sessionFactory.openSession(); // 生成一个session
	    session.beginTransaction(); // 开启事务
	    
	    
	    
	    
	    session.getTransaction().commit(); // 提交事务
	    session.close(); // 关闭session
	    
	}
}

运行测试文件,看到数据库中生成了t_book表:


这个表的结构为:



下面往数据库中保存数据。修改测试文件为:

package com.test.service;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Blob;
import java.text.SimpleDateFormat;

import org.hibernate.LobHelper;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.test.model.Book;
import com.test.util.HibernateUtil;

public class BookTest {
	
	
	public static void main(String[] args) throws Exception{
		
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); // 获取Session工厂
		Session session=sessionFactory.openSession(); // 生成一个session
	    session.beginTransaction(); // 开启事务
	    
	    Book book = new Book();
	    book.setBookName("java编程思想");
	    book.setPrice(100);
	    book.setSpecialPrice(true);
	    book.setPublishDate(new SimpleDateFormat("yyyy-MM-dd").parse("2017-02-11"));
	    book.setAuthor("埃克尔");
	    book.setIntroduction("简介...");
	    LobHelper lobHelper = session.getLobHelper();
	    InputStream in = new FileInputStream("c://java编程思想.jpg");
	    Blob bookPic = lobHelper.createBlob(in,in.available());
	    book.setBookPic(bookPic);
	    session.save(book);
	    
	    session.getTransaction().commit(); // 提交事务
	    session.close(); // 关闭session
	    
	}
}
这里要注意的是图片的保存方法。这里使用了hibernate自带的接口函数把图片转变成blob类型,然后进行保存。


运行函数:

发现这里数据已经保存进去了。这里注意的是Boolean类型在sql中为BIT位类型,这里是显示不出来的。

在mysql中执行SELECT specialPrice+0 FROM t_book;语句,会发现specialPrice值为1.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值