我在 @Service 层加上 @Transactional 标签提示我 获取不到 session
org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:988)
at org.framework.core.orm.support.MapperImpl.query(MapperImpl.java:110)
at org.framework.core.orm.dao.support.AbstractBaseDaoImpl.query(AbstractBaseDaoImpl.java:23)
at org.framework.core.orm.dao.support.CommonDao.queryEntityList(CommonDao.java:49)
at org.framework.core.orm.dao.support.CommonDao.queryEntityList(CommonDao.java:39)
at org.framework.web.controller.service.ServeService.getCitys(ServeService.java:38)
at org.framework.web.controller.ServiceController.getUserList(ServiceController.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)这里是 applicationContext.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd "> <context:annotation-config />
<!-- 自动扫描所有注解该路径 -->
<context:component-scan base-package="org.framework" /> <context:property-placeholder location="classpath:hibernate.properties" />
<!-- DataSource Start -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${dataSource.driverClassName}" />
<property name="url" value="${dataSource.url}" />
<property name="username" value="${dataSource.username}" />
<property name="password" value="${dataSource.password}" />
</bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 扫描映射文件,实体类 -->
<property name="packagesToScan">
<list>
<value>org.framework.define.bean.entity</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${dataSource.dialect}</prop>
<prop key="hibernate.hbm2ddl.auto">${dataSource.hbm2ddl.auto}</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!-- DataSource End -->
<!-- Transaction Start -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- Transaction End -->
</beans>
Service
package org.framework.web.controller.service;import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.framework.core.orm.dao.ICommonDao;
import org.framework.define.bean.entity.City;
import org.framework.define.bean.entity.Student;
import org.framework.define.bean.result.Data;
import org.framework.define.bean.result.DataResult;
import org.framework.define.bean.result.Page;
import org.framework.define.bean.result.Result;
import org.framework.define.exception.error.support.Errors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
@Transactional
public class ServeService {
@Autowired
private ICommonDao commonDao;
public Result getCitys(HttpServletRequest request, Map<String,String> webParams){
int page = webParams.get("page")==null?1:Integer.parseInt(webParams.get("page"));
Page iPage = new Page();
iPage.setPage(page);
//List<Map<String, Object>> mapList = commonDao.queryMap("select * from city where name like ?", new Object[]{"A%"}, (page-1)*iPage.getNum(), iPage.getNum());
List<Student> list = (List<Student>) commonDao.queryEntityList("select * from student", Student.class, (page-1)*iPage.getNum(), iPage.getNum());
int totalnum = commonDao.count("select count(0) from student");
iPage.setTotalnum(totalnum);
return new DataResult(Errors.OK, new Data(list, iPage));
}
}
这是同样的代码 从家里拷到公司. 家里没问题. 但是在公司电脑 @Transactional加在Service 层就获取不到Springsession事务
org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:988)
at org.framework.core.orm.support.MapperImpl.query(MapperImpl.java:110)
at org.framework.core.orm.dao.support.AbstractBaseDaoImpl.query(AbstractBaseDaoImpl.java:23)
at org.framework.core.orm.dao.support.CommonDao.queryEntityList(CommonDao.java:49)
at org.framework.core.orm.dao.support.CommonDao.queryEntityList(CommonDao.java:39)
at org.framework.web.controller.service.ServeService.getCitys(ServeService.java:38)
at org.framework.web.controller.ServiceController.getUserList(ServiceController.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)这里是 applicationContext.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd "> <context:annotation-config />
<!-- 自动扫描所有注解该路径 -->
<context:component-scan base-package="org.framework" /> <context:property-placeholder location="classpath:hibernate.properties" />
<!-- DataSource Start -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${dataSource.driverClassName}" />
<property name="url" value="${dataSource.url}" />
<property name="username" value="${dataSource.username}" />
<property name="password" value="${dataSource.password}" />
</bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 扫描映射文件,实体类 -->
<property name="packagesToScan">
<list>
<value>org.framework.define.bean.entity</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${dataSource.dialect}</prop>
<prop key="hibernate.hbm2ddl.auto">${dataSource.hbm2ddl.auto}</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!-- DataSource End -->
<!-- Transaction Start -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- Transaction End -->
</beans>
Service
package org.framework.web.controller.service;import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.framework.core.orm.dao.ICommonDao;
import org.framework.define.bean.entity.City;
import org.framework.define.bean.entity.Student;
import org.framework.define.bean.result.Data;
import org.framework.define.bean.result.DataResult;
import org.framework.define.bean.result.Page;
import org.framework.define.bean.result.Result;
import org.framework.define.exception.error.support.Errors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
@Transactional
public class ServeService {
@Autowired
private ICommonDao commonDao;
public Result getCitys(HttpServletRequest request, Map<String,String> webParams){
int page = webParams.get("page")==null?1:Integer.parseInt(webParams.get("page"));
Page iPage = new Page();
iPage.setPage(page);
//List<Map<String, Object>> mapList = commonDao.queryMap("select * from city where name like ?", new Object[]{"A%"}, (page-1)*iPage.getNum(), iPage.getNum());
List<Student> list = (List<Student>) commonDao.queryEntityList("select * from student", Student.class, (page-1)*iPage.getNum(), iPage.getNum());
int totalnum = commonDao.count("select count(0) from student");
iPage.setTotalnum(totalnum);
return new DataResult(Errors.OK, new Data(list, iPage));
}
}
这是同样的代码 从家里拷到公司. 家里没问题. 但是在公司电脑 @Transactional加在Service 层就获取不到Springsession事务
我吧DAO 贴出来吧 这个是 主操作类 MapperImpl
package org.framework.core.orm.support;import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.framework.core.orm.IMapper;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.jdbc.Work;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;@Repository
public class MapperImpl implements IMapper {
@Autowired
private SessionFactory sessionFactory;
private final Logger log = LogManager.getLogger(MapperImpl.class);
public Serializable create(Object paramObject) {
return sessionFactory.getCurrentSession().save(paramObject);
}
public Serializable[] createAll(Collection<?> paramCollectionOfObject) {
Serializable[] sles = new Serializable[paramCollectionOfObject.size()];
Session session = sessionFactory.getCurrentSession();
int i=0;
for (Object paramObject : paramCollectionOfObject) {
sles[i] = session.save(paramObject);
i++;
}
return sles;
}
public void saveOrUpdate(Object paramObject) {
sessionFactory.getCurrentSession().saveOrUpdate(paramObject);
}
public void saveOrUpdateAll(Collection<?> paramCollectionOfObject) {
Session session = sessionFactory.getCurrentSession();
for (Object paramObject : paramCollectionOfObject) {
session.saveOrUpdate(paramObject);
}
}
public void update(Object paramObject) {
sessionFactory.getCurrentSession().update(paramObject);
}
public void updateAll(Collection<?> paramCollectionOfObject) {
Session session = sessionFactory.getCurrentSession();
for (Object paramObject : paramCollectionOfObject) {
session.update(paramObject);
}
}
public void remove(Object paramObject) {
sessionFactory.getCurrentSession().delete(paramObject);
}
public void removeAll(Collection<?> paramCollectionOfObject) {
Session session = sessionFactory.getCurrentSession();
for (Object paramObject : paramCollectionOfObject) {
session.delete(paramObject);
}
}
public Object queryUnique(String paramString, Object[] paramArrayOfObject) { SQLQuery sqlQuery = sessionFactory.getCurrentSession().createSQLQuery(paramString);
if(paramArrayOfObject != null) {
for (int i = 0; i < paramArrayOfObject.length; i++) {
sqlQuery.setString(i, String.valueOf(paramArrayOfObject[i]));
}
}
return sqlQuery.uniqueResult();
}
public Object get(Class<?> paramClass, Serializable paramSerializable) {
return sessionFactory.getCurrentSession().get(paramClass, paramSerializable);
}
public Object load(Class<?> paramClass, Serializable paramSerializable) {
return sessionFactory.getCurrentSession().load(paramClass, paramSerializable);
} public List<?> loadAll(Class<?> paramClass) {
return sessionFactory.getCurrentSession().createQuery(" from " + paramClass.getName()).list();
} public List<?> query(String paramString, Object[] paramArrayOfObject, Class<?> paramClass) { SQLQuery sqlQuery = sessionFactory.getCurrentSession().createSQLQuery(paramString);
if(paramArrayOfObject != null) {
for (int i = 0; i < paramArrayOfObject.length; i++) {
sqlQuery.setString(i, String.valueOf(paramArrayOfObject[i]));
}
}
sqlQuery.addEntity(paramClass);
return sqlQuery.list();
} @SuppressWarnings("unchecked")
public List<Object[]> query(String paramString, Object[] paramArrayOfObject) {
SQLQuery sqlQuery = sessionFactory.getCurrentSession().createSQLQuery(paramString);
if(paramArrayOfObject != null) {
for (int i = 0; i < paramArrayOfObject.length; i++) {
sqlQuery.setString(i, String.valueOf(paramArrayOfObject[i]));
}
} return sqlQuery.list();
} public List<Map<String, Object>> queryMap(final String paramString, final Object[] paramArrayOfObject) {
final List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
sessionFactory.getCurrentSession().doWork(new Work() {
@Override
public void execute(Connection paramConnection) throws SQLException { PreparedStatement pS = paramConnection.prepareStatement(paramString);
if(paramArrayOfObject != null) {
for (int i = 0; i < paramArrayOfObject.length; i++) {
pS.setString(i + 1, String.valueOf(paramArrayOfObject[i]));
}
}
ResultSet rs = pS.executeQuery();
ResultSetMetaData columns = rs.getMetaData();
int num = columns.getColumnCount();
while (rs.next()) {
Map<String, Object> keyValue = new HashMap<String, Object>();
for (int i = 1; i <= num; i++) {
keyValue.put(columns.getColumnName(i), rs.getObject(i));
}
resultList.add(keyValue);
}
}
});
return resultList;
}
public int executeUpdate(String paramString, Object[] paramArrayOfObject) {
SQLQuery sqlQuery = sessionFactory.getCurrentSession().createSQLQuery(paramString);
if(paramArrayOfObject != null) {
for (int i = 0; i < paramArrayOfObject.length; i++) {
sqlQuery.setString(i, String.valueOf(paramArrayOfObject[i]));
}
}
return sqlQuery.executeUpdate();
}
public int count(final String paramString, final Object[] paramObject) {
return ((Number)queryUnique(paramString, paramObject)).intValue();
}
}
还有个分页的就不贴了
这个是注入 Mapper 的 AbstractBaseDaoImpl
package org.framework.core.orm.dao.support;
import java.util.List;
import java.util.Map;import org.framework.core.orm.IMapper;
import org.framework.core.orm.IPage;
import org.framework.core.orm.dao.IBaseDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;@Repository
public abstract class AbstractBaseDaoImpl<T> implements IBaseDao { @Autowired
@Qualifier("sqlServerPage")
private IPage page; @Autowired
private IMapper mapper;
protected List<?> query(String sql, Object[] params, Class<?> entity, int offset, int limit) {
return getMapper().query(getPage().getLimitString(sql, offset, limit), params, entity);
}
protected List<Object[]> query(String sql, Object[] params, int offset, int limit) {
return getMapper().query(getPage().getLimitString(sql, offset, limit), params);
}
protected List<Map<String, Object>> queryMap(String sql, Object[] params, int offset, int limit) {
return getMapper().queryMap(getPage().getLimitString(sql, offset, limit), params);
}
public IPage getPage() { return this.page;
} public void setPage(IPage page) {
this.page = page;
} public IMapper getMapper() {
return mapper;
} public void setMapper(IMapper mapper) {
this.mapper = mapper;
}}
再然后就是 继承 AbstractBaseDaoImpl 的 CommonDao
package org.framework.core.orm.dao.support;import java.util.List;
import java.util.Map;
import org.framework.core.orm.dao.ICommonDao;
import org.springframework.stereotype.Repository;@Repository
public class CommonDao extends AbstractBaseDaoImpl<Object> implements ICommonDao { public int count(String sql) {
return this.count(sql, null);
} public int count(String sql, Object[] params) {
return getMapper().count(sql, params);
} public int executeUpdate(String sql, Object[] params) {
return getMapper().executeUpdate(sql, params);
} public int executeUpdate(String sql) {
return this.executeUpdate(sql, null);
}
public List<?> queryEntityList(String sql, Class<?> entity) {
return this.queryEntityList(sql, null, entity);
} public List<?> queryEntityList(String sql, Class<?> entity, int offset, int limit) {
return this.queryEntityList(sql, null, entity, offset, limit);
}
public List<?> queryEntityList(String sql, Object[] params, Class<?> entity) {
return getMapper().query(sql, params, entity);
} public List<?> queryEntityList(String sql, Object[] params, Class<?> entity, int offset, int limit) {
return super.query(sql, params, entity, offset, limit);
}
public List<Object[]> query(String sql) {
return this.query(sql, null);
} public List<Object[]> query(String sql, Object[] params) {
return getMapper().query(sql, params);
} public List<Object[]> query(String sql, int offset, int limit) {
return this.query(sql, offset, limit);
} public List<Object[]> query(String sql, Object[] params, int offset, int limit) {
return super.query(sql, params, offset, limit);
} public List<Map<String, Object>> queryMap(String sql) {
return this.queryMap(sql, null);
} public List<Map<String, Object>> queryMap(String sql, Object[] params) {
return getMapper().queryMap(sql, params);
} public List<Map<String, Object>> queryMap(String sql, int offset, int limit) {
return this.queryMap(sql, null, offset, limit);
} public List<Map<String, Object>> queryMap(String sql, Object[] params, int offset, int limit) {
return super.queryMap(sql, params, offset, limit);
} public Object queryUniqueResult(String sql, Object[] params) {
return getMapper().queryUnique(sql, params);
} public Object queryUniqueResult(String sql) {
return this.queryUniqueResult(sql, null);
}}
如果我吧 @Transactional 标注在 任意 DAO实现类 或者接口上就可以.获取到session 但是这样回归业务层就没意义了. 感觉就好像 那个@Transactional 在service 层上没起作用一样. 我的 context:component-scan路径也没错吧. 整个目录注解都包含了
这是公司上的配置.
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd "> <context:annotation-config />
<!-- @Controller Convert To Bean -->
<context:component-scan base-package="org.framework.web.controller" />
<!-- Start Spring MVC Annotation -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="messageConverters" /><!-- JSON -->
</list>
</property>
</bean> <!-- Http JSON MessageConverters -->
<bean id="messageConverters" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
<!-- <property name="objectMapper">
<bean class="org.codehaus.jackson.map.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss"/>
</bean>
</property>
</bean>
</property> -->
</bean>
<!-- 异常捕获 -->
<bean id="handlerExceptionResolver" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver">
<property name="messageConverters" ref="messageConverters"/>
</bean>
<!-- 拦截器配置 -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<bean class="org.framework.web.controller.Interceptor.ServiceInterceptor" />
</list>
</property>
</bean>
</beans>
这个是家里的.~
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd "> <context:annotation-config />
<!-- @Controller Convert To Bean -->
<context:component-scan base-package="org.framework.web.controller" use-default-filters="false">
<context:include-filter type="regex" expression="org.framework.web.controller.*Controller"/>
</context:component-scan>
<!-- Start Spring MVC Annotation -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="messageConverters" /><!-- JSON -->
</list>
</property>
</bean> <!-- Http JSON MessageConverters -->
<bean id="messageConverters" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
<!-- <property name="objectMapper">
<bean class="org.codehaus.jackson.map.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss"/>
</bean>
</property>
</bean>
</property> -->
</bean>
<!-- 异常捕获 -->
<bean id="handlerExceptionResolver" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver">
<property name="messageConverters" ref="messageConverters"/>
</bean>
<!-- 拦截器配置 -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<bean class="org.framework.web.controller.Interceptor.ServiceInterceptor" />
</list>
</property>
</bean>
</beans>妈蛋呐!!!! 罪魁祸首就在那 context:component-scan 这个包路径里面,原来公司那边我没有过滤筛选掉 不是控制器的类. ~~ (奇怪的是 这样启动spring 也不报错. = =||) 然后我的 @Service 和 @Controller 放在一个包目录下. spring 就把我的@Service当成@Controller 转换了. 就是因为这个.Spring 的@Transactional 标签同 @Controller 的一起是不会开启事务的(貌似也可以配置到控制层~ 具体好像是在web.xml 配置). 所以才导致我一直 没有事务.. 结贴结贴!! 辛苦自己了.大家以后也注意注意下~