MyBatis学习笔记3-Mapper代理方式开发DAO          返回主页

关于SqlSession

  1. sqlSession是一个面向用户(程序员)的接口,程序员调用sqlSession的接口方法进行操作数据库。
  2. 由于sqlSession是 线程不安全,所以sqlSession最佳应用范围在方法体内,在方法体内定义局部变量使用sqlSession。

关于原始DAO开发方式

  1. dao的实现类中存在重复代码,整个mybatis操作的过程代码模板重复(先创建sqlsession、调用sqlsession的方法、关闭sqlsession)
  2. dao的实现 类中存在硬编码,调用sqlsession方法时将statement的id硬编码。

关于MyBatis的Mapper接口

  1. mybatis提出了mapper接口,相当 于dao 接口。
  2. mapper代理开发时必须将namespace制定为mapper接口的全限定名
  3. mapper接口的命名方式建议:表名Mapper eg: public interface UserMapper { public User getUserById(int id) throws Exception; }

mapper开发规范

要想让mybatis自动创建dao接口实现类的代理对象,必须遵循一些规则:

定义UserMapper接口

    public interface UserMapper {

        //根据id查询
        public User findById(int id) throws Exception;
    }

1、mapper.xml中namespace指定为mapper接口的全限定名 前提是将Mapper.xml添加到核心配置文件中SqlMapConfig.xml 此步骤目的:通过mapper.xml和mapper.java进行关联

    <mapper namespace="com.mybatis.mapper.UserMapper">

制定mapper.xml中的statement的id(findById)

        <select id="findById" parameterType="int" resultType="com.mybatis.po.User">
            select * from user where id=#{id}
        </select>

2、mapper.xml中statement的id就是mapper.java中方法名

    public User findById(int id) throws Exception;

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

    都是int

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

    都是User

mapper接口返回单个对象和集合对象

  1. 不管查询记录是单条还是多条,在 statement中resultType定义一致,都是单条记录映射的pojo类型。
  2. mapper接口方法返回值,如果是返回的单个对象,返回值类型是pojo类型,生成的代理对象内部通过selectOne获取记录,如果返回值类型是集合对象,生成的代理对象内部通过selectList获取记录。

输入参数的问题

  1. 使用mapper代理的方式开发,mapper接口方法输入参数只有一个,可扩展性是否很差?? . 可扩展性没有问题,因为dao层就是通用的, . 可以通过扩展pojo(定义pojo包装类型) . 将不同的参数(可以是pojo也可以简单类型)传入进去。