我有一个使用 Mybatis (v3.0.5) 进行 OR/mapping 的项目。典型(功能)设置如下:
- 要映射的 POJO -
Fruit
- 一个“MyBatis”映射器 XML 文件——
FruitMapper.xml
所有 SQL 查询的去向 - 定义所有相同映射器方法的接口映射器 -
FruitMapper.java
- 具有接口映射器引用的 DAO -
FruitDao
- MyBatis 配置文件 -
mybatis-config.xml
- 将所有内容与 Spring config XML 链接在一起 -
myapp-spring-config.xml
示例实现:
public class Fruit {
private String type = "Orange"; // Orange by default!
// Getters & setters, etc. This is just a VO/POJO
// that corresponds to a [fruits] table in my DB.
}
public interface FruitMapper {
public List<Fruit> getAllFruits();
}
public class FruitDao {
private FruitMapper mapper;
// Getters & setters
public List<Fruit> getAllFruits() {
return mapper.getAllFruits();
}
}
FruitMapper.xml
<mapper namespace="net.me.myapp.FruitMapper">
<select id="getAllFruits" resultSetType="FORWARD_ONLY">
SELECT * FROM fruits
</select>
</mapper>
mybatis-config.xml
<configuration>
<!-- Nothing special here. -->
</configuration>
myapp-spring-config.xml:(这是我想要摆脱的)
<bean id="fruitDao" class="net.me.myapp.FruitDao">
<property name="mapper" ref="fruitMapper" />
</bean>
<bean id="fruitMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="net.me.myapp.FruitMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="myDatasource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="mapperLocations" value="classpath:*Mapper.xml" />
</bean>
<bean id="myDatasource" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
<property name="jndiName">
<value>java:/comp/env/jdbc/our-mysql-database</value>
</property>
</bean>
这很好用。但是,我不是 spring 的忠实粉丝,我想知道如何实现我自己的纯 Java 版本,它是 Spring 配置文件中所有 bean 的功能。
所以我问:我需要编写什么“胶水代码”/类才能正确实现FruitMapper.java
,以便FruitMapper.xml
在运行时绑定到?这样每当我写:
FruitMapperDao dao = new FruitMapperDao();
FruitMapperImpl mapper = new FruitMapperImpl(); // <== this is what I need to implement here
dao.setMapper(mapper);
List<Fruit> allFruits = dao.getAllFruits();
...那么我应该得到fruit
我的数据源中所有记录的列表吗?提前致谢!
更新
我还应该提到,鉴于上面的设置,我需要mybatis.jar
在mybatis-spring.jar
运行时类路径上。我想完全摆脱 Spring,并且不需要任何 Spring jar 或类来让我的纯 Java 解决方案工作!