Spring+Hibernate+Jersey整合<轉>

導入需要的jar包

 

項目結構

 

Spring配置

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xmlns:task="http://www.springframework.org/schema/task"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8. http://www.springframework.org/schema/context  
  9. http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  10. http://www.springframework.org/schema/aop  
  11. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
  12. http://www.springframework.org/schema/tx  
  13. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  14. http://www.springframework.org/schema/task   
  15. http://www.springframework.org/schema/task/spring-task-3.0.xsd">  
  16.   
  17.     <bean  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  18.         <property name="locations">  
  19.             <value>classpath:database.properties</value>  
  20.         </property>  
  21.     </bean>  
  22.   
  23.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
  24.         <property name="driverClass" value="${jdbc.driverClassName}" />  
  25.         <property name="jdbcUrl" value="${jdbc.url}" />  
  26.         <property name="user" value="${jdbc.username}" />  
  27.         <property name="password" value="${jdbc.password}" />  
  28.         <property name="initialPoolSize" value="${jdbc.initialPoolSize}" />  
  29.         <property name="minPoolSize" value="${jdbc.minPoolSize}" />  
  30.         <property name="maxPoolSize" value="${jdbc.maxPoolSize}" />  
  31.         <property name="maxIdleTime" value="${jdbc.maxIdleTime}" />  
  32.         <property name="maxStatements" value="${jdbc.maxStatements}" />  
  33.         <property name="acquireIncrement" value="${jdbc.acquireIncrement}" />  
  34.     </bean>  
  35.   
  36.     <bean id="sessionFactory"  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
  37.         <property name="dataSource" ref="dataSource" />  
  38.         <property name="packagesToScan">  
  39.             <list>  
  40.                 <value>com.test.bean</value>  
  41.             </list>  
  42.         </property>  
  43.         <property name="hibernateProperties">  
  44.             <props>  
  45.                 <prop key="hibernate.dialect">${hibernate.dialect}</prop>  
  46.                 <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>  
  47.                 <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>  
  48.             </props>  
  49.         </property>  
  50.     </bean>  
  51.   
  52.     <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">  
  53.         <property name="sessionFactory" ref="sessionFactory" />  
  54.     </bean>  
  55.       
  56.     <!-- Config spring annotation package -->  
  57.     <context:component-scan base-package="com.test"></context:component-scan>  
  58.   
  59.     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  60.         <property name="sessionFactory" ref="sessionFactory" />  
  61.     </bean>  
  62.   
  63.     <tx:advice id="tmAdvice" transaction-manager="transactionManager">  
  64.         <tx:attributes>  
  65.             <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception" />  
  66.             <tx:method name="del*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
  67.             <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
  68.             <tx:method name="*" read-only="true" />  
  69.         </tx:attributes>  
  70.     </tx:advice>  
  71.       
  72. </beans>  


數據庫連接配置

[plain] view plaincopy
 
  1. jdbc.driverClassName=com.mysql.jdbc.Driver  
  2. jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8  
  3. jdbc.username=root  
  4. jdbc.password=root  
  5. jdbc.initialPoolSize=30  
  6. jdbc.minPoolSize=20  
  7. jdbc.maxPoolSize=100  
  8. jdbc.maxIdleTime=600  
  9. jdbc.maxStatements=200  
  10. jdbc.acquireIncrement=10  
  11.   
  12. hibernate.dialect=org.hibernate.dialect.MySQLDialect  
  13. hibernate.show_sql=false  
  14. hibernate.format_sql=true  

log4j配置

[plain] view plaincopy
 
  1. #log4j.rootLogger=DEBUG,A1,R  
  2. log4j.rootLogger=INFO,A1,R  
  3. log4j.logger.com.augmentum=DEBUG  
  4. log4j.appender.A1=org.apache.log4j.ConsoleAppender  
  5. log4j.appender.A1.layout=org.apache.log4j.PatternLayout  
  6. log4j.appender.A1.layout.ConversionPattern=[%d %6p at %C.%M(%F:%L)] %m%n  
  7.   
  8. log4j.appender.R=org.apache.log4j.RollingFileAppender  
  9. log4j.appender.R.File=C://logs//a.log  
  10. log4j.appender.R.Append=true  
  11. log4j.appender.R.DatePattern=.yyyy-MM-dd.log  
  12. log4j.appender.R.layout=org.apache.log4j.PatternLayout  
  13. log4j.appender.R.layout.ConversionPattern=[%d %6p at %C.%M(%F:%L)] %m%n  

