Hibernate学习(一)--Hibernate知识要点1

 

新建项目

2 学习建立user-library-hibernate,并加入相应的jar包

  a项目右键-build path-configure build path-add library

  b选择user-library,在其中新建library,命命为hibernate

  c 在该library中加入hibernate所需要的jar包

             hibernate3.3.2

/hibernate3.jar

/lib/required目录下的所有包 6个

Sl4j-nop jar

3 引入mysql的JDBC驱动包

4 在MYSQL中建数据库和相应的表student(id,name,age)

5 建立hibernate配置文件hibernate.cfg.xml

 参考文档中COPY,修改对应的数据库连接,

6 建立student类

7 建立映射文件Student.hbm.xml 参考相应文档

8 将映射文件加到hibernate-cfg.xml中

 

搭建日志环境并配置显示DDL语句

slf的实现:slf4j nodep ,log4j ,jdk logging api ,apache common-log.

slf4j.nop.jar是slf-api.jar其相应的接口实现

把slf的接口对到log4j的实现,在user library中hibernate,把slf的实现slf4j-nop-1.5.8.jar去掉,添加log4j的实现log4j-1.2.15.jar,再添加一个slf-api和log4j转换器slf4j-log4j12-1.5.8.jar.

把slf的接口转换成log4j的接口.最后添加一个log4j的配置文件log4j.properties

 

 

利用HIBERNATE导出数据库建表

//读取配置文件hibernate.cfg.xml

Configuration cfg=new AnnotationConfiguration().configure();(有注解时使用AnnotationConfiguration),configure()可以手动指定配置文件名称.

Configuration cfg=new Configuration(),会默认读取hibernate.properties文件

//创建schemaExport对象

import org.hibernate.tool.hbm2ddl.SchemaExport;

SchemaExport export=new SchemaExport(cfg);

//创建数据库表

export.create(true, true);

 

 

对象映射(采用Annotation注解方式)

1 建表

  Create table teacher(id int primary key,name varchar(20),title varchar(20));

2 创建teacher类,并进行注解@

import javax.persistence.Entity;

import javax.persistence.Id;

bean中加注解

@ Entity,@Id(加在getId()上面)

3 在hibernate中加入annotation相应的jar包

             hibernate-annotations.jar

             /lib目录下加入相应的包ejb3-persistence.jar, hibernate-commons-annotations.jar

注意:annotation文档中并没有提到hibernate-annotations.jar包

4 参考annotation文档建立对应的注解

5 在hibernate.cfg.xml中建立映射

 <mapping class=”com.xx.xx”/>

6 示例

//AnnotationConfiguration;

             Configuration cfg=new AnnotationConfiguration();

             SessionFactory sf=cfg.configure().buildSessionFactory();

             Session session=sf.openSession();

             session.beginTransaction();

             session.save(t);//

             session.getTransaction().commit();

             session.close();

             sf.close();

 

 

对象映射(采用配置文件方式)

1 在相应的类中建立对应的配置文件.

例如Student类对应的配置文件Student.hbm.xml

<hibernate-mapping package="com.model">

       <class name="Student" table=" Student" >

             <id name="id" column="id"></id>

             <property name="name" column="name" />

             <property name="age" column="age" />

       </class>

</hibernate-mapping>

2 在hibernate.cfg.xml中添加该映射文件Student.hbm.xml即可

    <!-- 建立对应的配置文件关联相应的数据库表 -->

    <mapping resource="com/model/Student.hbm.xml"/>注意包名的写法

3 示例

//读取配置文件hibernate.cfg.xml

             Configuration cfg=new Configuration().configure();

//创建SessionFactory

             SessionFactory sf=cfg.configure().buildSessionFactory();

//创建session

             Session session=sf.openSession();

             session.beginTransaction();

             session.save(s);

             session.getTransaction().commit();

             session.close();

             sf.close();

 

hibernate.cfg.xml配置

hibernate.hbm2ddl.auto属性

取值: validate | update | create | create-drop

在sessionfactory创建时,自动检查数据结构,或者将数据库schema(表)的DDL导出到数据库,使用create-drop时,在显式关闭sessionfactory时,将drop掉数据库schema.

