SlideShare uma empresa Scribd logo
1 de 13
spring4.x + hibernate4.x 配置详解
关于 spring 和 hibernate 的使用以及特征等等,在此不再啰嗦,相信大家也都知道,或者去搜
索一下即可。
本篇博文的内容主要是我最近整理的关于 spring4.x 和 hibernate 4.x 相关配置和使用方式,
当然 spring3.x 以及 hibernate4.x 也可以借鉴。
首先是配置文件 web.xml 增加以下代码即可
<!-- 加载 spring 相关的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/applicationContext.xml</param-value>
</context-param>
<!-- 启用 spring 监听 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</l
istener-class>
</listener>
然后建立 applicationContext.xml 文件 ,src 下。 文件内容如下,注释我尽量写的很详细
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://ww
w.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="ht
tp://www.springframework.org/schema/tx"
xmlns:cache="http://www.springframework.org/schema/cache" xmlns:p="http://
www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/cache http://www.springframewor
k.org/schema/cache/spring-cache-4.0.xsd">
<!-- 引入 properties 文件 -->
<context:property-placeholder location="classpath*:/appConfig.properties" />
<!-- 定义数据库连接池数据源 bean destroy-method="close"的作用是当数据
库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSourc
e"
destroy-method="close">
<!-- 设置 JDBC 驱动名称 -->
<property name="driverClass" value="${jdbc.driver}" />
<!-- 设置 JDBC 连接 URL -->
<property name="jdbcUrl" value="${jdbc.url}" />
<!-- 设置数据库用户名 -->
<property name="user" value="${jdbc.username}" />
<!-- 设置数据库密码 -->
<property name="password" value="${jdbc.password}" />
<!-- 设置连接池初始值 -->
<property name="initialPoolSize" value="5" />
</bean>
<!-- 配置 sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- hibernate 的相关属性配置 -->
<property name="hibernateProperties">
<value>
<!-- 设置数据库方言 -->
hibernate.dialect=org.hibernate.dialect.MySQLDialect
<!-- 设置自动创建|更新|验证数据库表结构 -->
hibernate.hbm2ddl.auto=update
<!-- 是否在控制台显示 sql -->
hibernate.show_sql=true
<!-- 是否格式化 sql,优化显示 -->
hibernate.format_sql=true
<!-- 是否开启二级缓存 -->
hibernate.cache.use_second_level_cache=false
<!-- 是否开启查询缓存 -->
hibernate.cache.use_query_cache=false
<!-- 数据库批量查询最大数 -->
hibernate.jdbc.fetch_size=50
<!-- 数据库批量更新、添加、删除操作最大数 -->
hibernate.jdbc.batch_size=50
<!-- 是否自动提交事务 -->
hibernate.connection.autocommit=true
<!-- 指定 hibernate 在何时释放 JDBC 连接 -->
hibernate.connection.release_mode=auto
<!-- 创建 session 方式 hibernate4.x 的方式 -->
hibernate.current_session_context_class=org.springframework.or
m.hibernate4.SpringSessionContext
<!-- javax.persistence.validation.mode 默认情况下是 auto 的,
就是说如果不设置的话它是会自动去你的 classpath 下面找一个 bean-validation**
包
所以把它设置为 none 即可 -->
javax.persistence.validation.mode=none
</value>
</property>
<!-- 自动扫描实体对象 tdxy.bean 的包结构中存放实体类 -->
<property name="packagesToScan" value="tdxy.bean" />
</bean>
<!-- 定义事务管理 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager
">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义 Autowired 自动注入 bean -->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotati
onBeanPostProcessor"/>
<!-- 扫描有注解的文件 base-package 包路径 -->
<context:component-scan base-package="tdxy"/>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 事务执行方式
REQUIRED:指定当前方法必需在事务环境中运行,
如果当前有事务环境就加入当前正在执行的事务环境,
如果当前没有事务,就新建一个事务。
这是默认值。
-->
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="import*" propagation="REQUIRED" />
<!--
指定当前方法以非事务方式执行操作,如果当前存在事务,就
把当前事务挂起,等我以非事务的状态运行完,再继续原来的事务。
查询定义即可
read-only="true" 表示只读
-->
<tx:method name="*" propagation="NOT_SUPPORTED" read-only
="true" />
</tx:attributes>
</tx:advice>
<!-- 定义切面,在 * tdxy.*.service.*ServiceImpl.*(..) 中执行有关的 hibernat
e session 的事务操作 -->
<aop:config>
<aop:pointcut id="serviceOperation" expression="execution(* tdxy.*.serv
ice.*Service.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
</aop:config>
</beans>
applicationContext.xml 文件引用了一个 properties 文件 ,该文件也在 src 下,appConf
ig.properties 内容可以自己定义
?
1
2
3
4
5
########################数据库连接信息#############
jdbc.username = root
jdbc.password = admin
jdbc.url =
jdbc:mysql://localhost:3306/tdxy?useUnicode=true&characterEncoding=
UTF-8
jdbc.driver = com.mysql.jdbc.Driver
自己写了一个 test 用的 basedao
package tdxy.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
/**
*
* @Title: BaseDao.java
* @Package tdxy.dao
* @Description: TODO(baseDao 数据库操作实现类)
* @author dapeng
* @date 2014 年 5 月 7 日 下午 5:09:22
* @version V1.0
*/
@Repository
public class BaseDao {
/**
* Autowired 自动装配 相当于 get() set()
*/
@Autowired
protected SessionFactory sessionFactory;
/**
* gerCurrentSession 会自动关闭 session,使用的是当前的 session 事务
*
* @return
*/
public Session getSession() {
return sessionFactory.getCurrentSession();
}
/**
* openSession 需要手动关闭 session 意思是打开一个新的 session
*
* @return
*/
public Session getNewSession() {
return sessionFactory.openSession();
}
public void flush() {
getSession().flush();
}
public void clear() {
getSession().clear();
}
/**
* 根据 id 查询信息
*
* @param id
* @return
*/
@SuppressWarnings("rawtypes")
public Object load(Class c, String id) {
Session session = getSession();
return session.get(c, id);
}
/**
* 获取所有信息
*
* @param c
*
* @return
*/
@SuppressWarnings({ "rawtypes" })
public List getAllList(Class c) {
String hql = "from " + c.getName();
Session session = getSession();
return session.createQuery(hql).list();
}
/**
* 获取总数量
*
* @param c
* @return
*/
@SuppressWarnings("rawtypes")
public Long getTotalCount(Class c) {
Session session = getNewSession();
String hql = "select count(*) from " + c.getName();
Long count = (Long) session.createQuery(hql).uniqueResult();
session.close();
return count != null ? count.longValue() : 0;
}
/**
* 保存
*
* @param bean
*
*/
public void save(Object bean) {
try {
Session session = getNewSession();
session.save(bean);
session.flush();
session.clear();
session.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 更新
*
* @param bean
*
*/
public void update(Object bean) {
Session session = getNewSession();
session.update(bean);
session.flush();
session.clear();
session.close();
}
/**
* 删除
*
* @param bean
*
*/
public void delete(Object bean) {
Session session = getNewSession();
session.delete(bean);
session.flush();
session.clear();
session.close();
}
/**
* 根据 ID 删除
*
* @param c 类
*
* @param id ID
*
*/
@SuppressWarnings({ "rawtypes" })
public void delete(Class c, String id) {
Session session = getNewSession();
Object obj = session.get(c, id);
session.delete(obj);
flush();
clear();
}
/**
* 批量删除
*
* @param c 类
*
* @param ids ID 集合
*
*/
@SuppressWarnings({ "rawtypes" })
public void delete(Class c, String[] ids) {
for (String id : ids) {
Object obj = getSession().get(c, id);
if (obj != null) {
getSession().delete(obj);
}
}
}
}
不知大家有没有注意 applicationContext.xml 这样一句代码
<!-- 设置自动创建|更新|验证数据库表结构 -->
hibernate.hbm2ddl.auto=update
这个意思是 只要在实体 bean 指定了 entity,那么在数据库会自动创建对应的表和表结构
test 用的一个实体 bean
package tdxy.bean;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
/**
*
* @ClassName: UserInfoBean
* @Description: TODO(用户信息类)
* @author dapeng
* @date 2014 年 5 月 7 日 上午 12:13:44
* @version V1.0
*
*/
@Entity
public class UserInfoBean implements Serializable {
private static final long serialVersionUID = 7280747949998651159L;
@Id
private String id;
/**
* 昵称
*/
private String nickName;
private String pwd;
/**
* 等级
*
*/
private String level;
/**
* 经验值
*/
private String emValue;
/**
* 性别(0 男 1 女)
*/
private String sex;
private String birthday;
private String qq;
private String email;
/**
* 头像
*/
private String img;
/**
* 所在地
*/
private String address;
/**
* 签名
*/
private String qmd;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String getEmValue() {
return emValue;
}
public void setEmValue(String emValue) {
this.emValue = emValue;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getQmd() {
return qmd;
}
public void setQmd(String qmd) {
this.qmd = qmd;
}
}
当应用成功启动之后,数据库会出现表和结构,即刚才定义的 bean 是一样的,大家可以自己查
看一下即可。
以下是 test 的 Service
package tdxy.user.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tdxy.bean.UserInfoBean;
import tdxy.dao.BaseDao;
import tdxy.util.TdxyUtil;
@Service
public class UserInfoService {
@Autowired
private BaseDao baseDao;
public UserInfoBean queryUserInfoById(String id) {
return (UserInfoBean) baseDao.load(UserInfoBean.class, id);
}
public void addUserInfo(UserInfoBean userInfo) {
try {
userInfo.setId(TdxyUtil.getId());
userInfo.setAddress("32132");
baseDao.save(userInfo);
} catch (Exception e) {
e.printStackTrace();
}
}
}

Mais conteúdo relacionado

Mais procurados

Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要yiditushe
 
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合Justin Lin
 
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Justin Lin
 
Spring 2.0 技術手冊導讀
Spring 2.0 技術手冊導讀Spring 2.0 技術手冊導讀
Spring 2.0 技術手冊導讀Justin Lin
 
Spring 2.0 技術手冊第六章 - Hibernate 與 Spring
Spring 2.0 技術手冊第六章 - Hibernate 與 SpringSpring 2.0 技術手冊第六章 - Hibernate 與 Spring
Spring 2.0 技術手冊第六章 - Hibernate 與 SpringJustin Lin
 
Spring 2.0 技術手冊第九章 - API 封裝
Spring 2.0 技術手冊第九章 - API 封裝Spring 2.0 技術手冊第九章 - API 封裝
Spring 2.0 技術手冊第九章 - API 封裝Justin Lin
 
Spring框架,技术详解及使用指导
Spring框架,技术详解及使用指导Spring框架,技术详解及使用指导
Spring框架,技术详解及使用指导yiditushe
 
Spring ioc详解
Spring ioc详解Spring ioc详解
Spring ioc详解ygj_2008
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析Justin Lin
 
Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Justin Lin
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile ServicesKuo-Chun Su
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big DataKuo-Chun Su
 
Jetty服务器架构及调优.v2 2011-5
Jetty服务器架构及调优.v2 2011-5Jetty服务器架构及调优.v2 2011-5
Jetty服务器架构及调优.v2 2011-5lovingprince58
 
Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试Yiwei Ma
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹Jace Ju
 
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)wang hongjiang
 
Uliweb比较与实践 2013
Uliweb比较与实践 2013Uliweb比较与实践 2013
Uliweb比较与实践 2013modou li
 

Mais procurados (20)

Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要
 
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
 
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援
 
Spring 2.0 技術手冊導讀
Spring 2.0 技術手冊導讀Spring 2.0 技術手冊導讀
Spring 2.0 技術手冊導讀
 
Spring 2.0 技術手冊第六章 - Hibernate 與 Spring
Spring 2.0 技術手冊第六章 - Hibernate 與 SpringSpring 2.0 技術手冊第六章 - Hibernate 與 Spring
Spring 2.0 技術手冊第六章 - Hibernate 與 Spring
 
Spring 2.0 技術手冊第九章 - API 封裝
Spring 2.0 技術手冊第九章 - API 封裝Spring 2.0 技術手冊第九章 - API 封裝
Spring 2.0 技術手冊第九章 - API 封裝
 
Spring框架,技术详解及使用指导
Spring框架,技术详解及使用指导Spring框架,技术详解及使用指导
Spring框架,技术详解及使用指导
 
Spring ioc详解
Spring ioc详解Spring ioc详解
Spring ioc详解
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
 
Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big Data
 
Jsp
JspJsp
Jsp
 
Jetty服务器架构及调优.v2 2011-5
Jetty服务器架构及调优.v2 2011-5Jetty服务器架构及调优.v2 2011-5
Jetty服务器架构及调优.v2 2011-5
 
Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹
 
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)
 
Uliweb比较与实践 2013
Uliweb比较与实践 2013Uliweb比较与实践 2013
Uliweb比较与实践 2013
 

Destaque

Destaque (20)

Schoeller Arca Systems
Schoeller Arca SystemsSchoeller Arca Systems
Schoeller Arca Systems
 
First Impressions: Trust trumps Competence
First Impressions: Trust trumps Competence First Impressions: Trust trumps Competence
First Impressions: Trust trumps Competence
 
Portfolio_from_Primedia_web
Portfolio_from_Primedia_webPortfolio_from_Primedia_web
Portfolio_from_Primedia_web
 
AXA EN LA RED - Nuestra experiencia en la red 2.0
AXA EN LA RED - Nuestra experiencia en la red 2.0AXA EN LA RED - Nuestra experiencia en la red 2.0
AXA EN LA RED - Nuestra experiencia en la red 2.0
 
Bases tecnicas prj
Bases tecnicas prjBases tecnicas prj
Bases tecnicas prj
 
Plataformas web
Plataformas webPlataformas web
Plataformas web
 
Fab collab creations
Fab collab creationsFab collab creations
Fab collab creations
 
Yo Tambien Internet
Yo Tambien InternetYo Tambien Internet
Yo Tambien Internet
 
BuildAR
BuildARBuildAR
BuildAR
 
Fedora – Die Feature-Fabrik
Fedora – Die Feature-FabrikFedora – Die Feature-Fabrik
Fedora – Die Feature-Fabrik
 
Diario la calle 13 julio
Diario la calle 13 julioDiario la calle 13 julio
Diario la calle 13 julio
 
Plantronics cs530 quick start guide
Plantronics cs530 quick start guidePlantronics cs530 quick start guide
Plantronics cs530 quick start guide
 
3a vectoresfundamentos
3a vectoresfundamentos3a vectoresfundamentos
3a vectoresfundamentos
 
Grupos fisiologia
Grupos fisiologiaGrupos fisiologia
Grupos fisiologia
 
Aguascalientes (promocion)
Aguascalientes (promocion)Aguascalientes (promocion)
Aguascalientes (promocion)
 
Depression und Suizid, Erkennen, verhindern, helfen
Depression und Suizid, Erkennen, verhindern, helfenDepression und Suizid, Erkennen, verhindern, helfen
Depression und Suizid, Erkennen, verhindern, helfen
 
Folleto Institucional EBC
Folleto Institucional EBCFolleto Institucional EBC
Folleto Institucional EBC
 
Vidyard for Oracle Eloqua
Vidyard for Oracle EloquaVidyard for Oracle Eloqua
Vidyard for Oracle Eloqua
 
Segundo informe de actividades Diciembre 2015- Enero 2016
Segundo informe de actividades Diciembre 2015- Enero 2016Segundo informe de actividades Diciembre 2015- Enero 2016
Segundo informe de actividades Diciembre 2015- Enero 2016
 
Gelak ketawa
Gelak ketawaGelak ketawa
Gelak ketawa
 

Semelhante a Spring4.x + hibernate4.x_配置详解

Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践yiditushe
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非Tony Deng
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践taobao.com
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料yiditushe
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制maclean liu
 
基于Ivy ant的java构建初探
基于Ivy ant的java构建初探基于Ivy ant的java构建初探
基于Ivy ant的java构建初探Anson Yang
 
用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Servicesjavatwo2011
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0Anthony Chen
 
Flex 4.5 action custom component development
Flex 4.5 action custom component developmentFlex 4.5 action custom component development
Flex 4.5 action custom component developmentjexchan
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集zhen chen
 
Liferay环境搭建
Liferay环境搭建Liferay环境搭建
Liferay环境搭建donotbeevil
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记yiditushe
 
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletJustin Lin
 
Ibatis技术讲座
Ibatis技术讲座Ibatis技术讲座
Ibatis技术讲座xujie
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程yiditushe
 

Semelhante a Spring4.x + hibernate4.x_配置详解 (20)

Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
OSGi Small Lab
OSGi Small LabOSGi Small Lab
OSGi Small Lab
 
Exodus2 大局观
Exodus2 大局观Exodus2 大局观
Exodus2 大局观
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
基于Ivy ant的java构建初探
基于Ivy ant的java构建初探基于Ivy ant的java构建初探
基于Ivy ant的java构建初探
 
用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
 
Flex 4.5 action custom component development
Flex 4.5 action custom component developmentFlex 4.5 action custom component development
Flex 4.5 action custom component development
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集
 
Liferay环境搭建
Liferay环境搭建Liferay环境搭建
Liferay环境搭建
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记
 
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
 
Js培训
Js培训Js培训
Js培训
 
Ibatis技术讲座
Ibatis技术讲座Ibatis技术讲座
Ibatis技术讲座
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 

Spring4.x + hibernate4.x_配置详解

