hibernate基本配置
将讲解表名类名不一致、属性名列名不一致、不持久化某属性、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基本配置的更多相关文章
- Hibernate 基础配置及常用功能(一)
本来是想等全部框架测试完以后再统一发布的,但是随着测试的一点点增加感觉把需要叙述的东西放在一起终将会是一场灾难.所以还是打算分成几章来描述,其中还包括一些有待解决的问题.短期很难腾出时间来仔细阅读Hi ...
- 。。。Hibernate注解配置的注意事项。。。
今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...
- 【转】Spring+Hibernate+EHcache配置(一)
大量数据流动是web应用性能问题常见的原因,而缓存被广泛的用于优化数据库应用.cache被设计为通过保存从数据库里load的数据来减少应用和数据库之间的数据流动.数据库访问只有当检索的数据不在cach ...
- Hibernate缓存配置
一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口l ...
- Hibernate——hibernate的配置测试
Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...
- Hibernate学习笔记2.1(Hibernate基础配置)
Hibernate基础配置 1.<property name="hbm2ddl.auto">update</property> 在SessionFactor ...
- t3用户-角色-权限hibernate经典配置
用户-角色-权限hibernate经典配置. 既然有人问起,我就写下说明吧.在文章中间的配置文件那里.权当回忆一下,也帮助更多人.这是以前学校时写的,没有注释.都是贴的代码笔记.看到的莫要见怪.欢迎学 ...
- hibernate核心配置
# hibernate核心配置 注意: - hibernate.cfg.xml默认放在src目录下(这样可以自动加载该文件) - 必须配置的参数: * 数据库的四大参数和方言 - 可选配置的参 ...
- Hibernate常见配置详细解释
<!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1. ...
- (转)Hibernate的配置详解
http://blog.csdn.net/yerenyuan_pku/article/details/65041077 在<Hibernate快速入门>一文中,我有讲到Hibernate的 ...
随机推荐
- HBase & thrift & C++编程
目录 目录 1 1. 前言 1 2. 启动和停止thrift2 1 2.1. 启动thrift2 1 2.2. 停止thrift2 1 2.3. 启动参数 2 3. hbase.thrift 2 3. ...
- c++ vector反转reverse
template <class BidirectionalIterator> void reverse ( BidirectionalIterator first, Bidirection ...
- HRBUST1315 火影忍者之~大战之后 2017-03-06 16:14 54人阅读 评论(0) 收藏
火影忍者之-大战之后 经历了大战的木叶村现在急需重建,人手又少,所以需要尽可能多的接受外来的任务,以赚取报酬,重建村庄,假设你现在是木叶的一名高级忍者,有一大堆的任务等着你来做,但毕竟个人时间有限,所 ...
- kali下搭建WiFi钓鱼热点
在linux下建立无线热点并不像在windows下开启网络共享或者使用无线网卡驱动设置AP模式即可. linux下的无线共享要用到两个软件:hostapd(创建无线热点).dnsmasq(dns服务和 ...
- [javascript][翻译]使用javascript添加css rule
来杭一周,收获很多,成长很多. 周六在搞一个插件的时候碰到需要动态添加伪元素的需求,搜了一下解决方案,有人用正则写出了读取伪元素的函数:我觉得倒是可以通过注入css rule的方式,来让预留有某些类的 ...
- python网络编程--TCP连接的三次握手(三报文握手)与四次挥手
一.TCP连接 运输连接有三个阶段: 连接建立.数据传送和连接释放. 在TCP连接建立过程中要解决以下三个问题: 1,要使每一方能够确知对方的存在. 2.要允许双方协商一些参数(如最大窗口之,是否使用 ...
- Windows7 64位下SDK Manager.exe无法运行问题解决方法
我在Windows7 64位下运行SDK Manager.exe总是一闪而过,无法正常启动它,最后在网上找到一篇文章,修改系统“path”变量,把“path”变量中的第一项设置为我的JDK目录“C:\ ...
- 十一、linux文件系统权限详解
对于文件系统权限,我们前面已经讲解了一部分,这里就不在重复了. 1.修改文件权限有两种,一种是数字.一种是字母 (chmod 的修改只能是属主或者root) 数字: 修改目录权限和目录内所有文件的权限 ...
- Lexicographical Substring Search (spoj7259) (sam(后缀自动机)+第k小子串)
Little Daniel loves to play with strings! He always finds different ways to have fun with strings! K ...
- php扩展memcache和memcached区别?以及memcached软件的介绍
引用“http://www.vicenteforever.com/2012/03/memcache-different-memcached/” memcached是一个软件,而PHP包括了memcac ...