将讲解表名类名不一致、属性名列名不一致、不持久化某属性、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. 如何快速获取官网帮助信息 (附 11g pdf 文档)

    http://docs.oracle.com/en/ 11g Release 2 (11.2) 搜索时指定网站 site:docs.oracle.com create table site:docs. ...

  2. CSS —— line-height详解

    本文导读:“行高“指一行文子的高度,具体来说是指两行文子间基线间的距离.在CSS,line-height被用来控制行与行之间的垂直距离.line-height 属性会影响行框的布局.在应用到一个块级元 ...

  3. windows下C++操作MySQL数据库

    .安装MySQL 2.建立C++控制台程序,新建CPP源文件,如:sqlconn.cpp 3.工程项目中属性—C/C++--常规—附加包含目录中添加mysql安装目录中的MySQL\MySQL\MyS ...

  4. Android-HttpsURLConnectionHelp-工具类

    HttpsURLConnectionHelp-工具类 是专门把javax.net.ssl.HttpsURLConnection类的使用,进行了封装,提供了常用的公共方法: package common ...

  5. Mirth Connect的简单使用

    第一步: 切换到Channels界面,右键点击New Channel 第二步 : 上面是设置一些通道信息. 其中summary(概要) 界面主要包含 通道名称,数据类型,依赖,通道初始状态,附件(是否 ...

  6. 在SharePoint列表中使用动态筛选条件[今日][Today]

    如果在SharePoint使用了日历控件或者其他列表中有时间字段,用户经常希望能够动态使用条件字段进行筛选,例如希望筛选出开始日期是今天的事件.未来三日的事件. SharePoint的列表筛选条件支持 ...

  7. js自执行函数、调用递归函数、圆括号运算符、函数声明的提升

    前言 起因是我要在jquery的ajax中需要根据返回值来决定是否继续发起ajax请求,这是一个有条件的循环,符合条件就跳出.可以使用while循环的,但是想了想还是递归调用好用. 调用递归函数 递归 ...

  8. 浅析Object基类提供的Equals方法

    当我们去查看object.cs源代码文件的时候,会发现object基类提供了三种判断相等性的方法.弄清楚每种方法存在的原因,也就是具体解决了什么问题,对我们理解.net判断对象相等性的逻辑很有帮助,下 ...

  9. Posix消息队列注意事项

    随内核的持续性 读总是返回最高优先级的最早消息. 当往一个空队列放置一个消息时,允许产生一个信号或启动一个线程. 可认为是一个消息链表 队列中每个消息具有 1.一个无符号整数优先级 2.消息的数据部分 ...

  10. CodeForces1142/1143题解

    题面 传送门(1143) 传送门(1142) \(1143A\) 咕咕 n=read(); fp(i,1,n)a[i]=read(),++cnt[a[i]]; fp(i,1,n)if(++c[a[i] ...