Mybatis学习第二天——mapper的动态代理

白日放歌须纵酒,青春作伴好还乡。这篇文章主要讲述Mybatis学习第二天——mapper的动态代理相关的知识,希望能为你提供帮助。
传统的Dao层开发通过接口与实现类的方式,Mybatis中通过mapper动态代理是需要定义接口。
1.传统Dao层封装
【Mybatis学习第二天——mapper的动态代理】

Mybatis学习第二天——mapper的动态代理

文章图片

那么可以将公共资源提取出来,剩余的封装成方法来实现。下面是UserDaoImpl.java中对查询的简单封装
1 package com.mybatis.dao.impl; 2 3 import org.apache.ibatis.session.SqlSession; 4 import org.apache.ibatis.session.SqlSessionFactory; 5 6 import com.mybatis.dao.UserDao; 7 import com.mybatis.pojo.User; 8 9 public class UserDaoImpl implements UserDao { 10 11//没有导入Spring,采用传参的方式获取 12SqlSessionFactory sqlSessionFactory ; 13 14public UserDaoImpl(SqlSessionFactory sqlSessionFactory) { 15super(); 16this.sqlSessionFactory = sqlSessionFactory; 17} 18 19@Override 20public User findUserById(Integer id) { 21SqlSession sqlSession = sqlSessionFactory.openSession(); 22User user = sqlSession.selectOne("test.findUserById",id); 23 24sqlSession.close(); 25return user; 26} 27 28 }

在测试中通过加载公共资源,确定调用的mapper文件(此时表示User.xml)
1 @Test 2public void testName() throws Exception { 3/** 4*1. 创建SqlSessionFactoryBuilder对象 52. 加载SqlMapConfig.xml配置文件 63. 创建SqlSessionFactory对象 74. 创建SqlSession对象 85. 执行SqlSession对象执行查询,获取结果User 96. 打印结果 107. 释放资源 11*/ 12String resource = "SqlMapConfig.xml"; 13InputStream in = Resources.getResourceAsStream(resource); 14 15SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); 16 17UserDao userdao = new UserDaoImpl(sqlSessionFactory); 18 19User user = userdao.findUserById(1); 20 21System.out.println(user.getUsername());

2.mapper动态代理模式
UserMapper um = sqlSession.getMapper(UserMapper.class); 获取代理,传入的值为创建的动态代理接口
Mybatis学习第二天——mapper的动态代理

文章图片
(个人理解,有误希望指正)
在UserMapper接口中,创建的方法需要满足以下四个原则Mybatis才能进行动态代理操作:
1 public interface UserMapper { 2//四大原则 3//1.接口中的方法名与User.xml中对应的id名一致 4//2.方法中的返回类型与User.xml中的一致 5//3.传入的参数类型一致 6//4.命名空间绑定此接口 7public User findUserById(Integer id); 8 }

前三个好理解,方法的名字,返回类型,参数类型与User.xml文件中的属性一致。命名空间绑定此接口,只需要在namesapce上用接口的全路径。如下:
Mybatis学习第二天——mapper的动态代理

文章图片

注意:User.xml一定要在核心配置SqlMapConfig.xml中加载
3.mapper映射器
1< mappers> 2< !-- 第一种方式只需指定mapper文件路径即可 --> 3< mapper resource="sqlmap/User.xml"/> 4< mapper resource="sqlmap/UserMapper.xml"/> 5< !-- 第二种方式,需对应接口的路径,同时mapper文件名需与接口名一致,文件位置必须在同一目录下 --> 6< mapper class="com.mybatis.mapper.UserMapper"/> 7< !-- 第三种方法,指定接口文件的包名,同时mapper文件名需与接口名一致,文件位置必须在同一目录下 --> 8< package name="com.mybatis.mapper"/> 9< /mappers>

推荐使用第三种方式。
 

    推荐阅读