web.xml配置
[html] view plaincopy
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
  3.   <display-name>test</display-name>  
  4.   <welcome-file-list>  
  5.     <welcome-file>index.html</welcome-file>  
  6.   </welcome-file-list>  
  7.     
  8.   <context-param>  
  9.     <param-name>contextConfigLocation</param-name>  
  10.     <param-value>classpath:applicationContext.xml</param-value>  
  11.   </context-param>  
  12.      
  13.   <listener>  
  14.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  15.   </listener>  
  16.      
  17.   <!-- jersey interceptor -->  
  18.   <servlet>  
  19.     <servlet-name>JerseyServlet</servlet-name>  
  20.     <servlet-class>  
  21.        com.sun.jersey.spi.spring.container.servlet.SpringServlet  
  22.     </servlet-class>  
  23.     <init-param>  
  24.         <param-name>  
  25.             com.sun.jersey.config.property.packages      
  26.         </param-name>  
  27.         <param-value>  
  28.             com.test.resource  
  29.         </param-value>  
  30.     </init-param>  
  31.   </servlet>  
  32.   <servlet-mapping>  
  33.     <servlet-name>JerseyServlet</servlet-name>  
  34.     <url-pattern>/resource/*</url-pattern>  
  35.   </servlet-mapping>  
  36. </web-app>  
 

Javabean

[java] view plaincopy
 
  1. package com.test.bean;  
  2.   
  3. import javax.persistence.Column;  
  4. import javax.persistence.Entity;  
  5. import javax.persistence.GeneratedValue;  
  6. import javax.persistence.GenerationType;  
  7. import javax.persistence.Id;  
  8. import javax.persistence.Table;  
  9.   
  10. @Entity  
  11. @Table(name = "user")  
  12. public class User {  
  13.     @Id  
  14.     @GeneratedValue(strategy = GenerationType.AUTO)  
  15.     @Column(name = "id")  
  16.     private Integer id;  
  17.     @Column(name = "username")  
  18.     private String username;  
  19.     @Column(name = "password")  
  20.     private String password;  
  21.   
  22.   
  23.     @Override  
  24.     public String toString() {  
  25.         return "User [id=" + id + ", username=" + username + ", password=" + password + "]";  
  26.     }  
  27.   
  28.     public Integer getId() {  
  29.         return id;  
  30.     }  
  31.     public void setId(Integer id) {  
  32.         this.id = id;  
  33.     }  
  34.     public String getUsername() {  
  35.         return username;  
  36.     }  
  37.     public void setUsername(String username) {  
  38.         this.username = username;  
  39.     }  
  40.     public String getPassword() {  
  41.         return password;  
  42.     }  
  43.     public void setPassword(String password) {  
  44.         this.password = password;  
  45.     }  
  46.   
  47.   
  48. }  

Dao層

basedao

[java] view plaincopy
 
  1. package com.test.dao;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. /** 
  7.  * The base interface for all the dao layer interface,it provide common method 
  8.  * 
  9.  * @author Irwin.Ai 
  10.  * 
  11.  * @param <T> 
  12.  *            The entity class type 
  13.  * @param <PK> 
  14.  *            The primary key of the entity class 
  15.  */  
  16. public interface BaseDao<T, PK extends Serializable> {  
  17.     public T add(T t);  
  18.   
  19.     public void delete(T t);  
  20.   
  21.     public T load(PK id);  
  22.   
  23.     public T get(PK id);  
  24.   
  25.     public List<T> loadAll();  
  26.   
  27.     public T update(T t);  
  28.   
  29. }  

userdao

[java] view plaincopy
 
  1. package com.test.dao;  
  2.   
  3. import com.test.bean.User;  
  4.   
  5. public interface UserDao extends BaseDao<User, Integer> {  
  6.   
  7. }  

Dao層實現

basedao實現

