相关文章推荐
贪玩的上铺  ·  javascript - ...·  2 周前    · 
活泼的硬盘  ·  python - How do you ...·  1 年前    · 
玉树临风的山羊  ·  .NET Core ...·  1 年前    · 
痴情的大葱  ·  spring boot 找不到 ...·  1 年前    · 
苦恼的洋葱  ·  js fetch 同步请求 - ...·  1 年前    · 

一.Hibernate的数据类型


Hibernate可以自动生成数据表. 在生成数据表的时候,应当保证一点,那就是数据的类型要保持一致。 在POJO中写得是Integer,那么在数据库生成的时候,是不能是varchar 类型的。 在POJO中写得是String ,那么在数据库生成的时候,是不能是int类型的。这就是如何将Java类型与数据库SQL 类型进行对应的问题。 如何对应呢? 是通过Hibernate进行对应的。 要有一个Hibernate的数据类型。 Hibernate是先将POJO即普通的java类型转换成Hibernate类型,然后将Hibernate类型转换成数据库SQL类型,这样就达到了Java类型转换成SQL类型的目的。这些类型对应关系,并非都是一对一的关系。 其他的框架,也是这个思路。


二.常用类型的生成测试


二.一 实体类


package com.yjl.pojo;
import java.sql.Blob;
import java.util.Date;
 @author:两个蝴蝶飞
 @date: 2019年3月8日 上午10:33:16
 @Description 类型转换。
public class Book {
     * @param id 主键编号  是int 型
     * @param name 书名  是varchar 型
     * @param price 价钱  是number或者float型
     * @param publishDate 出版日期   是timestamp 或者date 型
     * @param author 作者  是varchar 型
     * @param specialPrice 是否是降价  是boolean 型
     * @param description 描述  是长字段 text型
     * @param bookImage 图片  是Blod 型。  开发中存储的是地址
    private Integer id;
    private String name;
    private Double price;
    private Date publishDate;
    private String author;
    private Boolean specialPrice;
    private String description;
    private Blob bookImage;
    public Integer getId() {
        return id;
    public void setId(Integer id) {
        this.id = id;





    
    public String getName() {
        return name;
    public void setName(String name) {
        this.name = name;
    public Double getPrice() {
        return price;
    public void setPrice(Double price) {
        this.price = price;
    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 Boolean getSpecialPrice() {
        return specialPrice;
    public void setSpecialPrice(Boolean specialPrice) {
        this.specialPrice = specialPrice;
    public String getDescription() {
        return description;
    public void setDescription(String description) {
        this.description = description;
    public Blob getBookImage() {
        return bookImage;
    public void setBookImage(Blob bookImage) {
        this.bookImage = bookImage;
    @Override
    public String toString() {





    
        return "Book [id=" + id + ", name=" + name + ", price=" + price + ", publishDate=" + publishDate + ", author="
                + author + ", specialPrice=" + specialPrice + ", description=" + description + "]";


这里列举了常用的一些类型,如integer,double,string,date,blob,boolean类型。


二.二 Book.hbm.xml配置类



不要忘记,放入到hibernate.cfg.xml配置文件中。


二.三 测试生成文件



20190308141026922.png


二.四 测试插入



可以正确的插入进去.


2019030814150674.png


数据库存储的是:


2019030814153930.png


二.五 从数据库中读取



20190308141700194.png


在D盘上也显示了这张图片:


20190308142049618.png

打开后,也正常显示这个图片。


三. 对应关系


有一张对应关系的表。


20190308142312275.png


20190308142410290.png


要注意,这种对应关系并非是一对一再对一,即1-1-1的关系。 如java类型的String,即可以转换成varchar 类型,也可以是text类型。 这个时候,在Book.hbm.xml中 type就不要写Java类型了,要写成Hibernate类型。 还有一个Double注意区分,不要将Double与Float混了,两个是不能进行相互转换的。


四. Hibernate中写入其他的元素


四.一 写入Set <String >属性


这里用 学生的例子来说吧。 如一个学生有多张图片。 这些图片保存的都是String类型,即只保存图片的路径地址。 那么这个时候,实体类简化之后,应该是这样的:



相对应的xml配置文件是:



直接写生成的测试方法:



运行之后,会创建两张表。 一个表是student 表,里面只有 id,name 两个属性。 并没有任何关于图片的信息。 另外一个表是image,里面有两个属性,一个是stuId,另外一个是imageName. 这个表是没有主键的。 将对应关系放置到这个表里面了。 是无序的。


20190308144526433.png


读取的测试:



20190308144850861.png


下面的,与其一样。


四.二 写入List <String > 属性


如果是数组的话,将其转换成List的形式。



配置文件:



测试:



点击运行之后,会生成Student 和hobby 两个表. 同样没有主键。 id顺序在后。


20190308145725902.png


是有顺序的。



20190308145811266.png


四.三 写入idbag<String > 属性


idbag,是映射,叫包。 是一个无序的,允许重复的集合。 没有具体的实现,只有定义。

可以用Collection,也可以用List. 这里用List进行相关的说明。 所以,实体Student.java 是不变的。 用List集合。


配置文件:



保存测试:



会生成两个表。 id顺序在前。


20190308150849299.png


查询时:



20190308150903874.png


四.四 写入Map <String,String> 属性


实体类:



配置文件:



保存测试:



运行生成后: 是无序的。


20190308151944643.png


查询:



20190308152041377.png


这是Hibernate对Set,List,idbag和Map的常见映射。


谢谢!!!