04.Hibernate映射关系(一对一)

04.类与(.hbm.xml)的详解、一张表拆分成两个类、一对一

一、类与(.hbm.xml)的详解

1.类
import java.util.Date;
/**
 * 学生信息
 * @author Java53
 */
public class StudentInfo {
   
	private Integer stuId;
	private String stuNo;
	private String stuName;
	private String stuSex;
	private Date stuBirthday;
	private String phoneNumber;
	private Integer classNo;
	private String huozhe;

	public Integer getStuId() {
   
		return stuId;
	}

	public void setStuId(Integer stuId) {
   
		this.stuId = stuId;
	}

	public String getStuNo() {
   
		return stuNo;
	}

	public void setStuNo(String stuNo) {
   
		this.stuNo = stuNo;
	}

	public String getStuName() {
   
		return stuName;
	}

	public void setStuName(String stuName) {
   
		this.stuName = stuName;
	}

	public String getStuSex() {
   
		return stuSex;
	}

	public void setStuSex(String stuSex) {
   
		this.stuSex = stuSex;
	}

	public String getPhoneNumber() {
   
		return phoneNumber;
	}

	public void setPhoneNumber(String phoneNumber) {
   
		this.phoneNumber = phoneNumber;
	}

	public Integer getClassNo() {
   
		return classNo;
	}

	public void setClassNo(Integer classNo) {
   
		this.classNo = classNo;
	}

	public Date getStuBirthday() {
   
		return stuBirthday;
	}

	public void setStuBirthday(Date stuBirthday) {
   
		this.stuBirthday = stuBirthday;
	}

	public String getHuozhe() {
   
		return huozhe;
	}

	public void setHuozhe(String huozhe) {
   
		this.huozhe = huozhe;
	}

	public StudentInfo(Integer stuId, String stuNo, String stuName, String stuSex, Date stuBirthday, String phoneNumber,
			Integer classNo) {
   
		super();
		this.stuId = stuId;
		this.stuNo = stuNo;
		this.stuName = stuName;
		this.stuSex = stuSex;
		this.stuBirthday = stuBirthday;
		this.phoneNumber = phoneNumber;
		this.classNo = classNo;
	}

	public StudentInfo() {
   
		super();
	}

	@Override
	public String toString() {
   
		return "StudentInfo [stuId=" + stuId + ", stuNo=" + stuNo + ", stuName=" + stuName + ", stuSex=" + stuSex
				+ ", stuBirthday=" + stuBirthday + ", phoneNumber=" + phoneNumber + ", classNo=" + classNo + ", huozhe="
				+ huozhe + "]";
	}
}
2.(.hbm.xml)文件详解
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
		"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
		"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
	package:指定一个包名,指定了之后,所有在需要使用全类名的地方都可以省略该包名
 -->
<hibernate-mapping package="com.zb.entity">
	<!-- 
		name:实体类的(全类名)
		table:该实体类对应的表名
		dynamic-update:动态更新,如果该值为false的时候,则不管更新几个列,SET后面都会写上所有列,如果为true则只会写上更新的列
		dynamic-insert:动态插入,如果为false的时候,则不管插入的列值是否为null,都会将该列编写在SQL语句中,如果为true,则只会将不为null的字段编写在SQL语句中
	 	select-before-update:是否在更新之前执行查询操作,如果查询出的结果与当前结果一致,则不会发送更新语句,否则才会发送更新语句
	 -->
	<class name="StudentInfo" table="student_info" dynamic-update="true" dynamic-insert="true" select-before-update="true">
		<!-- 
			标识列
				name:标识列在类中的属性名
				column:标识列在表中的字段名
		 -->
		<id name="stuId" column="stu_id">
			<!-- 
				自动生成器
					increment:在插入数据之前先会查询ID列的最大值,让该最大值+1作为下一次插入数据的ID,要求ID列必须为整数型
						*Hibernate推荐使用一个不带有任何业务逻辑的整型列作为ID列
					native:根据数据库底层返回的厂商标识,去(从identity,sequence中)选择最优的生成规则	
						identity:依赖数据库底层的自动增长规则,要求ID列必须是自增长列,整型(MySql、SqlServler支持)
						sequence:老版本的Hibernate的该增长期只支持Oracle,DB/2数据库,现在MySql,SqlServler也支持了
							创建一张额外的表来记录下一个可用的ID,每次更新之前先查询出该表中的可用ID,进行插入操作,然后修改该可用ID值+1
					uuid:让Hibernate根据UUID去计算生成一个UUID作为ID,要求ID列必须为字符串
			 -->
			<generator class="native">
			</generator>
		</id>
		<!-- 
			普通列
				name:普通列在类中的属性名
				type:该列的数据类型,如果不指定该属性,则Hibernate会自动通过反射机制去获取该属性的类型
					java中的数据类型
					数据库中的数据类型
					java.util.Date:对应数据库中的datetime类型,会记录完整的时间日期
						java.sql.Date:对应数据库中的date类型,只会记录时间日期的日期部分
						java.sql.Time:对应数据库中的time类型,只会记录时间日期的时间部分
				access:
					property:默认值,根据属性的GET与SET方法进行访问,如果该属性没有GET与SET方法,则触发异常
					field:根据属性名称进行暴力反射获取的属性,直接操纵属性,(会破坏对象的封装性,不推荐使用)
				unique:默认值为false,当设置该属性为true之后,该列为唯一列,建表的时候也会在表上加上唯一约束
				length:指定建表时,该字段的长度
				index:是否为指定该列为索引类(不能使用纯数值作为索引名)
				formula:指定一个SQL表达式,为对象添加一个存在于类文件,但是不是真正的列的属性值
		 -->
		 <property name="stuNo" column="stu_no" access="property" unique="true" length="32" index="stu_no"/>
		 <property name="stuName" column="stu_name" />
		 <property name="stuSex" column="stu_sex" />
		 <property name="stuBirthday" column="stu_birthday" type="java.util.Date" />
		 <property name="phoneNumber" column="phone_number" access="field" unique="true"/>
		 <property name="classNo" column="class_no" />
		 <property name="huozhe" type="java.lang.String" formula="(CASE is_life WHEN 1 THEN '活着' WHEN 2 THEN '死了' END)" />
	</class>
</hibernate-mapping>
3.Test文件
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.zb.entity.StudentInfo;

public class TestMain {
   
	public static void main(String[] args) {
   
		//创建与数据库的回话
		Session session = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory().openSession();
		//开启事务
		Transaction t = session.beginTransaction();
		
		//session.save(new StudentInfo(null,"STU0001", "小鸭子", "男", new Date(),"159159158", 1));
		//StudentInfo studentInfo = session.get(StudentInfo.class, 1);
		//studentInfo.setStuName("小狗子");
		//session.save(new StudentInfo("STU0002", "小鲸鱼", null, null, 1));
		
		//StudentInfo studentInfo = session.get(StudentInfo.class, 2);
		//session.clear();
		
		//studentInfo.setPhoneNumber("666666");
		//studentInfo.setStuSex("男");
		
		//session.saveOrUpdate(studentInfo);
		
		StudentInfo stu1 = session.get(StudentInfo.class, 1);
		
		System.out.println(stu1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值