Hibernate 的一些简单总结及SSH整合
Hibernate 的简述:
Hibernate是一个持久化框架。
Hibernate是一个ORM(Object Relational Mapping 对象关系映射)框架,它是一个面向Java环境的对象/关系 数据库映射工具。完全采用普通的Java对象而不必继承Hibernate中的某个超类或者实现某个接口。
是一个开源的轻量级(就是不需要依赖其他就可以运行)框架 , 不在写复杂的SQL语句,只需要在配置文件中配置即可。
Hibernate是面向对象的程序设计语言和关系数据库之间的桥梁,真正实现了采用面向对象的方式操作关系型数据库。 就是实体类和数据库的表一一对应(所以不需要操作数据库表,而是操作实体类对象即可)
hibernate运行原理
Hibernate优势
- Hibernate会处理映射的Java类来使用XML文件,数据库表和无需编写任何一行代码。
- 尽量减少与智能读取策略数据库的访问。
- 提供了简单的API,用于直接从数据库中存储和检索Java对象。
- 提供数据的简单查询。
Hibernate 的使用
- 下载并部署jar包
- 下载hibernate-release-4.3.11.Final
- maven项目导入依赖
1
2
3
4
5
org.hibernate
hibernate-core
3.6.10.Final
配置Hibernate
配置文件名为
hibernate.cfg.xm(如果和spring ,springmvc整合的话配置在application中)
xml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driverproperty>
<property name="connection.url">jdbc:mysql://192.168.1.15:3306/testproperty>
<property name="connection.username">znsd_testproperty>
<property name="connection.password">123456property>
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialectproperty>
<property name="show_sql">trueproperty>
<property name="format_sql">trueproperty>
<property name="hibernate.hbm2ddl.auto">updateproperty>
<mapping resource="com/znsd/hibernate/bean/Student.hbm.xml" />
session-factory>
hibernate-configuration>hibernate.hbm2ddl.auto 配置
- create-drop:系统启东时先创建数据库,系统退出时删除数据库
- create:系统启动时先删除原有数据库,再创建新的数据库
- update:首先检测数据库是否存在,不存在则创建数据库,存在执行操作。
- validate:验证表结构,不会创建表
* 创建持久化类和映射文件(*.hbm.xml)(如果和spring ,springmvc整合的话*.hbm.xml不需要配置)
**创建持久化类**
java1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
"stu") //对应数据库表名 久化类建议实现Serializable接口,不能使用finnal修饰 (name=
public class StudentInfo implements Serializable {
//主键
private int studentId; // 学生id
private int classId; // 班级号
private String name;
private String sex;
private int age;
private String classNa;
**配置映射文件**(*.hbm.xml)
xml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<hibernate-mapping>
<class name="com.znsd.info.StudentInfo" table="stu">
<id name="studentId" column="studentId">
<generator class="assigned"/>
id>
<property name="classId"/>
<property name="name"/>
<property name="sex"/>
<property name="age" />
<property name="classNa"/>
class>
hibernate-mapping>
Hibernate API
Configuration类:Configuration类负责管理Hibernate的配置信息并根据配置信息启动Hibernate。
SessionFactory接口
SessionFactory实例对应一个数据存储源。
SessionFactory的特点:
线程安全:一个SessionFactory被多个线程所共享。
重量级的:SessionFactory会缓存SQL语句,映射数据等,所以一个应用程序,如果只访问一个数据库,只需建立一个SessionFactory对象即可。
//创建SessionFactory对象 //hibernate3.0版本所使用的方法 //SessionFactory factory = cfg.buildSessionFactory(); //hibernate4.0以上的版本才使用的方法 ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build(); SessionFactory factory = cfg.buildSessionFactory(sr);
Transaction 接口
Transaction接口是Hibernate中的事务接口。在Hibernate进行持久化操作时,必须进行事务控制。
Query和Criteria接口
Query和Criteria接口都是Hibernate中的查询接口。
Query接口:包装了一个HQL(Hibernate Query Language)查询语句。
Criteria接口:擅长执行动态查询。
get 和 load 重点
方法 说 明 Object get(Class clazz, Serializable id) 若数据不存在,返回NULL对象 Object load(Class theClass, Serializable id) 若数据不存在,系统就会抛出异常
get和load都是用来根据id来获取单条记录。
区别:
- get是立即加载,load是延迟加载。
- get返回实体对象,load返回代理对象。
- get返回实体对象如果没有该记录,会返回null。load如果没有该记录,会抛出异常。
- get返回只能使用一级缓存,load可以使用一级和二级缓存。
- 都是通过id获取对象,如果load只获取id则不执行查询语句。
由于load方式使用时,采用延迟加载机制,性能更高,所以一般情况下推荐使用load方式。
Hibernate中Java对象的三种状态
- 瞬时状态(Transient):不曾进行过持久化,未与 session关联,不使用后会被垃圾回收。
- 持久状态(Persistent):当前仅与一个session关联。处于持久状态的对象在session关闭时,会将数据同步到数据库。
- 游离状态(Detached):也称脱管状态,已经进行过持久化,但当前未与session对象关联。
Spring + SpringMVC + Hibernate 整合
applicationContent.xml 配置
xml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="com.znsd.service" />
<context:component-scan base-package="com.znsd.dao" />
<context:component-scan base-package="com.znsd.controller">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
context:component-scan>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/studentm"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialectprop>
<prop key="hibernate.show_sql">trueprop>
<prop key="hibernate.format_sql">trueprop>
<prop key="hibernate.hbm2ddl.auto">updateprop>
props>
property>
<property name="packagesToScan" value="com.znsd.info"/>
bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<context:annotation-config/>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
bean>
beans>
2. springMVC.xml 配置
xml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<mvc:annotation-driven/>
<context:component-scan base-package="com.znsd.controller"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value=""/>
<property name="suffix" value=".jsp"/>
bean>
<mvc:resources mapping="/statics/**" location="/js/"/>
beans>
3. web.xml 配置
xml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>Archetype Created Web Applicationdisplay-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
<context-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:applicationContext.xmlparam-value>
context-param>
<servlet>
<servlet-name>dispatcherServletservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springMVC.xmlparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>dispatcherServletservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
<filter>
<filter-name>SetCharacterEncodingfilter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
<init-param>
<param-name>encodingparam-name>
<param-value>UTF-8param-value>
init-param>
filter>
<filter-mapping>
<filter-name>SetCharacterEncodingfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
web-app>
4. UserDaoImp.java 代码
java1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class UserDaoImp implements UserDao {
private SessionFactory sessionFactory;
/**
* 获取Session
*/
private Session currentSession(){
return this.sessionFactory.openSession();
}
/**
* 获取所有的学生信息
* @return
*/
public List getAllstu() {
List stuList = new ArrayList();
stuList = currentSession().createQuery("from StudentInfo").list();
return stuList;
}
}
有想法的小伙伴可以进入我的Github查看源码
** 在哪里跌倒,就在哪里趴下,休息一会儿你会发现新大陆的哦~ **