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&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 API编写访问数据库的代码
hibernate课程 初探单表映射3-5 hibernate增删改查