hibernate单表映射

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate单表映射相关的知识,希望对你有一定的参考价值。

什么是Hibernate?
ORM:object relationship mapping对象关系映射
hibernate是java领域的一款开源的ORM框架技术。
hibernate是对jdbc进行了非常轻量级的对象封装。


1.开发工具:Eclipse Standard Kepler
Hibernate Tools for eclipse Plugins
Hibernate Tools是由JBoss推出的一个Eclipse综合开发工具插件,该插件可以简化ORM框架Hibernate,以及JBoss Seam,EJB3等开发工作。

2.编写第一个Hibernate例子
-1.创建Hibernate的配置文件
-2.创建持久化类
-3.创建对象-关系映射文件
-4.通过Hibernate API编写访问数据库的代码

-1.导入Hibernate必须的jar包 hibernate-release-4.2.4.Final\lib\required
-2.导入mysql的jdbc驱动 mysql-connector-java-5.1.7-bin.jar
-3.导入Junit4的jar包 junit-4.10.jar
@Test:测试方法 @Before:初始化方法 @After:释放资源


3.hibernate.cfg.xml的常用配置
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&amp;characterEncoding=UTF-8</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

4.使用hibernate api编写访问数据库的java代码:
-1.创建配置对象
Configuration config = new Configuration().configure();
-2.创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).build...
-3.创建会话工厂
SessionFactory sessionFactory = config.buildSessionFactory();
-4.由工厂打开会话
Session session = sessionFactory.openSession();
-5.开启事务
Transaction tran = session.beginTransaction();
-6.与数据库交互
-7.提交事务
tran.commit();
-8.关闭会话
session.close();

hibernate进阶:
1.hibernate.cfg.xml常用配置(hbm2ddl.auto很重要)
-1.hibernate.show_sql 是否把Hibernate运行时的sql语句输出到控制台上,编码阶段便于测试。
-2.hibernate.format_sql 输出到控制台的sql语句是否进行排版,便于阅读。建议设置为true。
-3.hbm2ddl.auto 可以帮助由java代码生成数据库脚本,进而生成具体的表结构。create|update|create-drop|validate
-4.hibernate.default_schema 默认的数据库,也就是在表的名字修饰词。
-5.hibernate.dialect 配置Hibernate数据库方言,Hibernate可针对特殊的数据库进行优化。
注意hibernate名称可以省略不写。
2.session简介
hibernate执行流程。如上4
-1.session可以理解为操作数据库的对象
-2.session和connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用。
-3.把对象保存在关系数据库中需要调用session的各种方法,如 save(),update(),delete(),createQuery()...
3.transaction简介
-1.hibernate对数据的操作都是封装在事务中的,并且默认是非自动提交的方式,所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正的保存在数据库中。
4.session详解
-1.如果你想让hibernate像jdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbc的connection后,设置其为自动提交事务模式。(通常并不会这么做)
在session.save(s)之前,添加:
session.doWork(new Work() {
@Override
public void execute(Connection con) throws SQLException {
con.setAutoCommit(true);
}
});
session.save(s);
session.flush();

5.对象关系映射常用配置
-1.hbm配置文件常用设置
<hibernate-mapping
schema="schemaName"
catalog="catalogName"
default-cascade="cascade_style" //级联风格
default-access="field|property|ClassName" //访问策略
default-lazy="true|false" //加载策略
package="packageName"
/>
<class
name="ClassName"
table="tableName"
batch-size="N" //一次抓取多少条记录
where="condition"
entity-name="EntityName" //一个实体类可以映射多张表
/>
<id id标签表示的是主键
name="propertyName"
type="typeName"
column="column_name"
length="length"
<generator class="generatorClass"/> 主键生成策略
/>
-1.主键生成策略:主要介绍native和assigned
native适用于代理主键,根据底层数据库对自动生成标识符的方式,自动选择identity、sequence或hilo.
assigned 适用于自然主键,由java应用程序负责生成标识符

6.hibernate单表操作
-1.单一主键
assigned 由java应用程序负责生成(手工赋值)
native 由底层数据库自动生成标识符,如果是mysql就是increment,如果是oracle就是sequence,等等。
-2.基本类型
 映射类型           java类型         标准sql类型
integer/int   java.lang.Integer/int   INTEGER 4字节
long         java.lang.Long/long      BIGINT 8字节
short      java.lang.Short/short       SMALLINT 2字节
byte            java.lang.Byte/byte      TINYINT 1字节
float      java.lang.Float/float      FLOAT 4字节
double      java.lang.Double/double   DOUBLE 8字节
big_decimal     java.math.BigDecimal     NUMERIC
character        java.lang.Character/      CHAR(1) 定长字符

           java.lang.String/char 
string             java.lang.String           VARCHAR 变长字符
boolean      java.lang.Boolean/boolean     BIT 布尔类型
date      java.util.Date/java.sql.Date  Date 日期
timestamp      java.util.Date/java.util.Timestamp    TIMESTAMP 日期
calendar         java.util.Calendar        TIMESTAMP 日期
-3.对象类型
映射类型    java类型      标准sql类型       mysql类型
binary       byte[]         varchar或者BLOB   BLOB
text     java.lang.String   CLOB        TEXT
clob     java.sql.Clob      CLOB       TEXT
blob     java.sql.Blob      BLOB       BLOB
-4.组件属性
实体类中的某个属性属于用户自定义的类的对象
<component name="address" class="Address">
<property name="postcode" column="POSTCODE"></property>
<property name="phone" column="PHONE"></property>
<property name="address" column="ADDRESS"></property>
</component>
-5.用session操作数据库中的数据crud
Students s = (Students)session.get(Students.class, 100);

Students s = (Students)session.load(Students.class, 100);

Students s = (Students)session.get(Students.class, 100);
s.setGender("女");
session.update(s);

Students s = (Students)session.get(Students.class, 100);
session.delete(s);

get与load方法的区别
1.在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象。
load方法会在调用后返回一个代理对象。可通过反射s.getClass().getName()查看名字异同。
该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句。
2.查询数据库中不存在数据的时候,get方法返回null,
load方法抛出异常org.hibernate.ObjectNotFoundException.

7.总结
-1.什么是ORM?为什么要使用hibernate
-2.hibernate开发的基本步骤
-1.编写配置文档hibernate.cfg.xml
-2.编写实体类
-3.生成对应实体类的映射文件并添加到配置文档中
-4.调用hibernate API进行测试
-3.什么是session?
-4.openSession与getCurrentSession()的区别?
-5.单表操作常用方法?
-save delete udpate get load
-6.get与load的区别?

以上是关于hibernate单表映射的主要内容,如果未能解决你的问题,请参考以下文章

hibernate课程 初探单表映射1-4 hibernate开发前准备

Hibernate初探之单表映射——创建对象-关系映射文件

Hibernate初探之单表映射——通过Hibernate API编写访问数据库的代码

hibernate课程 初探单表映射3-5 hibernate增删改查

hibernate课程 初探单表映射2-4 transaction简介

Hibernate单表映射学习笔记之一——hibernalnate开发环境配置