hibernate入门二之单表操作

友情提醒:以下所有的操作都是在hibernate入门一的基础上操作的,参考链接:https://www.cnblogs.com/lindaiyu/p/10990525.html

单一主键

assigned 由Java程序负责生成(手工赋值)

native 由底层数据库自动生成表示符,如果是mysql就是increment,如果是oracle就是sequence,等等。

这个主要跟两个地方有关:
hbm.xml(主要地方)

<id name="sid" type="int">
<column name="SID"/>
<!--主键的生成策略-->
<generator class="assigned"/>
</id>

cfg.xml

 <!--自动生成,create会覆盖掉原来的数据,若是要后续增加,需使用update-->
    <property name="hbm2ddl.auto">create</property>

 

基本类型

hibernate映射类、Java类型、标准SQL类型(不常用)

容易出错的两种类型:date类型、timestamp类型(时间戳)

  <!--java.util.Date 的日期类型是日期+时间(也可以使用hibernate的timestamp),若是只需要日期或者时间,只需要将Java.util.Date改为hibernate的date或者time类型即可-->
<property name="birthday" type="java.util.Date">

 

对象类型

 

//如何使用hibernate存储照片
@org.junit.Test
public void testWriteBlob() throws Exception{
Students s = new Students();
//先获得照片文件
File f = new File("/Users/huizhao/Desktop"+File.separator+"1.jpg");
//获得文件的输入流
InputStream inputStream = new FileInputStream(f);
//创建一个Blob对象
Blob image = Hibernate.getLobCreator(session).createBlob(inputStream, inputStream.available());
//设置照片属性
s.setPictur(image);
//保存学生
session.save(s);
}

//如何使用hibernate输出照片
@org.junit.Test
public void testReadBlob() throws Exception{
Students s =(Students) session.get(Students.class,1);
//获得Blob对象
Blob image = s.getPictur();
//获得照片的输入流
InputStream input = image.getBinaryStream();
//创建输出流
File file = new File("/Users/huizhao/Desktop" + File.separator + "2.jpg");
//获得输出流
FileOutputStream fileOutputStream = new FileOutputStream(file);
//创建缓冲区
byte[] buff = new byte[input.available()];
input.read(buff);
fileOutputStream.write(buff);
fileOutputStream.close();
input.close();
}

 

组件属性

实体类中的某个属性属于用户自定义的类的属性(其中的name="address"对应类的变量,class为对应的实体类),component是组件属性,component中的property是address的字属性,三个属性构成了address属性

进行测试:

1、建立一个Address类

package com.hibernate.entity;

public class Address {
    private String postcode;
    private String phone;
    private String address;

    public Address(){}

    public Address(String postcode, String phone, String address) {
        this.postcode = postcode;
        this.phone = phone;
        this.address = address;
    }

    public String getPostcode() {
        return postcode;
    }

    public void setPostcode(String postcode) {
        this.postcode = postcode;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Address{" +
                "postcode='" + postcode + '\'' +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

2、在之前的学生类里面加上Addre属性,并配置set和get方法

private Address address;

 3、在hbm.xml中加入以下代码:

 <component name="address" class="com.hibernate.entity.Address" >
           <property name="postcode" column="POSTCODE" type="java.lang.String"/>
            <property name="phone" column="PHONE" type="java.lang.String"/>
            <property name="address" column="ADDRESS" type="java.lang.String"/>
        </component>

 友情提醒:

1、class属性的类一定是带包名的,否则会出错

2、protperty元素之后也是要加type 类型的,否则会报错

4、测试

 @org.junit.Test
    public void TestSaveStudents() {
        //生成学生对象
        //Students s = new Students(2, "张三丰", "南", new Date(), "武当山");
        Students s = new Students();
        s.setSname("zhangsan");
        s.setGender("nan");
        s.setBirthday(new Date());
        //s.setAddress("wudang");
        Address address = new Address("123","456","789");
        s.setAddress(address);
        session.save(s);
    }

 

单表CURD操作

参考链接:https://www.cnblogs.com/lindaiyu/p/10962716.html

 

格言:从不熟悉到熟悉是一个过程,无需恐惧。

 

posted @ 2019-06-08 21:32  绛珠仙草林黛玉  阅读(114)  评论(0编辑  收藏  举报