mybatis中使用mapper代理方法开发dao

前言:了解代理开发之前必须要了解原始开发。因为只有形成对比之后,才可以举一反三发现其中的优劣。博主有一篇博客关于mybatis原始dao开发方式的详解。希望可以帮助到大家https://blog.csdn.net/My_name_is_ZwZ/article/details/82926601

什么是mapper代理开发?

一种开发dao层的方式。

为什么要使用mapper代理方法开发dao?

为了弥补原始方法开发dao的弊端。例如:

  1. dao接口实现类方法中存在大量重复代码 ;
  2. 调用sqlSession方法时,将satement的id硬编码了 ;
  3. sqlSession的方法中,要求传入的参数是Object类型的,如果传错了参数,编译不会报错,执行的时候才会报错,降低开发效率,不利于开发。

 使用mapper代理开发dao的步骤:

大部分与原始dao开发的步骤相同。在开头那篇博客里有详细介绍每一个步骤,所以这里就写一个大致的步骤,不再仔细展开。

1.使用IDEA创建一个maven工程(大家完全可以通过手动导入jar包的方式使用mybatis)

 2.在src目录下创建一个名为SqlMapConfig.xml的xml文件

3.配置SqlMapConfig.xml文件中的内容

 4.创建表所对应的类的映射文件

    【注意】UserMapper.xml文件中namespace的内容不能乱写。必须写成我们将要定义的mapper接口的地址;其它与原始dao开发方法相同

<?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">

<!--namespace命名空间  在这里一定要写成定义的mapper接口的地址-->
<mapper namespace="dao.jiekou.Usermapper">
   
    <select id="findById" parameterType="int" resultType="com.demo.User">
        SELECT * FROM User WHERE userid=#{id}
    </select>
</mapper>

5.创建接口

【注意1】mapper.java接口中的方法名和mapper.xml中statement的id一致;  如下:

public interface Usermapper {
    /**
    这里的findById与mapper.xml文件中根据id查询对象的<select>标签中的id属性的内容保持一致
    */
    User findById(int id);
}

【注意2】mapper.java接口中的方法接收参数的类型与parameterType中的类型保持一致;如上

【注意3】mapper.java接口中的方法返回的参数的类型与resultType中指明的类型保持一致;如上 

 6.在总的配置文件中映射上表所对应的类的映射文件

 7.测试运行

public class TestDaiLi {
    public static void main(String[] args) throws IOException {
        //mybatis的总配置文件
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //创建会话工厂,传入mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        /*通过工厂得到SqlSession*/
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //得到dao类的代理对象  相当于原始dao中接口的实现类
        Usermapper usermapper = sqlSession.getMapper(Usermapper.class);
        
        User user = usermapper.findById(1);
        System.out.println(user.getUserName());
    }
}

总结:

在使用mapper代理开发dao的过程中,与原始dao开发方法相比,唯一省去的步骤就是:创建接口的实现类。这样子就大大提高了代码的可读性。便于开发

sqlSession可以自动创建一个mapper接口的代理对象。我们只需要把刚刚写好的mapper接口的字节码对象传给getMapper方法,即可得到一个该接口对应的代理对象,然后就可以使用这个代理对象来操作接口中具体的方法。


    由于mapper接口中方法的参数要根据映射文件中的parameterType来指定,而parameterType只有一个,所以mapper接口中所有方法的参数都只有一个! 但是可以使用包装类型的pojo满足不同的业务方法的需求。也就是说使用包装类型把所需要的多个参数都包装到一个类中去

猜你喜欢

转载自blog.csdn.net/My_name_is_ZwZ/article/details/82927394