[java] view plaincopy
 
  1. package com.test.dao.impl;  
  2.   
  3. import java.io.Serializable;  
  4. import java.lang.reflect.ParameterizedType;  
  5. import java.lang.reflect.Type;  
  6. import java.util.List;  
  7.   
  8. import javax.annotation.Resource;  
  9.   
  10. import org.hibernate.Session;  
  11. import org.springframework.orm.hibernate3.HibernateTemplate;  
  12. import org.springframework.stereotype.Repository;  
  13.   
  14. import com.test.dao.BaseDao;  
  15.   
  16.   
  17. /** 
  18.  * The base interface implement for all the dao layer interface implements,it 
  19.  * provide common method 
  20.  * 
  21.  * @author Irwin.Ai 
  22.  * 
  23.  * @param <T> 
  24.  *            The entity class type 
  25.  * @param <PK> 
  26.  *            The primary key of the entity class 
  27.  */  
  28. @Repository  
  29. public class BaseDaoImpl<T, PK extends Serializable> implements BaseDao<T, PK> {  
  30.   
  31.     private Class<T> entityClass;  
  32.     private HibernateTemplate hibernateTemplate;  
  33.   
  34.     public HibernateTemplate getHibernateTemplate() {  
  35.         return hibernateTemplate;  
  36.     }  
  37.   
  38.     @Resource  
  39.     public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {  
  40.         this.hibernateTemplate = hibernateTemplate;  
  41.     }  
  42.   
  43.     /** 
  44.      * Method to judge the type of class 
  45.      */  
  46.     @SuppressWarnings("unchecked")  
  47.     public BaseDaoImpl() {  
  48.         Type type = getClass().getGenericSuperclass();  
  49.         if (type instanceof ParameterizedType) {  
  50.             Type[] types = ((ParameterizedType) type).getActualTypeArguments();  
  51.             this.entityClass = (Class<T>) types[0];  
  52.         }  
  53.     }  
  54.   
  55.     @Override  
  56.     public T add(T t) {  
  57.         hibernateTemplate.save(t);  
  58.         return t;  
  59.     }  
  60.   
  61.     @Override  
  62.     public void delete(T t) {  
  63.         hibernateTemplate.delete(t);  
  64.     }  
  65.   
  66.     @Override  
  67.     public T load(PK id) {  
  68.         return hibernateTemplate.load(entityClass, id);  
  69.     }  
  70.   
  71.     @Override  
  72.     public List<T> loadAll() {  
  73.         return hibernateTemplate.loadAll(entityClass);  
  74.     }  
  75.   
  76.     @Override  
  77.     public T update(T t) {  
  78.         hibernateTemplate.update(t);  
  79.         return t;  
  80.     }  
  81.   
  82.     @Override  
  83.     public T get(PK id) {  
  84.         return hibernateTemplate.get(entityClass, id);  
  85.     }  
  86.   
  87.     /** 
  88.      * If there is a session alive, we will use it instead of open an new 
  89.      * Session. 
  90.      * 
  91.      * @return 
  92.      */  
  93.     public Session getCurrentSession() {  
  94.         Session session = hibernateTemplate.getSessionFactory()  
  95.                 .getCurrentSession();  
  96.         if (session == null) {  
  97.             session = hibernateTemplate.getSessionFactory().openSession();  
  98.         }  
  99.         return session;  
  100.     }  
  101.   
  102. }  

userdao實現

[java] view plaincopy
 
  1. package com.test.dao.impl;  
  2.   
  3. import org.springframework.stereotype.Repository;  
  4.   
  5. import com.test.bean.User;  
  6. import com.test.dao.UserDao;  
  7.   
  8. @Repository  
  9. public class UserDaoImpl extends BaseDaoImpl<User, Integer> implements UserDao{  
  10.   
  11. }  

service層

baseservice

[java] view plaincopy
 
  1. package com.test.service;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. /** 
  7.  * * The base interface for all the service layer interface,it provide common 
  8.  * method 
  9.  *  
  10.  * @author Irwin.Ai 
  11.  *  
  12.  * @param <T> 
  13.  *            The entity class type 
  14.  * @param <PK> 
  15.  *            The primary key of the entity class 
  16.  */  
  17. public interface BaseService<T, PK extends Serializable> {  
  18.   
  19.     public T add(T t);  
  20.   
  21.     public void delete(T t);  
  22.   
  23.     public T load(PK id);  
  24.   
  25.     public T get(PK id);  
  26.   
  27.     public List<T> loadAll();  
  28.   
  29.     public T update(T t);  
  30.   
  31. }  

userservice

