MyBatis学习笔记3-Mapper代理方式开发DAO 返回主页
关于SqlSession
- sqlSession是一个面向用户(程序员)的接口,程序员调用sqlSession的接口方法进行操作数据库。
- 由于sqlSession是 线程不安全,所以sqlSession最佳应用范围在方法体内,在方法体内定义局部变量使用sqlSession。
关于原始DAO开发方式
- dao的实现类中存在重复代码,整个mybatis操作的过程代码模板重复(先创建sqlsession、调用sqlsession的方法、关闭sqlsession)
- dao的实现 类中存在硬编码,调用sqlsession方法时将statement的id硬编码。
关于MyBatis的Mapper接口
- mybatis提出了mapper接口,相当 于dao 接口。
- mapper代理开发时必须将namespace制定为mapper接口的全限定名
-
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接口返回单个对象和集合对象
- 不管查询记录是单条还是多条,在 statement中resultType定义一致,都是单条记录映射的pojo类型。
- mapper接口方法返回值,如果是返回的单个对象,返回值类型是pojo类型,生成的代理对象内部通过selectOne获取记录,如果返回值类型是集合对象,生成的代理对象内部通过selectList获取记录。
输入参数的问题
- 使用mapper代理的方式开发,mapper接口方法输入参数只有一个,可扩展性是否很差??
. 可扩展性没有问题,因为dao层就是通用的,
. 可以通过扩展pojo(定义pojo包装类型)
. 将不同的参数(可以是pojo也可以简单类型)传入进去。