【Mybatis从0到1-006】mybatis开发DAO之基于mapper代理

来源:互联网 发布:mac如何解压rar文件 编辑:程序博客网 时间:2024/05/16 18:48

    在上一章中,介绍了mybatis开发dao的原始方法,并总结了,原始开发方式的问题,本章,将介绍基于mapper代理的方式开发dao。

    与传统开发方式相比,mapper代理开发,程序员需要书写mapper接口(相当于dao接口),除此外,程序员还需要编写mapper.xml映射文件,编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。
开发规范:

1、在mapper.xml中namespace等于mapper接口地址;

2、mapper.java接口中的方法名和mapper.xml中statement的id一致

3、mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。

4、mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。

下面开始具体的操作:

【1】创建mapper文件夹,路径为:src\main\java\mapper,在文件夹内创建接口文件,名字为:UserMapper,在文件中写入如下代码:(这里只拿一个来举例子:通过id查用户信息)

public interface UserMapper {    //根据id查询用户基本信息    User findUserById(int id) throws Exception;}

【2】接口创建完毕后,创建xml文件,名字为UserMapper.xml,路径为:src\main\resources\mapper,代码copy文件User.xml(路径:src\main\resources\sqlmap\User.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"><!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离注意:使用mapper代理方法开发,namespace有特殊重要的作用,namespace等于mapper接口地址--><mapper namespace="mapper.UserMapper">    <!-- 在 映射文件中配置很多sql语句 -->    <!-- 需求:通过id查询用户表的记录 -->    <!-- 通过 select执行数据库查询    id:标识 映射文件中的sql,将sql语句封装到mappedStatement对象中,所以将id称为statement的id    parameterType:指定输入参数的类型,这里指定int型【此时,与接口中输入参数类型一致】    #{}表示一个占位符号,#{id}:其中的id表示【接收输入】的参数,参数名称就是id,如果输入参数是简单类型,#{}中的参数名    可以任意,可以value或其它名称    resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。-->    <select id ="findUserById" parameterType="int" resultType="po.User">        SELECT *FROM user WHERE id=#{id}    </select></mapper>

在修改code过程中,有几处需要注意:

1.namespace按照开发规范,应为:namespace="mapper.UserMapper";

2.id按照开发规范,应与接口的方法名一致,应为:id ="findUserById";

3.parameterType按照开发规范,应与接口中的输入参数类型一致,应为:parameterType="int";

4.resultType按开发规范,应与接口中方法返回值类型一致,应为:resultType="po.User"。

【3】完成以上两个步骤,还有最重要一步至关重要,那就是要在SqlMapConfig.xml中加载UserMapper.xml文件,否则之前所做努力全都白费。打开SqlMapConfig.xml(路径为:src\main\resources\SqlMapConfig.xml),加入如下代码:将上次的映射文件暂时毙掉, <!--<mapper resource="sqlmap/User.xml"/>-->。

<!-- 加载 映射文件 --><mappers>    <!--<mapper resource="sqlmap/User.xml"/>-->    <mapper resource="mapper/UserMapper.xml"/></mappers>

【4】最后开始进行单元测试,生成测试文件的步骤,在【003】中已有详细介绍,这里只贴出代码:

public class UserMapperTest {    private SqlSessionFactory sqlSessionFactory;    //此方法在执行findUserById()之前执行    @Before    public void setUp() throws Exception {        //mybatis配置文件        String resource = "SqlMapConfig.xml";        //得到配置文件流        InputStream inputStream = Resources.getResourceAsStream(resource);        //创建会话工厂        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    }    @Test    public void findUserById() throws Exception {        // 通过工厂得到SqlSession        SqlSession sqlSession = sqlSessionFactory.openSession();        //创建UserMapper对象,mybatis自动生成mapper代理对象        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //调用接口中的方法        User user = userMapper.findUserById(22);        //关闭sqlsession        sqlSession.close();        System.out.println(user);    }}
【5】最后展示下,结果,由于测试代码中,我是以id=22进行查询的,所以结果显示id=22的用户信息。


阅读全文
1 0
原创粉丝点击