将讲解表名类名不一致、属性名列名不一致、不持久化某属性、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. 用Word2007写CSDN博客

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  2. UIWebview与js交互[转]

    UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌入页面中,通过这个方法我们可以在iOS ...

  3. (转)【经验之谈】Git使用之Windows环境下配置

    原文地址:http://www.cnblogs.com/xishuai/p/3590434.html 前言 安装 配置 关于git使用的几个问题 后记 关于代码托管,以前用过vss和svn,看博客或论 ...

  4. ADO接口之_RecordsetPtr

    转自:http://hi.baidu.com/%CE%D2%B6%CF%C1%CB%CB%BC%C4%EE/blog/item/e057c526c6af6c29c995596e.html _Recor ...

  5. 1、Docker介绍

      Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器完全使用沙箱机制,相互之间不会有任何接口 ...

  6. 更改kvm虚拟机磁盘大小

    kvm 虚拟机的磁盘大小可通过命令:qemu-img resize filename size 来改,要注意的是resize只支持raw格式的磁盘文件,如果想更改qcow2等格式的磁盘大小,需先用qe ...

  7. 使用testNGListenter来自定义日志

    背景 用testNG写用例的时候,只是打印了请求的日志,没有打印这个用例的开始和结束的标识,想加上这个标识这样更好的排查问题 这种日志是加在用例开始执行和结束,相当于spring中的AOP功能,今天翻 ...

  8. django:multivaluedictkeyerror错误

    查了一下,是因为获取前台数据时,用了request.POST[],改用request.POST.get()之后没有这个报错了 细节: request.POST是用来接受从前端表单中传过来的数据,比如用 ...

  9. Oracle数据泵导出导入(expdp/impdp)

    一.创建表空间 create tablespace atp logging datafile 'D:\oracle\oradata\orcl\atp.dbf' size 50m autoextend ...

  10. hud 5124 lines(思维 + 离散化)

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 lines   Problem Description: John has several lines. ...