Spring4.X 与 Hibrenate5.X整合
来源:互联网 发布:数组怎么用 编辑:程序博客网 时间:2024/05/22 09:03
Spring4.X 与 Hibrenate5.X整合
配置数据源:
- 通过JNDB
位于jee命名空间下的的元素可以用于检索JNDI中的任何对象(包括数据源)并将其用于spring bean中。xml
<jee:jndi-lookup id="dataSource"
jndi-name="/jdbc/contactSource"
resource-ref="true" /> - 使用数据源连接池
使用Apache的开源数据连接池dbcpjava
<bean id="datasource"
class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/tongxunlu?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="10550205" />
<property name="initialSize" value="5" />
<property name="maxTotal" value="10" />
</bean>
3. 基于JDBC驱动注解
java
<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/tongxunlu?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="10550205" />
</bean>
整体的一个项目依赖 pom.xm
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.springDemos</groupId> <artifactId>springDemos</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springDemos</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.3.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.8.RELEASE</version> </dependency> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.10</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> <version>1.8.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.9.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.1.1</version> </dependency><!-- <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>1.11.4.RELEASE</version> </dependency> --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.10.Final</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.3.9.RELEASE</version> </dependency> </dependencies></project>
一、使用Spring JDBC
springData.xml
<?xml version="1.0" encoding="UTF-8"?><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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- 配置数据源,使用apache的连接池 --><bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/tongxunlu?characterEncoding=utf8" /><property name="username" value="root" /><property name="password" value="10550205" /><property name="initialSize" value="5" /><property name="maxTotal" value="10" /></bean><!-- 配置一个JdbcTemplate来操作数据库 --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><constructor-arg ref="dataSource" /></bean><!-- 扫描定义的包,对标注的类进行实例化 --><context:component-scan base-package="com.springData" /><!-- 配置事务管理器 --><bean id="txManager" class="org.springframework.jdbc.dataSource.DataSourceTransactionManager" /></beans>
domain实体类
package com.springData;import java.sql.Timestamp;public class Contact { private int id; private String name; private String sex; private String phoneNumber; private String wechat; private Integer age; private String workAddress; private String homeAddress; private String description; private Timestamp createTime; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getWechat() { return wechat; } public void setWechat(String wechat) { this.wechat = wechat; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getWorkAddress() { return workAddress; } public void setWorkAddress(String workAddress) { this.workAddress = workAddress; } public String getHomeAddress() { return homeAddress; } public void setHomeAddress(String homeAddress) { this.homeAddress = homeAddress; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Timestamp getCreateTime(){ return createTime; } public void setCreateTime(Timestamp createTime) { this.createTime = createTime; }}
SpringDataService访问数据库的Dao服务类
package com.springData;import java.sql.ResultSet;import java.sql.SQLException;import javax.inject.Inject;import org.apache.log4j.Logger;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.stereotype.Repository;@Repositorypublic class SpringDataService { public static final Logger logger = Logger.getLogger(SpringDataService.class); private JdbcTemplate jdbcTemplate; private static final String SQL_INSERT_COTACT = "INSERT INTO contact (name, sex, age, phone_number," + "wechat, work_address, home_address, description) values(?,?,?,?,?,?,?,?)"; private static final String SQL_SELECT_COTACT = "SELECT * FROM contact WHERE name= ?"; private static final String SQL_DELETE_COTACT = "DELETE FROM contact WHERE name= ?"; private static final String SQL_UPDATE_COTACT = "UPDATE contact SET name = ?, sex = ?, age = ?, phone_number = ?, wechat = ?, " + "work_address = ?, home_address = ?, description = ? where name = ?"; public void addContact(Contact contact) { if (logger.isInfoEnabled()) { logger.info("开始添加对象"); } jdbcTemplate.update(SQL_INSERT_COTACT, contact.getName(), contact.getSex(), contact.getAge(),contact.getPhoneNumber(), contact.getWechat(), contact.getWorkAddress(),contact.getHomeAddress(), contact.getDescription()); if (logger.isInfoEnabled()) { logger.info("添加对象成功"); } } public Contact getContact(String name) { if (logger.isInfoEnabled()) { logger.info("开始查找对象"); } return jdbcTemplate.queryForObject(SQL_SELECT_COTACT, new RowMapper<Contact>() { public Contact mapRow(ResultSet rs, int rowNum) throws SQLException { Contact contact = new Contact(); contact.setId(rs.getInt(1)); contact.setName(rs.getString(2)); contact.setSex(rs.getString(3)); contact.setAge(rs.getInt(4)); contact.setPhoneNumber(rs.getString(5)); contact.setWechat(rs.getString(6)); contact.setWorkAddress(rs.getString(7)); contact.setHomeAddress(rs.getString(8)); contact.setDescription(rs.getString(9)); return contact; } }, name); } public void deleteContact(String name) { if (logger.isInfoEnabled()) { logger.info("开始删除对象"); } jdbcTemplate.update(SQL_DELETE_COTACT, name); if (logger.isInfoEnabled()) { logger.info("删除对象成功"); } } public void updateContact(Contact contact, String name) { if (logger.isInfoEnabled()) { logger.info("开始更新对象"); } jdbcTemplate.update(SQL_UPDATE_COTACT, contact.getName(), contact.getSex(), contact.getAge(),contact.getPhoneNumber(), contact.getWechat(), contact.getWorkAddress(),contact.getHomeAddress(), contact.getDescription(), name); if (logger.isInfoEnabled()) { logger.info("更新对象成功"); } } public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } @Inject public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; }}
SpringJdbcTest测试类
package com.springData;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringJDBCTest { @Test public void jdbcTest() { @SuppressWarnings("resource") ApplicationContext context = new ClassPathXmlApplicationContext("com/springData/springData.xml"); SpringDataService service = (SpringDataService)context.getBean("springDataService"); Contact contact = new Contact(); contact.setName("刘德华"); contact.setSex("男"); contact.setAge(58); contact.setPhoneNumber("13879681184"); contact.setWechat("liudehua"); contact.setWorkAddress("HongKong"); contact.setHomeAddress("HongKong"); contact.setDescription("Famouse Actor"); //测试添加对象 service.addContact(contact); //测试更改对象 contact.setAge(60); service.updateContact(contact, "刘德华"); //测试查找对象 contact = service.getContact("龙涛"); System.out.println(contact.getId() + contact.getName() + contact.getSex() + contact.getAge()); /*//测试删除对象 service.deleteContact("刘德华");*/ }}
二、在Spring4.X 中集成Hibernate5.X
通过SessionFactory负责HibrenaterSession的打开、关闭以及管理。而SessionFactory主要是通过Hibernate Session 工厂bean来获得。Session接口负责对数据库的增删查改操作。
session的三种状态:
- 瞬时状态(Transient):
实例化一个对象即通过new等获得一个对象,这个对象就处于临时状态,临时对象只是携带了属性的载体,并不与数据库中的任何数据相关联。
在Hibernate中可通过session
的save()
或者 saveOrUpdate()方法将临时状态与数据库相关联,并将数据插入数据库中成为持久化对象。
- 持久状态(persistent):
处于该状态的对象与数据是关联的,在数据库中有对应的记录,在数据库中也有唯一的标识,通过Sesson
的get()
、loat()
方法获得都是持久状态的对象,持久状态对象若被更改,不会马上同步到数据库,而是要在commit()提交事物后,才会将对象数据同步到数据库。在提交事物之前的对象是脏对象。
- 脱管状态(detached):
当与持久状态对象关联的session被关闭后,该对象也就成为了游离状态的对象。游离状态对象通过session
调用update()
或者saveOrUpdate()
方法,对象会从游离状态变回持久状态。若调用delete()
则游离状态会变成瞬时状态,因为对象在数据库中的对应记录已经被删除了。
总结一下:通过new实例化一个类对象,然后设置对象的属性值,也就是将信息存储于对象的属性中,此时的对象属于瞬时对象,对象变量引用了对象所以对象不会被垃圾回收器回。我们通过Session对象的save()或者saveOrUpdate()方法可以将对象持久化到数据库中,此时的对象处于持久状态,也就是数据库中有该对象的相应记录,此时该对象与session和transaction是相关联的。session.close()后,关闭了session与对象的关联,此时的对象那个处于离线状态。也就是session中没有该对象了。离线状态可通过update()或者saveOrUpdate()方法变成持久状态,离线状态也可以通过delete()方法变成瞬时状态。另外离线状态通过update()方法变成持久状态后,若对象获得更改,对象不会马上被同步到数据库,而是存储在session缓存中,待commit()后才会得到同步。
一个spring + hibernate的实例:
hibernate.xml
<?xml version="1.0" encoding="UTF-8"?><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" xsi:schemaLocation= "http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"><!-- 获得一个数据库连接池源 --><bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/tongxunlu?characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="10550205" /><property name="initialSize" value="5" /><property name="maxTotal" value="10" /></bean><!-- 通过LocalSessionFactoryBean获得一个会话工厂 --><bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 通过扫描相应的包获得对象与数据库表的映射关系 --><property name="packagesToScan" value="com.spring_hibernate" /><!-- 配置sessionFactory的相关属性 --><property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hibernate.show_sql">true</prop> </props></property></bean><!-- 获得一个hibernate事务管理对象 --><bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 获得一个事物模板对象,通过事物模板对象来管理事务 --><bean id="txTemplate" class="org.springframework.transaction.support.TransactionTemplate"><property name="transactionManager" ref="txManager" /></bean><!-- <bean class="org.springframework.dao.annotation.PersistenceTranslationPostProcessor" /> --><context:component-scan base-package="com.spring_hibernate" /></beans>
contact对象的注解配置:
package com.spring_hibernate;import java.sql.Timestamp;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name="contact")public class Contact { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; private String name; private String sex; @Column(name="phone_number") private String phoneNumber; private String wechat; private Integer age; @Column(name="work_address") private String workAddress; @Column(name="home_address") private String homeAddress; private String description; @Column(name="creat_time") private Timestamp createTime; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getWechat() { return wechat; } public void setWechat(String wechat) { this.wechat = wechat; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getWorkAddress() { return workAddress; } public void setWorkAddress(String workAddress) { this.workAddress = workAddress; } public String getHomeAddress() { return homeAddress; } public void setHomeAddress(String homeAddress) { this.homeAddress = homeAddress; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Timestamp getCreateTime(){ return createTime; } public void setCreateTime(Timestamp createTime) { this.createTime = createTime; }}
SpringHibernateService操作数据库的Dao服务类
该服务类对数据库的操作的事物管理使用的是编码事物
package com.spring_hibernate;import org.apache.log4j.Logger;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.criterion.Restrictions;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import org.springframework.transaction.TransactionStatus;import org.springframework.transaction.support.TransactionCallback;import org.springframework.transaction.support.TransactionTemplate;@Repositorypublic class SpringHibernateService { public static final Logger logger = Logger.getLogger(SpringHibernateService.class); //注入SessionFactory依赖,通过sessionFactory的openSession() //或者getCurrentSession()方法来获得一个Session对象. @Autowired private SessionFactory sessionFactory; @Autowired private TransactionTemplate txTemplate; //获得一个Session对象 public Session currentSession() { return sessionFactory.getCurrentSession(); } //向数据库持久化一个对象那个 public void addContact(final Contact contact) { txTemplate.execute(new TransactionCallback<Void>(){ public Void doInTransaction(TransactionStatus txStatus){ try { currentSession().save(contact); } catch (RuntimeException e) { txStatus.setRollbackOnly(); throw e; } return null; } }); } //删除一个数据库的一条记录 public void deleteContact(final Contact contact) { System.out.println("删除了吗?"); txTemplate.execute(new TransactionCallback<Void>(){ public Void doInTransaction(TransactionStatus txStatus){ try { currentSession().delete(contact); } catch (RuntimeException e) { txStatus.setRollbackOnly(); throw e; } return null; } }); System.out.println("删除了成功了吗?"); } //更改一条数据库记录 public void updateContact(final Contact contact) { System.out.println("到這裡了嗎"); txTemplate.execute(new TransactionCallback<Void>(){ public Void doInTransaction(TransactionStatus txStatus){ try { currentSession().update(contact); } catch (RuntimeException e) { txStatus.setRollbackOnly(); throw e; } return null; } }); System.out.println("结束了吗"); } //获得一条数据库记录 public Contact getContact(Contact contact, final int id) { return txTemplate.execute(new TransactionCallback<Contact>(){ public Contact doInTransaction(TransactionStatus txStatus){ try { return (Contact)currentSession().get(Contact.class, id); } catch (RuntimeException e) { txStatus.setRollbackOnly(); throw e; } } }); } @SuppressWarnings("deprecation") public Contact getContactByName(Contact contact, String name) { return (Contact) currentSession().createCriteria(Contact.class) .add(Restrictions.eq("name", name)).list().get(0); }}
测试类:SpringHibernateTest:
package com.spring_hibernate;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringHibernateTest { @Test public void test() { @SuppressWarnings("resource") ApplicationContext context = new ClassPathXmlApplicationContext("com/spring_hibernate/hibernate.xml"); SpringHibernateService service = (SpringHibernateService)context.getBean("springHibernateService"); Contact contact = new Contact(); contact.setName("刘德华"); contact.setSex("男"); contact.setAge(58); contact.setPhoneNumber("13879681184"); contact.setWechat("liudehua"); contact.setWorkAddress("HongKong"); contact.setHomeAddress("HongKong"); contact.setDescription("Famouse Actor"); //测试添加对象 service.addContact(contact); //测试更改对象 contact.setAge(80); service.updateContact(contact); //测试删除对象 service.deleteContact(contact); //测试查找对象 contact = service.getContact(contact, 34); System.out.println(contact.getId() + contact.getName() + contact.getSex() + contact.getAge()); }}
声明事物管理:
a.通过在xml中配置通知与Aop配置通知器切面来声明事物管理
.xml的配置如下:
<?xml version="1.0" encoding="UTF-8"?><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/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 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/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"><context:component-scan base-package="com.spring_hibernate" /><!-- 获得一个数据库连接池源 --><bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/tongxunlu?characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="10550205" /><property name="initialSize" value="5" /><property name="maxTotal" value="10" /></bean><!-- 通过LocalSessionFactoryBean获得一个会话工厂 --><bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 通过扫描相应的包获得对象与数据库表的映射关系 --><property name="packagesToScan" value="com.spring_hibernate" /><!-- 配置sessionFactory的相关属性 --><property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hibernate.show_sql">true</prop> </props></property></bean><!-- 获得一个事务管理器对象 --><bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes > <tx:method name="get*" read-only="true" /> <tx:method name="*" /> </tx:attributes></tx:advice><aop:config> <aop:pointcut id="pt" expression="execution(* com.spring_hibernate.SpringHibernateService.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/></aop:config></beans>
操作数据库的Dao类 SpringHibernateService:
package com.spring_hibernate;import org.apache.log4j.Logger;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.criterion.Restrictions;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;@Repositorypublic class SpringHibernateService { public static final Logger logger = Logger.getLogger(SpringHibernateService.class); //注入SessionFactory依赖,通过sessionFactory的openSession() //或者getCurrentSession()方法来获得一个Session对象. @Autowired private SessionFactory sessionFactory; //获得一个Session对象 public Session currentSession() { return sessionFactory.getCurrentSession(); } //向数据库持久化一个对象那个 public void addContact(final Contact contact) { currentSession().save(contact); } //删除一个数据库的一条记录 public void deleteContact(final Contact contact) { currentSession().delete(contact); } //更改一条数据库记录 public void updateContact(final Contact contact) { currentSession().update(contact); } //获得一条数据库记录 public Contact getContact(Contact contact, final int id) { return (Contact)currentSession().get(Contact.class, id); } @SuppressWarnings("deprecation") public Contact getContactByName(Contact contact, String name) { return (Contact) currentSession().createCriteria(Contact.class) .add(Restrictions.eq("name", name)).list().get(0); }}
b. 声明式事务管理(通过注解来配置通知与事物属性)
.xml如下
<?xml version="1.0" encoding="UTF-8"?><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/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 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/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"><context:component-scan base-package="com.spring_hibernate" /><!-- 获得一个数据库连接池源 --><bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/tongxunlu?characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="10550205" /><property name="initialSize" value="5" /><property name="maxTotal" value="10" /></bean><!-- 通过LocalSessionFactoryBean获得一个会话工厂 --><bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 通过扫描相应的包获得对象与数据库表的映射关系 --><property name="packagesToScan" value="com.spring_hibernate" /><!-- 配置sessionFactory的相关属性 --><property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hibernate.show_sql">true</prop> </props></property></bean><!-- 获得一个事务管理器对象 --><bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 通过注解配置声明式事务管理的事物属性和通知的方法 --><tx:annotation-driven transaction-manager="txManager"/><!-- <tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes > <tx:method name="get*" read-only="true" /> <tx:method name="*" /> </tx:attributes></tx:advice> --><!-- <aop:config> <aop:pointcut id="pt" expression="execution(* com.spring_hibernate.SpringHibernateService.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/></aop:config> --></beans>
操作数据库的Dao类 SpringHibernateService:
package com.spring_hibernate;import org.apache.log4j.Logger;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.criterion.Restrictions;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional;@Repositorypublic class SpringHibernateService { public static final Logger logger = Logger.getLogger(SpringHibernateService.class); //注入SessionFactory依赖,通过sessionFactory的openSession() //或者getCurrentSession()方法来获得一个Session对象. @Autowired private SessionFactory sessionFactory; //获得一个Session对象 public Session currentSession() { return sessionFactory.getCurrentSession(); } //向数据库持久化一个对象那个 @Transactional public void addContact(final Contact contact) { currentSession().save(contact); } //删除一个数据库的一条记录 @Transactional public void deleteContact(final Contact contact) { currentSession().delete(contact); } //更改一条数据库记录 @Transactional public void updateContact(final Contact contact) { currentSession().update(contact); } //获得一条数据库记录 @Transactional(readOnly=true) public Contact getContact(Contact contact, final int id) { return (Contact)currentSession().get(Contact.class, id); } @SuppressWarnings("deprecation") @Transactional(readOnly=true) public Contact getContactByName(Contact contact, String name) { return (Contact) currentSession().createCriteria(Contact.class) .add(Restrictions.eq("name", name)).list().get(0); }}
- Spring4.X 与 Hibrenate5.X整合
- Mybatis3.x与Spring4.x整合
- Mybatis3.x与Spring4.x整合
- Mybatis3.x与Spring4.x整合
- Mybatis3.x与Spring4.x整合
- Mybatis3.x与Spring4.x整合
- Mybatis3.x与Spring4.x整合
- Mybatis3.x与Spring4.x整合
- Mybatis3.x与Spring4.x整合
- Mybatis3.x与Spring4.x整合
- Mybatis3.x与Spring4.x整合
- Spring4.x+Struts2.x整合
- Spring4.x+Hibernate4.x整合
- MyBatis(8)——Mybatis3.x与Spring4.x整合
- Mybatis3.x与Spring4.x整合+代码自动生成
- MyBatis学习总结--Mybatis3.x与Spring4.x整合
- spring4.x + cxf3.x整合实例
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
- PHP魔术方法 __sleep和__wakeup()
- leetcode: 628. Maximum Product of Three Numbers
- Hamming distance- leetcode
- centos7 安装mysql57
- JPA入门例子(采用JPA的hibernate实现版本)
- Spring4.X 与 Hibrenate5.X整合
- CSS之Multi-columns的跨列
- 如何优化eclipse?eclipse启动很卡,很慢?性能不好?
- 递归算法及应用
- Unity5.x Time用法详解
- linux虚拟终端之screen命令
- 跨域之Server Proxy
- ios textFild键盘设置
- 网页天幕代码!从css、html到js的完美实现(自执行函数加原型的完美应用)!!