validate               加载hibernate时,验证创建数据库表结构 
create                  每次加载hibernate,重新创建数据库表结构 
create-drop        加载hibernate时创建,退出是删除表结构 
update                 加载hibernate自动更新数据库结构

 

 

表名和类名不同的情况时,对表名进行配置

1 在注解中

import javax.persistence.Table;

@Table(name=”TableName”)

2 在XML文件中

<hibernate-mapping package="com.model">

                  <class name="Teacher" table="Teacher" >配置对应的table属性为相应的表名

                                   <id name="id" column="id"></id>

                  …

                  </class>

</hibernate-mapping>

 

字段名和属性名相同,默认为

对于annotation,如果什么注解都不写的话,相当于加了注解@Basic

实体bean中所有的非static非transient的属性都可以被持久化, 除非你将其注解为@Transient.所有没有定义注解的属性等价于在其上面添加了@Basic注解. 通过@Basic注解可以声明属性的获取策略(fetch strategy):

对于XML文件中不用写column.

 

字段名和属性名不同时

Annotation:@column(name=”column_name”)加上相应的getXXX()方法上

XML:column属性

 

不需要persistence的字段

import javax.persistence.Transient;

@ Transient 意思是说这个属性是透明的,不进行持久化,存储的时候不存进去

 

映射日期和时间类型,指定时间精度

Annotation:

import javax.persistence.Temporal;

@Temporal(TemporalType.TIME)

 

XML:指定type

<class name="Teacher" table="Teacher" >

                                   <id name="id" column="id"></id>

                                   <property name="name" type="time" />type=time或date

</class>

 

枚举类型的转换

@Enumerated(EnumType.STRING)

 

字段映射的位置

推荐写在gexXXX方法上

 

Hibernate映射类型

Hibernate 映射类型

Java 类型

标准 SQL 类型

大小和取值范围

integer 或者 int

int 或者 java.lang.Integer

INTEGER

4 字节

long

long  Long

BIGINT

8 字节

short

short  Short

SMALLINT

2 字节

byte

byte  Byte

TINYINT

1 字节

float

float  Float

FLOAT

4 字节

double

double  Double

DOUBLE

8 字节

big_decimal

java.math.BigDecimal

NUMERIC

NUMERIC(8,2)8 位

character

char  Character  String

CHAR(1)

定长字符

string

String

VARCHAR

变长字符串

boolean

boolean  Boolean

BIT

布尔类型

yes_no

boolean  Boolean

CHAR(1) (Y-N)

布尔类型

true_false

boolean  Boolean

CHAR(1) (T-F)

布尔类型

2 、 Java 时间和日期类型的 Hibernate 映射

映射类型

Java 类型

标准 SQL 类型

描述

date

util.Date 或者 sql.Date

DATE

YYYY-MM-DD

time

Date    Time

TIME

HH:MM:SS

timestamp

Date   Timestamp

TIMESTAMP

YYYYMMDDHHMMSS

calendar

calendar

TIMESTAMP

YYYYMMDDHHMMSS

calendar_date

calendar

DATE

YYYY-MM-DD

3 、 Java 大对象类型的 Hibernate 映射类型

映射类型

Java 类型

标准 SQL 类型

MySQL 类型

Oracle 类型

binary

byte[]

VARBINARY( 或BLOB)

BLOB

BLOB

text

String

CLOB

TEXT

CLOB

serializable

Serializable 接口任意实现类

VARBINARY( 或BLOB)

BLOB

BLOB

clob

java.sql.Clob

CLOB

TEXT

CLOB

blob

java.sql.Blob

BLOB

BLOB

BLOB

       在程序中通过 Hibernate 来保存 java.sql.Clob 或者 java.sql.Blob 实例时,必须包含两个步骤:

1        在一个数据库事务中先保存一个空的 Blob 或 Clob 实例。

2             接着锁定这条记录,更新上面保存的 Blob 或 Clob 实例,把二进制数据或文本数据写到 Blob 或 Clob 实例中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值