[java] view plaincopy
 
  1. package com.test.service;  
  2.   
  3. import com.test.bean.User;  
  4.   
  5.   
  6. public interface UserService extends BaseService<User, Integer> {  
  7.   
  8. }  

service層實現

baseservice實現

[java] view plaincopy
 
  1. package com.test.service.impl;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. import com.test.dao.BaseDao;  
  7. import com.test.service.BaseService;  
  8.   
  9.   
  10. /** 
  11.  * * The base interface implement for all the service layer interface 
  12.  * implements,it provide common method 
  13.  * 
  14.  * @author Irwin.Ai 
  15.  * 
  16.  * @param <T> 
  17.  *            The entity class type 
  18.  * @param <PK> 
  19.  *            The primary key of the entity class 
  20.  */  
  21. public class BaseServiceImpl<T, PK extends Serializable> implements  
  22.         BaseService<T, PK> {  
  23.   
  24.     private BaseDao<T, PK> baseDao;  
  25.   
  26.     public BaseDao<T, PK> getBaseDao() {  
  27.         return baseDao;  
  28.     }  
  29.   
  30.     public void setBaseDao(BaseDao<T, PK> baseDao) {  
  31.         this.baseDao = baseDao;  
  32.     }  
  33.   
  34.     @Override  
  35.     public T add(T t) {  
  36.         return baseDao.add(t);  
  37.     }  
  38.   
  39.     @Override  
  40.     public void delete(T t) {  
  41.         baseDao.delete(t);  
  42.     }  
  43.   
  44.     @Override  
  45.     public T load(PK id) {  
  46.         return baseDao.load(id);  
  47.     }  
  48.   
  49.     @Override  
  50.     public List<T> loadAll() {  
  51.         return baseDao.loadAll();  
  52.     }  
  53.   
  54.     @Override  
  55.     public T update(T t) {  
  56.         return baseDao.update(t);  
  57.     }  
  58.   
  59.     @Override  
  60.     public T get(PK id) {  
  61.         return baseDao.get(id);  
  62.     }  
  63.   
  64. }  

userservice實現

[java] view plaincopy
 
  1. package com.test.service.impl;  
  2.   
  3. import javax.annotation.Resource;  
  4.   
  5. import org.springframework.stereotype.Service;  
  6.   
  7. import com.test.bean.User;  
  8. import com.test.dao.UserDao;  
  9. import com.test.service.UserService;  
  10.   
  11. @Service  
  12. public class UserServiceImpl extends BaseServiceImpl<User, Integer> implements UserService {  
  13.     @Resource  
  14.     public void setBaseDao(UserDao userDao) {  
  15.         super.setBaseDao(userDao);  
  16.     }  
  17.   
  18. }  
 

jersey resource類示例

[java] view plaincopy
 
  1. package com.test.resource;  
  2.   
  3. import java.util.List;  
  4.   
  5. import javax.annotation.Resource;  
  6. import javax.ws.rs.GET;  
  7. import javax.ws.rs.Path;  
  8. import javax.ws.rs.Produces;  
  9. import javax.ws.rs.core.MediaType;  
  10.   
  11. import org.apache.log4j.Logger;  
  12. import org.springframework.stereotype.Controller;  
  13.   
  14. import com.google.gson.Gson;  
  15. import com.sun.jersey.spi.resource.Singleton;  
  16. import com.test.bean.User;  
  17. import com.test.service.UserService;  
  18.   
  19. @Path("/users")  
  20. @Singleton  
  21. @Controller  
  22. public class UserResource {  
  23.   
  24.     private static Logger logger = Logger.getLogger(UserResource.class);  
  25.     @Resource  
  26.     private UserService userService;  
  27.   
  28.     @GET  
  29.     @Produces(MediaType.TEXT_PLAIN)  
  30.     public String getAllUser() {  
  31.         List<User> list = null;  
  32.         String str = null;  
  33.         try {  
  34.             list = userService.loadAll();  
  35.             str = new Gson().toJson(list);  
  36.         } catch (Exception e) {  
  37.             logger.error("load all exception : ", e);  
  38.         }  
  39.         return str;  
  40.     }  
  41. }  

頁面訪問測試

我們現在訪問頁面http://localhost:8080/SSJTest/resource/users
取到返回的json數據。
 
PS:jersey jar包必須使用同一個版本,本人使用1.13版本測試沒有問題
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章