题记
上一篇介绍的是Mybatis开发dao的方法的原始dao的方式,这次就来说一下另外一种dao的实现方式即Mapper代理的方式。
代码以及实现
Mapper代理的方式有一定的规范需要遵守
我们的*Mapper.xml中的namespace要配置为ResourceMapper.java的全限定名如下:
ResourceMapper.xml
<?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.pingan.hdht.dao.ResourceMapper" >
<resultMap id="BaseResultMap" type="com.pingan.hdht.model.Resource" >
<id column="RESOURCE_ID" property="resourceId" jdbcType="VARCHAR" />
<result column="RESOURCE_TYPE" property="resourceType" jdbcType="VARCHAR" />
<result column="RESOURCE_NAME" property="resourceName" jdbcType="VARCHAR" />
<result column="RESOURCE_DESC" property="resourceDesc" jdbcType="VARCHAR" />
<result column="RESOURCE_PATH" property="resourcePath" jdbcType="VARCHAR" />
<result column="ENABLE" property="enable" jdbcType="SMALLINT" />
<result column="PARENT_ID" property="parentId" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
RESOURCE_ID, RESOURCE_TYPE, RESOURCE_NAME, RESOURCE_DESC, RESOURCE_PATH, ENABLE,
PARENT_ID
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from SHHD_RESOURCES
where RESOURCE_ID = #{resourceId,jdbcType=VARCHAR}
</select>
</mapper>
ResourceMapper
public interface ResourceMapper {
Resource selectByPrimaryKey(String resourceId);
}
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务由mybatis管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池,由mybatis管理 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://10.20.22.211:3306/activity" />
<property name="username" value="root" />
<property name="password" value="mysql123" />
</dataSource>
</environment>
</environments>
<!--加载映射文件 -->
<mappers>
<mapper resource="sqlmap/ResourceMapper.xml"/>
</mappers>
</configuration>
单元测试类
package com.pingan.hdht.dao;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;
import com.pingan.hdht.model.Resource;
/**
* <p>
* 概要信息:
* 状态信息:
* 操作系统/硬件依赖/应用时可能存在的差异:
* 安全约束:
* 序列化格式:
* 参考的外部规格说明:
* </p>
*
* <p>
* 版权: ©2016 中国平安保险(集团)股份有限公司 版权所有
* </p>
*
* @author gaoyunqi745
* @version %I%, %G%
*/
public class ResourceDaoImplTest {
private static SqlSessionFactory sqlSessionFactory = null;
/**
* <p>
* 行为描述:
* 状态转变:
* 定义的算法:
* 操作系统/硬件依赖:
* 允许的实现变化:
* 安全约束:
* </p>
* @param
* @return
* @throws
* @see
* @since %I%
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
//mybatis配置文件
String resource = "SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂,传递mybatis的配置文件信息
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testMapperSelectByPrimaryKey() {
SqlSession sqlSession = sqlSessionFactory.openSession();
ResourceMapper resourceMapper = sqlSession.getMapper(ResourceMapper.class);
Resource resource = resourceMapper.selectByPrimaryKey("1");
System.out.println(resource.getResourceDesc());
}
}
运行效果