聊聊、Mybatis 第二篇

首先引入相应的依赖包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.5</version>
</dependency>
(1)SqlSessionTemplate
新增spring-mybatis.xml文件,首先来看看SqlSessionTemplate
<!-- mybatis-spring 1.2.5 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:mappers/*.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />  
</bean>
<bean id="channelServiceMybatis" class="com.rockcode.www.serviceimpl.MybatisChannelServiceImpl">
<property name="sqlSession" ref="sqlSessionTemplate"></property>
</bean>
这里还是有些不同,首先Mapper接口可以去掉,只需要Mapper.xml文件存在,所以上面mapperLocations指定了位置,而且Mapper.xml的名称随便取。例如:MyMapper.xml
<mapper namespace="MyMapper">
<select id="queryAllChannels" resultType="java.util.HashMap">
select * from t_distributor
</select>
</mapper>
再看看MybatisChannelServiceImpl内容
public class MybatisChannelServiceImpl implements ChannelService{ 
private SqlSessionTemplate sqlSessionTemplate;
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSessionTemplate = sqlSession;
}
@Override
public void getAllChannels() {
List<ChannelManageDto> list = this.sqlSessionTemplate.selectList("MyMapper.queryAllChannels");
System.out.println(list);
}
}
没错,MyMapper是一个命名空间,通过它来调用相关SQL语句。
(2)SqlSessionDaoSupport
感觉还是有点复杂,用SqlSessionDaoSupport来改造下,MybatisChannelServiceImpl继承SqlSessionDaoSupport。上面的配置变成这样:
<!-- mybatis-spring 1.2.5 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:mappers/*.xml" />
</bean>
<bean id="channelServiceMybatis" class="com.rockcode.www.serviceimpl.MybatisChannelServiceImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
再看看MybatisChannelServiceImpl内容
public class MybatisChannelServiceImpl extends SqlSessionDaoSupport implements ChannelService{ 
@Override
public void getAllChannels() {
List<Map<String,Object>> list = getSqlSession().selectList("MyMapper.queryAllChannels");
System.out.println(list);
}
}
与上面相比较而言,简单了些。
(3)登记Mapper
在spring-mybatis.xml里面添加MapperFactoryBean,MapperFactoryBean是Mapper注册类。什么是注册类呢?这个后面讲。
<!-- mybatis-spring 1.2.5 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!--如果Mapper接口和Mapper.xml在同一个目录下,那么不需要下面这一条配置-->
<!-- <property name="mapperLocations" value="classpath*:mappers/*.xml" /> -->
</bean>
<bean id="channelMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.rockcode.www.mapper.ChannelMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="channelServiceMybatis" class="com.rockcode.www.serviceimpl.MybatisChannelServiceImpl">
<property name="channelMapper" ref="channelMapper"></property>
</bean>
我们来看看,ChannelMapper和MybatisChannelServiceImpl
public interface ChannelMapper {
@Select("select * from t_distributor")
List<ChannelManageDto> queryAllChannels();
}
public class MybatisChannelServiceImpl implements ChannelService{
private ChannelMapper channelMapper;
public void setChannelMapper(ChannelMapper channelMapper) {
this.channelMapper = channelMapper;
}
@Override
public void getAllChannels() {
List<ChannelManageDto> list = channelMapper.queryAllChannels();
System.out.println(list);
}
}
这里我们没有用到Mapper.xml文件,因为Mapper接口配置了@Select注解,如果去掉这个注解,我们用Mapper.xml来,那么Mapper和Mapper.xml文件需要在同一个目录下面,而且名称相同。如果不在同一个目录下面,
我们需要在spring-mybatis.xml里面SqlSessionFactoryBean下面新增<property name="mapperLocations" value="classpath*:mappers/*.xml"/>,即指定Mapper.xml位置。还有一点,命名空间名称不能随意,需
是Mapper的包名.Mapper名称,例如下面的com.rockcode.www.mapper.ChannelMapper。
来看看ChannelMapper.xml什么样子
<mapper namespace="com.rockcode.www.mapper.ChannelMapper">
<select id="queryAllChannels" resultType="com.rockcode.www.po.ChannelManageDto">
select * from t_distributor
</select>
</mapper>
(4)自动扫描Mapper
第一种方式
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.rockcode.www.mapper" />
</bean>
第二种方式
<mybatis:scan base-package="com.rockcode.www.mapper"/>
MybatisChannelServiceImpl实现:
public class MybatisChannelServiceImpl implements ChannelService{
@Autowired
private ChannelMapper channelMapper;
@Override
public void getAllChannels() {
List<ChannelManageDto> list = channelMapper.queryAllChannels();
System.out.println(list);
}
}
ChannelMapper实现:
public interface ChannelMapper {
List<ChannelManageDto> queryAllChannels();
}
这种方式太简单了,一条配置就可以了。

猜你喜欢

转载自www.cnblogs.com/xums/p/10312006.html
今日推荐