hibernate学习笔记第一天

框架
辅助开发者进行开发,半成品软件,开发者与框架进行合作开发

Hibernate3
Hibernate是一种基于Java的轻量级的ORM框架
基于Java:底层实现是Java语言,可以脱离WEB,在纯JAVA环境下运行
轻量级:与重量级比对,消耗资源比较小,运算速度比较快
ORM:(ORMapping:Object Relation Mapping)对象关系映射
O:Java对象
R:关系型数据库表
M:映射(map:地图 映射)

对象与表的对应关系
1.类与表对应
2.类的属性与表的字段对应
3.类实例(对象)与表记录对应
4.一个类可以对应多个表,一个表可以对应多个类
5.类的属性个数与表的字段个数无需完全对应
类中有5个,表中有5个,只对应3个
6.类的属性名称与表的字段名称无需完全对应
7.对应关系中的数据类型必须是可转化的
8.表与表的关系转化成对象与对象的关系

Java操作数据库:JDBC+SQL
Hibernate可以帮助开发者实现自动的JDBC+自动的SQL语句
工程:
表现层
业务层(逻辑层)
数据层
Hibernate是一种数据层解决方案

数据层解决方案了解:
JDBC
JPA(Java Persistence API )
Hibernate实现JPA
iBatis/MyBatis
其他
Apache
Spring JDBCTemplate、HibernateTemplate、等等
Toplink

Hibernate有什么东西
系统架构图:描述一个技术中所有的相关模块,以及模块与模块之间的关系(上层依赖于下层)
图一:
应用程序 Hibernate 数据库
APP依赖H3 H3依赖DB
H3:需要进行配置
映射:需要使用XML格式
持久化对象:出现在APP于H3间,起桥梁的作用,连接APP与H3
图二:
H3裂变成5块
SessionFactory制作Session
JDBC,JNDI,JTA??
APP中包含一种叫做瞬时对象
APP与H3关联靠Session进行
图三:
H3依赖别人实现的JDBC,JTA,JNDI
H3存在有事务及事务工厂
H3的连接需要别人提供

-----------------------------------------------------------------
课程Hibernate3.6.10版本
下载Hibernate
http://sourceforge.net/projects/hibernate/files/hibernate3/
JBOSS
JBOSS服务器
Hibernate
jbpm

H3目录结构
documentation:帮助文档
lib:开发使用jar包
hibernate3.jar:核心jar包
project:源码
hibernate-testing.jar:测试包

H3开发jar包
一共9个+2个日志包,共11个
日志:
slf4j:简单日志门面
log4j:略
开发使用日志技术:
slf4j整合log4j的jar包:slf4j-log4j12-1.7.2.jar
log4j包:log4j-1.2.16.jar

Hibernate开发
O:对象,也就是封装数据的模型(开发者完成)
R:关系型数据库表(开发者完成)
M:映射关系(开发者完成)

1.创建工程
2.导入jar包
3.做表(R)
CREATE TABLE `tbl_user` (
`uuid` varchar(10) NOT NULL,
`userName` varchar(30) NOT NULL,
`age` int(3) NOT NULL,
`address` varchar(30) NOT NULL,
PRIMARY KEY (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
4.做模型类(O)
UserModel.class
private String uuid;
private String userName;
private Integer age;
private String address;
1.提供无参可访问的构造方法
2.声明一个主键属性(uuid)
3.声明其他的属性
4.提供对应的访问器(getter/setter)
5.映射文件(R)
在Model对应的目录下创建一个文件,名:****Model.hbm.xml
去资源中查找*.hbm.xml
把内容复制到对应的文件中
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
'-//Hibernate/Hibernate Mapping DTD 3.0//EN'
'http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd'>
<hibernate-mapping>
<!-- name写全路径模型名,table写DB中表名 -->
<class name="cn.itcast.h3.helloworld.vo.UserModel" table="tbl_user">
<!-- 模型中的主键名 -->
<id name="uuid">
<!-- assigned -->
<generator class="assigned" />
</id>
<!-- 将模型中的所有属性都写上,使用name -->
<property name="userName"/>
<property name="age"/>
<property name="address"/>
</class>
</hibernate-mapping>
6.系统配置文件
src/hibernate.properties(早期)
src/hibernate.cfg.xml(主流)
在src目录下创建 hibernate.cfg.xml
从资源包中查找资源
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库连接的配置 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/h3</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- 可选配置 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<!-- 资源注册 -->
<mapping resource="cn/itcast/h3/helloworld/vo/UserModel.hbm.xml"/>
</session-factory>
</hibernate-configuration>
8.客户端
//1.加载配置文件hibernate.cfg.xml,得到一个配置对象
Configuration conf = new Configuration().configure();
//2.由配置创建一个SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3.由SessionFactory得到Session
Session s = sf.openSession();
//4.由Session对象获取事务对象Transaction
Transaction t = s.beginTransaction();
//5.完成任务
//5.1创建一个要存储的对象
UserModel um = new UserModel();
um.setUuid("1");
um.setUserName("李若亮");
um.setAge(34);
um.setAddress("传智播客");
//5.2保存
s.save(um);

//6.提交事务
t.commit();
//7.关闭Session
s.close();
//8.关闭SessionFactory(略)
sf.close();

总结:
1.导包
2.ORM:O自己做UsreModel R自己做tbl_user M做映射文件hbm.xml
3.系统配置:cfg.xml
4.客户端

------------------------------------------------
基本操作
1.添加数据
save(obj) 返回的是添加的对象的uuid
2.修改数据
update(obj)
3.删除数据
delete(obj)
4.查单个数据
get(要查询的模型类.class,主键)
load(要查询的模型类.class,主键)
返回一个对象,该对象使用反射思想已经被包装成了要查询的模型类
5.查全部数据
1.Query
使用Query进行查询,Query对象需要依赖Session对象创建
String hql = "from UserModel";
Query q = s.createQuery(hql);
查询完毕,可以将查询结果直接以集合的形式展示
q.list();
得到一个查询结果(已经被封装成了Model)的集合
2.SQLQuery查询
使用SQLQuery查询,SQLQuery对象需要依赖Session对象创建
SQLQuery q = s.createSQLQuery(sql);
查询完毕,可以将查询结果直接以集合的形式展示
q.list();
结果是将每行查询的数据包装成了一个对象数组Object[]
每个数组中包装是当前查询的每个字段的内容

猜你喜欢

转载自www.cnblogs.com/xyhero/p/9348814.html