首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

mybatis spring 整合的一点有关问题

2012-04-28 
mybatis spring 整合的一点问题----------spring配置文件----------------?xml version1.0 encoding

mybatis spring 整合的一点问题
----------spring配置文件----------------

<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd">


<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
<property name="configLocation" value="classpath:mybatis.xml" />
</bean>

<bean id="mapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.insigma.mappers.Mapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

<bean id="smapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.insigma.mappers.SMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

<bean id="test" class="com.insigma.test.Tes">
<property name="mapper" ref="mapper">
</property>
<property name="id" value="12"></property>
</bean>

</beans>  

----------mybatis配置文件----------------
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>

<typeAliases>
<typeAlias type="com.insigma.model.Student" alias="student" />
</typeAliases>

<mappers>
<mapper resource="com/insigma/mappers/Mapper.xml" />
<mapper resource="com/insigma/mappers/SMapper.xml" />
</mappers>
</configuration>

----------mapper配置文件----------------
<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper 
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.insigma.mappers.Mapper">

<select id="getAll" resultType="student">
select * from student2 
</select>

</mapper> 

----------mapper接口----------------
package com.insigma.mappers;

import java.util.List;

import org.springframework.stereotype.Component;

import com.insigma.model.Student;

public interface Mapper {

public List<Student> getAll();
}




----------Student 类----------------
package com.insigma.model;

public class Student {

private int id;

private String name;

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 static void main(String[] args) {

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

System.out.println(context.getBean("myDataSource"));
System.out.println(context.getBean("sqlSessionFactory"));

System.out.println(context.getBean("mapper"));
System.out.println(context.getBean("test"));

}

----------测试结果----------------
org.apache.commons.dbcp.BasicDataSource@19e8f17
org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@c44b88
null
com.insigma.test.Tes@17e121c

----------问题----------------

所有配置都好像没错 为什么System.out.println(context.getBean("mapper"))输出null ??? 在线求解 



[解决办法]
还真是这样,我用我以前写的例子,这么操作就会出错。

但是获取出来直接使用或者注入到其他的bean内,都没问题。

感觉mapper并没有被实例化!

别在这里纠缠了。我的代码片段如下:

ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "spring.xml" });

BeanFactory factory = (BeanFactory) context;
IMybatisDao dao = (IMybatisDao) factory.getBean("mybatisDao");
//下面这行的方法可以正常执行
System.out.println(dao.selectOne("20110101"));
//这里就是打印不出来,抛空指针异常
System.out.println(dao);

热点排行