Spring+Hibernate+maven整合

来源:互联网 发布:怎样消费到淘宝v2 编辑:程序博客网 时间:2024/06/05 08:09

Spring+Hibernate+maven整合

这是整个程序的资源地址:点我下载!不要积分噢!!!
首先利用maven创建一个新的项目,并且引入spring和Hibernate的包。命令如下:
mvn archetype:generate -DarchetypeCatalog=inernal
<dependencies>    <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.3.5.Final</version></dependency><!-- mysql connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><!-- hibernate-c3p0 --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-c3p0</artifactId><version>4.3.5.Final</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.0.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-web --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.0.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.0.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-orm --><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>4.0.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support --><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.0.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.0.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-jms --><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>4.0.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc-portlet --><!-- <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc-portlet</artifactId> <version>4.0.5.RELEASE</version> </dependency> --><!-- https://mvnrepository.com/artifact/org.springframework/spring-messaging --><dependency><groupId>org.springframework</groupId><artifactId>spring-messaging</artifactId><version>4.0.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-instrument --><dependency><groupId>org.springframework</groupId><artifactId>spring-instrument</artifactId><version>4.0.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-framework-bom --><dependency><groupId>org.springframework</groupId><artifactId>spring-framework-bom</artifactId><version>4.0.5.RELEASE</version><type>pom</type></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.0.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>2.3.4</version></dependency>  </dependencies>

在项目中创建如下文件:


LogDao.java
package com.xueyoucto.xueyou.dao;import javax.annotation.Resource;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.stereotype.Component;import com.xueyoucto.xueyou.model.TLog;@Component("logDao")public class LogDao {@Resourceprivate SessionFactory sessionFactory;public SessionFactory getSessionFactory() {return sessionFactory;}public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}public void save(TLog tlog){Session s = sessionFactory.getCurrentSession();s.save(tlog);}}

UserDao.java
package com.xueyoucto.xueyou.dao;import javax.annotation.Resource;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.stereotype.Component;import com.xueyoucto.xueyou.model.User;@Component("userDao")public class UserDao {@Resourceprivate SessionFactory sessionFactory;public SessionFactory getSessionFactory() {return sessionFactory;}public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}public void save(User user){Session s = sessionFactory.getCurrentSession();s.save(user);}}

TLog.java
package com.xueyoucto.xueyou.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name="t_log")public class TLog {@Id@GeneratedValueprivate int id;private String message;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}

User.java
package com.xueyoucto.xueyou.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name="user")public class User {@Id@GeneratedValueprivate int id;private String username;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

UserService.java
package com.xueyoucto.xueyou.serviceImpl;import javax.annotation.Resource;import org.springframework.stereotype.Component;import org.springframework.transaction.annotation.Transactional;import com.xueyoucto.xueyou.dao.LogDao;import com.xueyoucto.xueyou.dao.UserDao;import com.xueyoucto.xueyou.model.TLog;import com.xueyoucto.xueyou.model.User;@Component("userService")public class UserService {@Resource(name="userDao")private UserDao userDao;@Resource(name="logDao")private LogDao tlogDao;@Transactionalpublic void add(User user,TLog tlog) throws RuntimeException{userDao.save(user);tlogDao.save(tlog);}}

UserServiceTest.java
package com.xueyoucto.xueyou;import org.junit.Before;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.xueyoucto.xueyou.model.TLog;import com.xueyoucto.xueyou.model.User;import com.xueyoucto.xueyou.serviceImpl.UserService;public class UserServiceTest {@Beforepublic void setUp() throws Exception {}@Testpublic void test() {ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");UserService us = (UserService) ctx.getBean("userService");User u = new User();u.setUsername("xxxxx");u.setPassword("123");TLog tlog = new TLog();tlog.setMessage("xxxxx增加了");us.add(u, tlog);}}

beans.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: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/tx        http://www.springframework.org/schema/tx/spring-tx.xsd"><context:component-scan base-package="com.xueyoucto.xueyou" /><bean id="myDataSource" name="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 指定连接数据库的驱动 --><property name="driverClass" value="com.mysql.jdbc.Driver" /><!-- 指定连接数据库的URL --><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring" /><!-- 指定连接数据库的用户名 --><property name="user" value="root" /><!-- 指定连接数据库的密码 --><property name="password" value="123456" /><!-- 指定连接池中保留的最大连接数. Default:15 --><property name="maxPoolSize" value="100" /><!-- 指定连接池中保留的最小连接数 --><property name="minPoolSize" value="10" /><!-- 指定连接池的初始化连接数 取值应在minPoolSize 与 maxPoolSize 之间.Default:3 --><property name="initialPoolSize" value="20" /><!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。 Default:0 --><property name="maxIdleTime" value="600" /><!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数. Default:3 --><property name="acquireIncrement" value="5" /><!-- JDBC的标准,用以控制数据源内加载的PreparedStatements数量。 但由于预缓存的statements属于单个connection而不是整个连接池所以设置这个参数需要考虑到多方面的因数.如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default:0 --><property name="maxStatements" value="5" /><!-- 每60秒检查所有连接池中的空闲连接.Default:0 --><property name="idleConnectionTestPeriod" value="60" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="myDataSource" /><property name="packagesToScan"><list><value>com.xueyoucto.xueyou.model</value><!-- 加载hibernate的jpa注解形式的实体类 --></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop></props></property></bean><tx:annotation-driven transaction-manager="transactionManager"/><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean></beans>  

运行junit:

在数据库中观察数据(注意,应该先建好数据库,否则会报错):



这里主要使用的是spring 整合hibernate,同时使用了自动开启了事物,只需要在想要以事务方式运行的函数上增加注解@Transactional即可。
如果在执行事务的时候发生了RuntimeException的异常,那么事务就会rollback。
下面是进行测试的小例子,首先修改UserService.java
package com.xueyoucto.xueyou.serviceImpl;import javax.annotation.Resource;import org.springframework.stereotype.Component;import org.springframework.transaction.annotation.Transactional;import com.xueyoucto.xueyou.dao.LogDao;import com.xueyoucto.xueyou.dao.UserDao;import com.xueyoucto.xueyou.model.TLog;import com.xueyoucto.xueyou.model.User;@Component("userService")public class UserService {@Resource(name="userDao")private UserDao userDao;@Resource(name="logDao")private LogDao tlogDao;@Transactionalpublic void add(User user,TLog tlog) throws RuntimeException{userDao.save(user);tlogDao.save(tlog);throw new RuntimeException("error");}}

再次运行junit:

数据库中没有新添加的记录,因为事务rollback了。
0 0
原创粉丝点击