将讲解表名类名不一致、属性名列名不一致、不持久化某属性、Date类型的注解、枚举类型的注解(枚举类型在xml配置有点麻烦不说了),说明都在代码注释里。

项目目录:

注解方式以Teacher类为例,xml方式以Student类为例:

Teacher代码:

package com.oracle.hibernate.model;

import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient; @Entity
@Table(name="_Teacher")//指定表名
public class Teacher { private int id;
private String name;
private String wifeName;
private Date birthDate;
//Title是Enum(枚举)类型
private Title title; @Id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//属性默认都是basic,可以不写.
@Basic
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//不持久化该属性,Transient,透明的。在数据库里讲没有该字段。
@Transient
public String getWifeName() {
return wifeName;
}
public void setWifeName(String wifeName) {
this.wifeName = wifeName;
}
/**
* 属性名和数据库字段名不一致时,用该注解指定
* Temporal()一般默认就行
* value:
* TemporalType.DATE 只保存日期
* TemporalType.TIME 只保存时间
* TemporalType.TIMESTAMP(默认值,保存日期和时间)
* @return
*/
@Column(name="T_BirtyDate")
@Temporal(TemporalType.TIMESTAMP)
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
} /**
* 枚举类型@Enumerated(EnumType.ORDINAL/EnumType.STRING)
* EnumType.ORDINAL:默认值,把枚举类型的数组下标值存入数据库。如A为0,B为1,C为2。此时表字段类型为int
* EnumType.STRING:把枚举类型的值存进数据库,此时需要把表的字段类型改为varchar。
* @return
*/
@Enumerated(EnumType.STRING)
public Title getTitle() {
return title;
}
public void setTitle(Title title) {
this.title = title;
} }

Student类代码:

package com.oracle.hibernate.model;

import java.sql.Date;

public class Student {
private int id;
private String name;
private int age;
private String addr;
private Date birthDay;
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() { return "ID:"+id+"\t"+"name:"+name+"\t"+"age:"+age;
} }

教室类用到的枚举类Title:

package com.oracle.hibernate.model;

public enum Title {
A,B,C
}

Student类需要的Student.hbm.xml配置:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- 映射的是哪个package里的类 -->
<hibernate-mapping package="com.oracle.hibernate.model">
<!-- 类到表的映射 类名若和表名一致,table可以省略-->
<!-- 在oracle里没有自动递增,需要用序列定义id自动递增
<id name="personId" column="P_ID">
<generator class="native">
<param name="sequence">SEQ_HIBERNATE(序列名)</param>
</generator>
</id>
-->
<class name="Student" table="_Student">
<id name="id" column="id"></id> <!-- property里的类型type="",95%情况不用指定,hibernate会自动帮你指定 --> <property name="name" type="string" column="S_Name"></property>
<property name="age" column="S_Age"></property>
<property name="birthDay" column="S_BirthDay"></property> <!-- 不想持久化的属性,直接不写就行 -->
<!-- <property name="addr"></property> -->
</class> </hibernate-mapping>

Teacher测试类TeacherTest:用的Junit测试

package com.oracle.hibernate.model;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test; public class TeacherTest { //SessionFactory就像Connection,建立耗时,这里用单例。不管有多少测试方法,都用这一个SessionFactory
private static SessionFactory sf = null;
//@BeforeClass,对象初始化之前,classload到内存之后马上执行的方法。
@BeforeClass
public static void beforeClass(){
//用的是注解,new的是AnnotationConfiguration()
sf = new AnnotationConfiguration().configure().buildSessionFactory(); } @Test
public void test() {
Teacher t = new Teacher();
//id设成了自动递增
//t.setId(3);
t.setName("t2");
t.setBirthDate(new Date()); t.setTitle(Title.B); Session session = sf.openSession();
session.beginTransaction();
session.save(t);
session.getTransaction().commit();
session.close(); } //类用完之后
@AfterClass
public static void afterClass(){ sf.close();
} }

Student测试类StudentTest:

package com.oracle.hibernate.model;

import static org.junit.Assert.*;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test; public class StudentTest { private static SessionFactory sf = null; @BeforeClass
public static void beforeClass(){
//用的是注解,new的是AnnotationConfiguration()
sf = new AnnotationConfiguration().configure().buildSessionFactory(); } @Test
public void test() {
Student s = new Student();
//在mysql里定义了id为自动递增。不用set。
//s.setId(1);
s.setName("s1");
s.setAge(10);
//s.setAddr("addr"); Session session = sf.openSession();
session.beginTransaction();
session.save(s);
session.getTransaction().commit();
session.close(); } //类用完之后
@AfterClass
public static void afterClass(){ sf.close();
} }

在mysql里指定_student表和_teacher表的id为自动递增。

