1.持久化对象POJO编写规则:

1) 有空參public构造器;

2) 提供标识属性。映射数据表主键;

3) 属性提供setter和getter方法。

4) 属性使用基本数据类型的包装类型。基本类型在数据库中不能区分null和0;

5) 不使用final修饰。

假设使用final则无法生成代理对象。当使用了final。load查询将如同get查询。

2.POJO的OID:

OID是持久化类与数据表主键相应的属性,用来唯一区分持久化对象。

自然主键:採用数据库中有意义的列的值作为主键(有意义)

代理主键:採用自己主动生成的流水号、UUID作为主键(无意义。推荐)

3.数据类型:

基本类型无法区分null和0,开发中POJO属性都使用包装类型。

4.持久化类配置POJO.hbm.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml

version
="1.0"

encoding
="UTF-8"?>
<!DOCTYPE

hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate
Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
package="POJO所在包" -->
<hibernate-mapping

package
="cn.cvu.domain">
    <!--
name="POJO类" table="数据库中的表单" catalog="数据库。相应项目的hibernate核心配置文件里<property name='hibernate.connection.url'>jdbc:mysql:///数据库</property> " -->
    <class

name
="User"

table
="table_user"

catalog
="db_hibernate">
        <!--
name="POJO相应的属性" column="表单的主键 列" type="POJO属性的数据类型" -->
        <id

name
="id"

column
="id"

type
="int">
            <!--
class="主键生成策略" -->
            <generator

class
="native"></generator>
            <!--
经常使用策略:increment、identity、sequence、native、uuid、assigned -->
        </id>
        <!--
name="POJO中相应属性" colunm="表单中的 列" type="POJO数据类型" -->
  <!—hibernate定义的数据类型string
-->
        <property

name
="name"

column
="name"

type
="string"></property>  
  <!—java定义的为int
-->
        <property

name
="age" 

column
="age"  

type
="int"  

></
property
  <!—sql定义的数据类型使用sql-type声明
-->
        <property

name
="city"

column
="city"

sql-type
="string"></property>  
        <!--
经常使用属性:length:列值长度、not-null:非空true/false、unique:唯一true/false  -->
    </class>
</hibernate-mapping>

1)主键生成策略increment:顶层递增:

由hibernate自己主动完毕,原理:先查询最大值。再插入此值加一。OID必须为long、int或short类型。

长处:跨数据库。

缺点:多线程并发訪问问题。

2)主键生成策略identity:底层递增:

由数据库自己主动完毕,要求数据库必须支持自增主键。mysql支持。oracle不支持。OID必须为long、int或short类型。

长处:无并发訪问问题。

3)主键生成策略sequence:序列:

由数据库自己主动完毕递增。要求数据库必须支持序列。mysql不支持。oracle支持。OID必须为long、int或short类型。

Oracle:

1创建序列:create sequence myseq;

2调用序列:insert into customer values (myseq.nextval); #序列加一

4)主键生成策略native:本地:

採用数据库支持的自增策略。 mysql:identity,oracle:sequence。

OID必须为long、int或short类型。

长处:跨数据库平台。

5)主键生成策略uuid:标识符:

由数据库自己主动创建。 uuid是32位唯一字符串。表单主键使用varchar类型,POJO相应属性是String类型。

6)主键生成策略assigned:手动指定:

在调用hibernate时手动指定主键的值,用于自然主键(有意义的)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public

void

testInsertAssigned() {
        Session
session = UtilGetSesstion.openSession();
        Transaction
transaction = session.beginTransaction();
         
        User
user =
new

User();
        user.setId(20130124);      
//手动设置主键
        user.setName("EminemXXX");
        user.setAge(42);
        user.setCity("NewYorkXXX");
        session.save(user);
         
        transaction.commit();
        session.close();
    }

7)主键生成策略:复合主键:

(1)编写POJO类 Person.java:

1
2
3
4
5
6
7
8
9
10
11
package

cn.cvu.domain;
import

java.io.Serializable;
//务必事先序列化接口
public

class

Person
implements

Serializable {
    private

String firstName;      
//相应表单的复合主键
    private

String secondName;     
//相应表单的复合主键
    private

String address;
     
    //get/set
    //toString
}

(2)配置POJO.hbm.xml:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml

version
="1.0"

encoding
="UTF-8"?>
<!DOCTYPE

hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate
Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping

package
="cn.cvu.domain">
    <class

name
="Person"

table
="table_person"

catalog
="db_hibernate">
        <!--
复合id -->
        <composite-id>
            <!--
主键列 name="POJO属性" column="表单列名" -->
            <key-property

name
="firstName"

column
="nameFirst"></key-property>
            <key-property

name
="secondName"

column
="nameFirst"></key-property>
        </composite-id>
        <!--
普通列 name="POJO属性" column="表单列名" type="数据类型" -->
        <property

name
="address"

column
="addr"

type
="string"></property>
    </class>
</hibernate-mapping>

(3)配置hibernate.cfg.xml,载入Person.hbm.xml文件:

(4)操作类的方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public

void

testInsert() {
        Configuration
configuration =
new

Configuration().configure();
        SessionFactory
sessionFactory = configuration.buildSessionFactory();
        Session
session = sessionFactory.openSession();
        Transaction
transaction = session.beginTransaction();
         
        Person
person =
new

Person();
        person.setFirstName("C");
        person.setSecondName("Vigiles");
        person.setAddress("Beijng");
        session.save(person);
         
        transaction.commit();
        session.close();
        sessionFactory.close();
    }

