内容提要:
1.java web 项目的分层
数据库
分层的目的是:通过层之间自上而下的抽象依赖来降低程序耦合度(解耦)
2.持久层
(1)什么是持久化
持久化就是把数据持久保持在可掉电的存储设备中
存储方式有
一般的企业应用中,是将内存中的数据,持久保持在关系数据库中
(2)什么是对象持久化
对象持久化是指:将对象的状态持久化的保存为数据库中表的记录
在关系数据库中数据的表现形式是表,存储形式是记录
在面向对象(OOP)中数据的表现形式的类,存储形式是对象的状态
3.ORM
(1)ORM
O:Object 指对象
R:Relation 指关系
M:Mapping 指映射
(2)为什么需要ORM
在高级编程语言里,都是面向对象(OOP)的,类和对象 ,主要概念有:继承,关联,多态等;
在关系数据库里,是关系表和记录 ,主要概念有:表,主键,外键等
OOP与传统关系型数据库存在不匹配问题
解决不匹配的方法
(3)ORM映射基础
数据库中的表结构和类结构的映射
表中的记录和对象的映射
表的主键和对象ID的映射(OID)
表的字段和类的属性的映射
什么是Hibernate?
Hibernate之父:Gavin King
JBoss核心成员之一
EJB3.0专家委员会成员
《Hibernate In Action》作者
2001年开始开发Hibernate
2003年Hibernate发展为Java世界主流持久层框架
充满激情
脾气倔强
永不言败
Hibernate一个开源的Java ORM
框架
提供了一种,强大的对象到关系数据库的映射机制
强大的查询功能
Hibernate官方网址:http://www.hibernate.org
Hibernate归属于JBoss社团,Hibernate3这个版本已经相当成熟,我们学习3.6这个版本
Hibernate第一个版本在2001年底推出,目前最新版本4.x
Hibernate的优势
提高开发效率
更贴近于OO(OOA、OOD、OOP)思想
轻量级、无侵入性
开源、成熟、流行
Hibernate3.6软件包介绍
第一个Hibernate项目
使用框架最重要的就是导入jar包和添加配置文件
配置文件主要有hibernate.cfg.xml 和 hibernate.properties
xml和properties两种,这两个文件的作用是一样的,添加一个就行,推荐用xml格式的
在下载的hibernate软件包的/etc目录下有示例配置文件。
在配置文件中可以指定:
数据库的url, 用户名,密码,JDBC驱动类,方言等
启动Hibernate会在类路径下找这个配置文件
实体映射文件(hbm.xml,对象模型和关系模型映射)
第一个项目的开发步骤:
1.创建一个实体类User.java
User.java
package com.xunpoit.entity; public class User { private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
添加实体映射配置文件User.hbm.xml 与实体类同目录
User.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 package="com.xunpoit.entity"> <class name="User" table="t_user"> <id name="id"> <generator class="native" /> </id> <property name="name" type="string" length="255" column="name" not-null="true" /> <property name="password" type="string" length="20" column="password" not-null="true" /> </class> </hibernate-mapping>
添加Hibernate核心配置文件 hibernate.cfg.xml到src目录下
hibernate.cfg.xml
<!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="show_sql">true</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/testhibernate</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">962297fabaoyi</property> <mapping resource="com/xunpoit/entity/User.hbm.xml"/> </session-factory> </hibernate-configuration>
在类路径下添加log4j.properties
log4j.properties
### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file hibernate.log ### #log4j.appender.file=org.apache.log4j.FileAppender #log4j.appender.file.File=hibernate.log #log4j.appender.file.layout=org.apache.log4j.PatternLayout #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change ‘info‘ to ‘debug‘ ### log4j.rootLogger=warn, stdout #log4j.logger.org.hibernate=info log4j.logger.org.hibernate=warn ### log HQL query parser activity #log4j.logger.org.hibernate.hql.ast.AST=debug ### log just the SQL #log4j.logger.org.hibernate.SQL=debug ### log JDBC bind parameters ### log4j.logger.org.hibernate.type=warn #log4j.logger.org.hibernate.type=debug ### log schema export/update ### log4j.logger.org.hibernate.tool.hbm2ddl=warn ### log HQL parse trees #log4j.logger.org.hibernate.hql=debug ### log cache activity ### #log4j.logger.org.hibernate.cache=debug ### log transaction activity #log4j.logger.org.hibernate.transaction=debug ### log JDBC resource acquisition #log4j.logger.org.hibernate.jdbc=debug ### enable the following line if you want to track down connection ### ### leakages when using DriverManagerConnectionProvider ### #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
创建UserManager.java类 来测试向数据库添加一条数据
package com.xunpoit.manager; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; import com.xunpoit.entity.User; public class UserManager { public static void main(String[] args) { Configuration config = new Configuration().configure(); SchemaExport export = new SchemaExport(config); export.create(true, true); SessionFactory factory = config.buildSessionFactory(); Session session = factory.openSession(); User user = new User(); user.setName("张三"); user.setPassword("123456"); Transaction tran = session.beginTransaction(); session.save(user); tran.commit(); } }
在mysql数据库创建数据库 testhibernate
然后运行UserManager
可看到在数据库testhibernate中,hibernate自动根据实体映射文件创建了表,并插入了一条数据。
Hibernate中重要的类的介绍(核心接口)
SessionFactory 保存了对应当前数据库配置的所有映射关系,负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。初始化复杂、费时,一般一个应用中有一个实例就以了,它是线程安全的。
Session
是hibernate持久化操作的基础,所有的持久化操作都是在Session基础上完成的,相当于JDBC中的Connection;它关联了数据库对象,同时它也是Transaction的工厂,Session中提供了一系列的持久化操作的方法。
Transaction
事务,这个对象由Session产生,生命周期短于Session,也就是说,一个Session可以包括多个事务
ConnectionProvider 用于生成与数据库的连接对象,同时,它也是数据库连接的缓冲池
TransactionFactory
产生Transaction的工厂
原文:http://www.cnblogs.com/fabaoyi/p/3562026.html