运行几次,效果如下:

_teacher表:

可以看到,字段名改了,wifeName字段为也没生成。存进去的时间为date类型。

若把注解的枚举类型的改为EnumType.ORDINAL,则title存进去的是0、1、2。

_student表:

hibernate基本配置的更多相关文章

  1. Hibernate 基础配置及常用功能(一)

    本来是想等全部框架测试完以后再统一发布的,但是随着测试的一点点增加感觉把需要叙述的东西放在一起终将会是一场灾难.所以还是打算分成几章来描述,其中还包括一些有待解决的问题.短期很难腾出时间来仔细阅读Hi ...

  2. 。。。Hibernate注解配置的注意事项。。。

    今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...

  3. 【转】Spring+Hibernate+EHcache配置(一)

    大量数据流动是web应用性能问题常见的原因,而缓存被广泛的用于优化数据库应用.cache被设计为通过保存从数据库里load的数据来减少应用和数据库之间的数据流动.数据库访问只有当检索的数据不在cach ...

  4. Hibernate缓存配置

    一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口l ...

  5. Hibernate——hibernate的配置测试

    Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...

  6. Hibernate学习笔记2.1(Hibernate基础配置)

    Hibernate基础配置 1.<property name="hbm2ddl.auto">update</property> 在SessionFactor ...

  7. t3用户-角色-权限hibernate经典配置

    用户-角色-权限hibernate经典配置. 既然有人问起,我就写下说明吧.在文章中间的配置文件那里.权当回忆一下,也帮助更多人.这是以前学校时写的,没有注释.都是贴的代码笔记.看到的莫要见怪.欢迎学 ...

  8. hibernate核心配置

    # hibernate核心配置 注意:  - hibernate.cfg.xml默认放在src目录下(这样可以自动加载该文件) - 必须配置的参数:   * 数据库的四大参数和方言  - 可选配置的参 ...

  9. Hibernate常见配置详细解释

      <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1. ...

  10. (转)Hibernate的配置详解

    http://blog.csdn.net/yerenyuan_pku/article/details/65041077 在<Hibernate快速入门>一文中,我有讲到Hibernate的 ...

随机推荐

  1. Synchronizer解析(为AQS打个铺垫)

    ReentranceLock 和 Semaphore有很多共同点,他们都像是一个gate一样, 来控制让哪些线程阻塞,让哪些线程通过. 不同的是,ReentranceLock允许通过的量是1,Sema ...

  2. [转]How to Clean the Global Assembly Cache

    本文转自:https://www.techwalla.com/articles/how-to-clean-the-global-assembly-cache The Global Assembly C ...

  3. Sqler-Cmd

    针对于sqler 工具cmd 部分 做了如下整理 1 Cluster Model 2 Regedit Model $servers= '192.168.25.xx','192.168.25.yy' W ...

  4. pycharm设置及激活码

    电脑上装了python2.7和python3.6两个版本(之前用的都是python3,因为要学习机器学习和深度学习了,机器学习的有些模块还没有更新到python3,于是乎又装了python2)为了能在 ...

  5. 浅谈 温故知新——HTML5!

    古人有云:温故而知新.活到老,学到老,作为一枚前端的程序猿,不停的学习能够让我们对我们的技术有一个更加丰富的认识.这几天,项目已经完成,但我发现自己的知识体系存在一些短板,特别是在H5方面,所以我又回 ...

  6. Unity&C# SingerMonoManager泛型单例

    管理各种管理器 ///为什么需要单例 ///单例模式核心在于对于某个单例类,在系统中同时只存在唯一一个实例,并且该实例容易被外界所访问: ///避免创建过多的对象,意味着在内存中,只存在一个实例,减少 ...

  7. 重装SQL前,一定要把SQL2005、SQL2008之类的彻底删除干净

    0.预备 如果你曾删除过VS2010或者VS2008之类的,同理也要照此方法删除 1.步骤,顺序无妨 卸载程序:控制面板---查找SQL..NET   删除干净 停掉SQL的所有服务:  计算机--管 ...

  8. epoll好文章

    https://www.cnblogs.com/apprentice89/p/3234677.html https://www.jianshu.com/p/aa486512e989 https://c ...

  9. BEAUTIFUL

    DESCRIPTION:一个长度为n 的序列,对于每个位置i 的数ai 都有一个优美值,其定义是:找到序列中最长的一段[l, r],满足l<i<r,且[l, r] 中位数为ai(我们比较序 ...

  10. java学习笔记—web计算器(36)

    MVC模式 模式主要的任务是帮助开发者解决一类问题. MVC模式主要是用于规划你的网站的开发的一个基本的结构. Servlet记住充当的是控制器层.cn.itcast.controller Java类 ...