  • 1. spring4.x + hibernate4.x 配置详解 关于 spring 和 hibernate 的使用以及特征等等,在此不再啰嗦,相信大家也都知道,或者去搜 索一下即可。 本篇博文的内容主要是我最近整理的关于 spring4.x 和 hibernate 4.x 相关配置和使用方式, 当然 spring3.x 以及 hibernate4.x 也可以借鉴。 首先是配置文件 web.xml 增加以下代码即可 <!-- 加载 spring 相关的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/applicationContext.xml</param-value> </context-param> <!-- 启用 spring 监听 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</l istener-class> </listener> 然后建立 applicationContext.xml 文件 ,src 下。 文件内容如下,注释我尽量写的很详细 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://ww w.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="ht tp://www.springframework.org/schema/tx" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:p="http:// www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  • 2. http://www.springframework.org/schema/cache http://www.springframewor k.org/schema/cache/spring-cache-4.0.xsd"> <!-- 引入 properties 文件 --> <context:property-placeholder location="classpath*:/appConfig.properties" /> <!-- 定义数据库连接池数据源 bean destroy-method="close"的作用是当数据 库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSourc e" destroy-method="close"> <!-- 设置 JDBC 驱动名称 --> <property name="driverClass" value="${jdbc.driver}" /> <!-- 设置 JDBC 连接 URL --> <property name="jdbcUrl" value="${jdbc.url}" /> <!-- 设置数据库用户名 --> <property name="user" value="${jdbc.username}" /> <!-- 设置数据库密码 --> <property name="password" value="${jdbc.password}" /> <!-- 设置连接池初始值 --> <property name="initialPoolSize" value="5" /> </bean> <!-- 配置 sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- 数据源 --> <property name="dataSource" ref="dataSource" /> <!-- hibernate 的相关属性配置 --> <property name="hibernateProperties"> <value> <!-- 设置数据库方言 --> hibernate.dialect=org.hibernate.dialect.MySQLDialect <!-- 设置自动创建|更新|验证数据库表结构 --> hibernate.hbm2ddl.auto=update <!-- 是否在控制台显示 sql --> hibernate.show_sql=true <!-- 是否格式化 sql,优化显示 --> hibernate.format_sql=true <!-- 是否开启二级缓存 --> hibernate.cache.use_second_level_cache=false <!-- 是否开启查询缓存 --> hibernate.cache.use_query_cache=false <!-- 数据库批量查询最大数 --> hibernate.jdbc.fetch_size=50
  • 3. <!-- 数据库批量更新、添加、删除操作最大数 --> hibernate.jdbc.batch_size=50 <!-- 是否自动提交事务 --> hibernate.connection.autocommit=true <!-- 指定 hibernate 在何时释放 JDBC 连接 --> hibernate.connection.release_mode=auto <!-- 创建 session 方式 hibernate4.x 的方式 --> hibernate.current_session_context_class=org.springframework.or m.hibernate4.SpringSessionContext <!-- javax.persistence.validation.mode 默认情况下是 auto 的, 就是说如果不设置的话它是会自动去你的 classpath 下面找一个 bean-validation** 包 所以把它设置为 none 即可 --> javax.persistence.validation.mode=none </value> </property> <!-- 自动扫描实体对象 tdxy.bean 的包结构中存放实体类 --> <property name="packagesToScan" value="tdxy.bean" /> </bean> <!-- 定义事务管理 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager "> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 定义 Autowired 自动注入 bean --> <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotati onBeanPostProcessor"/> <!-- 扫描有注解的文件 base-package 包路径 --> <context:component-scan base-package="tdxy"/> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 事务执行方式 REQUIRED:指定当前方法必需在事务环境中运行, 如果当前有事务环境就加入当前正在执行的事务环境, 如果当前没有事务,就新建一个事务。 这是默认值。 --> <tx:method name="create*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" />
  • 4. <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="del*" propagation="REQUIRED" /> <tx:method name="import*" propagation="REQUIRED" /> <!-- 指定当前方法以非事务方式执行操作,如果当前存在事务,就 把当前事务挂起,等我以非事务的状态运行完,再继续原来的事务。 查询定义即可 read-only="true" 表示只读 --> <tx:method name="*" propagation="NOT_SUPPORTED" read-only ="true" /> </tx:attributes> </tx:advice> <!-- 定义切面,在 * tdxy.*.service.*ServiceImpl.*(..) 中执行有关的 hibernat e session 的事务操作 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* tdxy.*.serv ice.*Service.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" /> </aop:config> </beans> applicationContext.xml 文件引用了一个 properties 文件 ,该文件也在 src 下,appConf ig.properties 内容可以自己定义 ? 1 2 3 4 5 ########################数据库连接信息############# jdbc.username = root jdbc.password = admin jdbc.url = jdbc:mysql://localhost:3306/tdxy?useUnicode=true&characterEncoding= UTF-8 jdbc.driver = com.mysql.jdbc.Driver 自己写了一个 test 用的 basedao package tdxy.dao;
  • 5. import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; /** * * @Title: BaseDao.java * @Package tdxy.dao * @Description: TODO(baseDao 数据库操作实现类) * @author dapeng * @date 2014 年 5 月 7 日 下午 5:09:22 * @version V1.0 */ @Repository public class BaseDao { /** * Autowired 自动装配 相当于 get() set() */ @Autowired protected SessionFactory sessionFactory; /** * gerCurrentSession 会自动关闭 session,使用的是当前的 session 事务 * * @return */ public Session getSession() { return sessionFactory.getCurrentSession(); } /** * openSession 需要手动关闭 session 意思是打开一个新的 session * * @return */ public Session getNewSession() { return sessionFactory.openSession(); }
  • 6. public void flush() { getSession().flush(); } public void clear() { getSession().clear(); } /** * 根据 id 查询信息 * * @param id * @return */ @SuppressWarnings("rawtypes") public Object load(Class c, String id) { Session session = getSession(); return session.get(c, id); } /** * 获取所有信息 * * @param c * * @return */ @SuppressWarnings({ "rawtypes" }) public List getAllList(Class c) { String hql = "from " + c.getName(); Session session = getSession(); return session.createQuery(hql).list(); } /** * 获取总数量 * * @param c * @return */ @SuppressWarnings("rawtypes") public Long getTotalCount(Class c) { Session session = getNewSession(); String hql = "select count(*) from " + c.getName();
  • 7. Long count = (Long) session.createQuery(hql).uniqueResult(); session.close(); return count != null ? count.longValue() : 0; } /** * 保存 * * @param bean * */ public void save(Object bean) { try { Session session = getNewSession(); session.save(bean); session.flush(); session.clear(); session.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 更新 * * @param bean * */ public void update(Object bean) { Session session = getNewSession(); session.update(bean); session.flush(); session.clear(); session.close(); } /** * 删除 * * @param bean * */ public void delete(Object bean) {
  • 8. Session session = getNewSession(); session.delete(bean); session.flush(); session.clear(); session.close(); } /** * 根据 ID 删除 * * @param c 类 * * @param id ID * */ @SuppressWarnings({ "rawtypes" }) public void delete(Class c, String id) { Session session = getNewSession(); Object obj = session.get(c, id); session.delete(obj); flush(); clear(); } /** * 批量删除 * * @param c 类 * * @param ids ID 集合 * */ @SuppressWarnings({ "rawtypes" }) public void delete(Class c, String[] ids) { for (String id : ids) { Object obj = getSession().get(c, id); if (obj != null) { getSession().delete(obj); } } } }
  • 9. 不知大家有没有注意 applicationContext.xml 这样一句代码 <!-- 设置自动创建|更新|验证数据库表结构 --> hibernate.hbm2ddl.auto=update 这个意思是 只要在实体 bean 指定了 entity,那么在数据库会自动创建对应的表和表结构 test 用的一个实体 bean package tdxy.bean; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.Id; /** * * @ClassName: UserInfoBean * @Description: TODO(用户信息类) * @author dapeng * @date 2014 年 5 月 7 日 上午 12:13:44 * @version V1.0 * */ @Entity public class UserInfoBean implements Serializable { private static final long serialVersionUID = 7280747949998651159L; @Id private String id; /** * 昵称 */ private String nickName; private String pwd; /** * 等级
  • 10. * */ private String level; /** * 经验值 */ private String emValue; /** * 性别(0 男 1 女) */ private String sex; private String birthday; private String qq; private String email; /** * 头像 */ private String img; /** * 所在地 */ private String address; /** * 签名 */ private String qmd; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; }
  • 11. public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getLevel() { return level; } public void setLevel(String level) { this.level = level; } public String getEmValue() { return emValue; } public void setEmValue(String emValue) { this.emValue = emValue; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public String getQq() { return qq; }
  • 12. public void setQq(String qq) { this.qq = qq; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getImg() { return img; } public void setImg(String img) { this.img = img; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getQmd() { return qmd; } public void setQmd(String qmd) { this.qmd = qmd; } } 当应用成功启动之后,数据库会出现表和结构,即刚才定义的 bean 是一样的,大家可以自己查 看一下即可。
  • 13. 以下是 test 的 Service package tdxy.user.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import tdxy.bean.UserInfoBean; import tdxy.dao.BaseDao; import tdxy.util.TdxyUtil; @Service public class UserInfoService { @Autowired private BaseDao baseDao; public UserInfoBean queryUserInfoById(String id) { return (UserInfoBean) baseDao.load(UserInfoBean.class, id); } public void addUserInfo(UserInfoBean userInfo) { try { userInfo.setId(TdxyUtil.getId()); userInfo.setAddress("32132"); baseDao.save(userInfo); } catch (Exception e) { e.printStackTrace(); } } }