Mybaits之Mapper动态代理开发
开发规范:
Mapper接口开发方法只需要程序员与Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法同平常写的Dao接口实现类的方法。
Mapper接口开发需要遵循以下规范:
1、Mappper.xml文件中的namespace与mapper接口的类路径相同
2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
package deep.mapper; import deep.pojo.Account; public interface UserMapper { //遵循四个原则 //接口方法名 == Account.xml 中的 id名 //返回值类型 与 Mapper.xml文件中的返回值类型要一致 //方法的入参类型要与Mapper.xml文件中入参的类型要一致 //命名空间绑定此接口(Account.xml 中的 mapper 中的 namespace = “deep.mapper.UserMapper”) public Account findUserById(Integer id); }
<mapper namespace="deep.mapper.UserMapper"> <select id="findUserById" parameterType="Integer" resultType="deep.pojo.Account"> select * from account where id = #{v} </select> .... </mapper>
package deep.junit; 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.Test; import deep.mapper.UserMapper; import deep.pojo.Account; public class MyBatisMapperTest { @Test public void testMapper() throws Exception { //加载核心配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); SqlSession sqlSession = sqlSessionFactory.openSession(); //SqlSession帮我生成一个实现类(给接口) UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Account account = userMapper.findUserById(27); System.out.println(account); } }
小结:
♦selectOne和selectList
动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne()方法。
♦namespace
mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性。