Spring + Mybatis 结合报错 本帖最后由 clear_shadow 于 2012-12-27 17:54:10 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Error opening session说明是连接有错, 给你个借鉴的配置 <!-- 定义运维平台mysql数据源 --> <bean id="proxySource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${mysql_proxy_DriverClassName}" /> <property name="url" value="${mysql_proxy_url}" /> <property name="username" value="${mysql_proxy_username}" /> <property name="password" value="${mysql_proxy_password}" /> <property name="initialSize" value="${mysql_proxy_initialSize}" /> <property name="maxActive" value="${mysql_proxy_maxActive}" /> <property name="maxWait" value="${mysql_proxy_maxWait}" /> <property name="maxIdle" value="${mysql_proxy_maxIdle}" /> <property name="minIdle" value="${mysql_proxy_minIdle}" /> <property name="removeAbandoned" value="${mysql_proxy_removeAbandoned}" /> <property name="removeAbandonedTimeout" value="${mysql_proxy_removeAbandonedTimeout}" /> <property name="testWhileIdle" value="${mysql_proxy_testWhileIdle}" /> <property name="testOnBorrow" value="${mysql_proxy_testOnBorrow}" /> <property name="testOnReturn" value="${mysql_proxy_testOnReturn}" /> <property name="validationQuery" value="${mysql_proxy_validationQuery}" /> <property name="validationQueryTimeout" value="${mysql_proxy_validationQueryTimeout}" /> <property name="timeBetweenEvictionRunsMillis" value="${mysql_proxy_timeBetweenEvictionRunsMillis}" /> <property name="numTestsPerEvictionRun" value="${mysql_proxy_numTestsPerEvictionRun}" /> </bean> <!-- 为每个数据源单独定义 SqlSessionFactory --> <bean id="applyCenterSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="proxySource" /> </bean> <!-- 为每个数据源单独定义 SqlMapper --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.test.quarry.proxy.dao" /> <property name="sqlSessionFactory" ref="applyCenterSqlSessionFactory" /> </bean><property name="basePackage" value="com.test.quarry.proxy.dao" /> 改成自己的mapper路径就可以了然后在该路径下建接口mapper,和mapper的xml文件就可以 谢谢你的回复。我参照你的改了后还是报同样的错误。我仔细看了下,下面是我的service层的方法,我感觉是我在获取sqlSessionFactory实例的时候出错了,没和spring整合前我直接用Mybatis是可以访问数据库并取得数据的。整合之后,我看资料说mybatis的配置文件可以注释掉了。spring会自动代替mybatis。我不知道是不是这个地方出错了。TestMapperUser.java--------------------------------------------------------------------------public class TestMapperUser { static SqlSessionFactory sqlSessionFactory = null; static { sqlSessionFactory = MyBatisUtil.getSqlSessionFactory(); } public boolean checkUser(String userName, String password) { SqlSession sqlSession = sqlSessionFactory.openSession(); try { UserMapper mapper = sqlSession.getMapper(UserMapper.class); UserExample example = new UserExample(); example.clear(); example.or().andUsernameEqualTo(userName).andPasswordEqualTo(password); return !lst.isEmpty(); } finally { sqlSession.close(); } }}--------------------------------------------------------------------------MyBatisUtil.java--------------------------------------------------------------------------public class MyBatisUtil { private final static SqlSessionFactory sqlSessionFactory ; static { String resouce = "mybatis-config.xml"; Reader reader = null; try { reader = Resources.getResourceAsReader(resouce); } catch (IOException e) { System.out.println(e.getMessage()); } sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory ; }} 照我那样配了之后就不用再service里获取sqlSessionFactory 了,@Servicepublic class MongoServiceImpl implements MongoService{ private static Logger logger = LoggerFactory.getLogger(MongoServiceImpl.class); private ClientInfoMapper clientMapper; @Autowired public MongoServiceImpl(ClientInfoMapper clientMapper) { this.clientMapper = clientMapper; }直接MongoServiceImpl(ClientInfoMapper clientMapper)在serivce里这样注入你的mapper接口就可以调用了 请问如果按照你的这种配置方法,sqlSession是自动创建和销毁的么? 按照你说的自动注入的方式,我的程序已经调通了,谢谢你了。只是还想确认下是不是sqlsession是自动创建和销毁的。 你先确认下变量都有setter/getter方法没有 都有。之前我是手动的获得sqlsession。后来按照2楼说的改成自动的就好了 先学习好ssh吧 把那个看清楚了 再来弄这个 保证没问题 大哥 liferay连数据库的问题 struts2框架关于显示html符号的问题 JSP对于特殊字符要怎么处理? ClassCastException异常,大家帮我看看 Tomcat启动Struts工程时出现问题 用EL动态生成表格 求jfreechart0.9.20和它的开发文档 怎样实现自动剔除空格? 为何用不了application? <了解Struts1.1 > 我刚看到的一篇好文章,贴出来,大家共享 dayday up (: spring+quartz的异常,不能正常启动 spring MVC cvc-complex-type.2.4.c
说明是连接有错,
<!-- 定义运维平台mysql数据源 -->
<bean id="proxySource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${mysql_proxy_DriverClassName}" />
<property name="url" value="${mysql_proxy_url}" />
<property name="username" value="${mysql_proxy_username}" />
<property name="password" value="${mysql_proxy_password}" />
<property name="initialSize" value="${mysql_proxy_initialSize}" />
<property name="maxActive" value="${mysql_proxy_maxActive}" />
<property name="maxWait" value="${mysql_proxy_maxWait}" />
<property name="maxIdle" value="${mysql_proxy_maxIdle}" />
<property name="minIdle" value="${mysql_proxy_minIdle}" />
<property name="removeAbandoned" value="${mysql_proxy_removeAbandoned}" />
<property name="removeAbandonedTimeout" value="${mysql_proxy_removeAbandonedTimeout}" />
<property name="testWhileIdle" value="${mysql_proxy_testWhileIdle}" />
<property name="testOnBorrow" value="${mysql_proxy_testOnBorrow}" />
<property name="testOnReturn" value="${mysql_proxy_testOnReturn}" />
<property name="validationQuery" value="${mysql_proxy_validationQuery}" />
<property name="validationQueryTimeout" value="${mysql_proxy_validationQueryTimeout}" />
<property name="timeBetweenEvictionRunsMillis" value="${mysql_proxy_timeBetweenEvictionRunsMillis}" />
<property name="numTestsPerEvictionRun" value="${mysql_proxy_numTestsPerEvictionRun}" />
</bean> <!-- 为每个数据源单独定义 SqlSessionFactory -->
<bean id="applyCenterSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="proxySource" />
</bean> <!-- 为每个数据源单独定义 SqlMapper -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.test.quarry.proxy.dao" />
<property name="sqlSessionFactory" ref="applyCenterSqlSessionFactory" />
</bean>
<property name="basePackage" value="com.test.quarry.proxy.dao" /> 改成自己的mapper路径就可以了
然后在该路径下建接口mapper,和mapper的xml文件就可以
谢谢你的回复。我参照你的改了后还是报同样的错误。
我仔细看了下,下面是我的service层的方法,我感觉是我在获取sqlSessionFactory实例的时候出错了,没和spring整合前我直接用Mybatis是可以访问数据库并取得数据的。整合之后,我看资料说mybatis的配置文件可以注释掉了。spring会自动代替mybatis。我不知道是不是这个地方出错了。
TestMapperUser.java
--------------------------------------------------------------------------
public class TestMapperUser { static SqlSessionFactory sqlSessionFactory = null; static {
sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
} public boolean checkUser(String userName, String password) {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
UserExample example = new UserExample(); example.clear();
example.or().andUsernameEqualTo(userName).andPasswordEqualTo(password); return !lst.isEmpty();
} finally {
sqlSession.close();
}
}}
--------------------------------------------------------------------------
MyBatisUtil.java
--------------------------------------------------------------------------
public class MyBatisUtil {
private final static SqlSessionFactory sqlSessionFactory ; static {
String resouce = "mybatis-config.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resouce);
} catch (IOException e) {
System.out.println(e.getMessage());
} sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory ;
}}
@Service
public class MongoServiceImpl implements MongoService
{
private static Logger logger = LoggerFactory.getLogger(MongoServiceImpl.class);
private ClientInfoMapper clientMapper; @Autowired
public MongoServiceImpl(ClientInfoMapper clientMapper)
{
this.clientMapper = clientMapper;
}
直接MongoServiceImpl(ClientInfoMapper clientMapper)在serivce里这样注入你的mapper接口就可以调用了
请问如果按照你的这种配置方法,sqlSession是自动创建和销毁的么?
按照你说的自动注入的方式,我的程序已经调通了,谢谢你了。只是还想确认下是不是sqlsession是自动创建和销毁的。