(5)结果:

INFO: HHH000262: Table not found: tb_person

2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute

ERROR: HHH000388: Unsuccessful: create table db_hibernate.tb_person (namef varchar(255) not null, names varchar(255) not null, age integer, city varchar(255), primary key
(namef, names)) type=InnoDB

2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute

ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 7

2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000232: Schema update complete

?
1
2
3
<!--
方言-指定数据库为5.1版本号之后的SQL语言 -->
        <property

name
="hibernate.dialect">
  org.hibernate.dialect.MySQL5InnoDBDialect</property>

-end

IT忍者神龟之Hibernat持久化对象-数据表映射配置回想的更多相关文章

  1. 以对象的方式来访问xml数据表(三)

    怎样以对象的方式来访问xml数据表? 在讲如何具体实现(二)中所说的专门用于访问xml文件的动态链接库之前,我们先来看看这个动态链接库具体要实现什么功能. 动态链接库IXmlDB.dll的功能: 1. ...

  2. 2.一起来学hibernate之配置文件1与持久化对象

    学框架,配置都是不可少的,有了配置,框架才知道我们想做什么,才知道如何去执行我们需要的操作! hibernate的配置文件,总体来说分为两个部分: 1.主配置文件hibernate.cfg.xml文件 ...

  3. Hibernate入门5持久化对象关系和批量处理技术

    Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...

  4. Hibernate,Session方法使得java对象进入持久化状态;持久化对象特征

    以下情况java对象进入持久化状态: session.save()方法把临时对象转变为持久化对象. session.load()和session.get()方法得到的对象总是处于持久化状态. sess ...

  5. Hibernate之Session对象的相关方法以及持久化对象的状态

    一.持久化对象的状态        站在持久化的角度, Hibernate 把对象分为 4种状态: 持久化状态,临时状态,游离状态,删除状态.Session 的特定方法能使对象从一个状态转换到另一个状 ...

  6. Hibernate持久化对象

    持久化类应遵循的规则: 有无参构造器,构造器的修饰符>=默认访问控制符 有标识属性,映射数据库表的主键,建议使用基本类型的包装类 每个成员有setter和getter 非final修饰的类 重写 ...

  7. hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)

    三态的基本概念: 1,  暂时状态(Transient):也叫自由态,仅仅存在于内存中,而在数据库中没有对应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫暂时对象 ...

  8. Hibernate 持久化对象的状态

    持久化对象有3种状态:1.持久化状态      2.临时状态      3.游离状态 Session 的特定方法能使对象从一个状态转换到另一个状态临时对象(transient)•    在使用代理主键 ...

  9. hibernate 持久化对象的生命周期 2.1

    持久化对象的生命周期 瞬态(自由态) 表示对象在内存中存在,在数据库中没有数据相关,比如刚刚new出来的一个对象 持久态 持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象 ...

随机推荐

  1. echarts统计图踩坑合集

    1:折线图条的颜色修改 series : [ { name : 'SBP(收缩压)', type : 'line', itemStyle : { normal : { lineStyle:{ colo ...

  2. Dubbo学习总结(4)——Dubbo基于Zookeeper实现分布式实例

    入门实例解析 第一:provider-提供服务和相应的接口 创建DemoService接口 [java] view plaincopyprint? <span style="font- ...

  3. bootstrap课程13 bootstrap的官方文档中有一些控件的使用有bug,如何解决这个问题

    bootstrap课程13  bootstrap的官方文档中有一些控件的使用有bug,如何解决这个问题 一.总结 一句话总结:因为演示是正常的,所以检查演示效果的代码,把那一段相关的都弄过来就可以了 ...

  4. (错误记录)Vue: Unknown custom element

    错误: vue.js:634 [Vue warn]: Unknown custom element: <ve-pie> - did you register the component c ...

  5. PythonNET网络编程3

    IO IO input output 在内存中存在数据交换的操作都可以认为是IO操作 和终端交互 : input print 和磁盘交互 : read write 和网络交互 : recv send ...

  6. 推荐一款优雅高效的免费在线APP原型工具

    有段时间没有推荐干货给大伙了,今天是时候把压箱底的东西拿出来分享给大家了! 想要学习原型图绘制的小伙伴可以看过来,适合零基础的小白,五分钟就可以上手,绘制自己想要的产品原型图. 官方介绍:用户只需输入 ...

  7. Mycat快速入门

    1.Mycat介绍 Mycat 是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的的Server,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以 ...

  8. CSS笔记 - fgm练习 - 鼠标移入移出div显示隐藏 CSS样式部分

    问题总结: 1. checkbox和下面隐藏的div对齐,是在清除了默认样式的前提下,而不需要额外设置float: left; 2. 隐藏的div这里不需要专门设置宽高.居中,是靠内容和padding ...

  9. jmeter--使用badboy录制脚本

    JMeter录制脚本有多种方法,其中最常见的方法是用第三方工具badboy录制,另外还有JMeter自身设置(Http代理服务器+IE浏览器设置)来录制脚本,但这种方法录制出来的脚本比较多且比较乱,个 ...

  10. TensorFlow 学习(十五)—— tensorflow.python.platform

    tensorflow.python.platform 下的常用工具类和工具函数:tensorflow/tensorflow/python/platform at master · tensorflow ...