欢迎访问:我的个人网站
Mapper接口开发的形式
Mapper接口开发方法只需要编写针对一个某个实体类操作的dao层接口,然后Mybatis根据接口定义方法的规则创建动态代理对象,代理对象就相当于对一个接口的实现类。
本文使用一个名为UserDao的接口,简述接口开发的过程
###1.定义接口UserDao
针对需求在接口里面定义方法,后续在映射文件里面按照所设定的规则进行配置,UserDao里面的方法如下:
public interface UserDao {
public User selectUserById(int id);
public User selectUserByName(String name);
public void insertUser(User user);
public void deleteUser(int id);
public void updateUser(User user);
}
###2.配置UserDao的接口映射文件
<!--命名空间等于所映射接口的全路径地址,这里是映射UserDdao接口-->
<mapper namespace="dao.UserDao">
<!--
下面使用的一些标签定义了所对应接口中具体方法的实现。需要注意的有以下几点:
1.接口里面的每个方法在接口映射文件这里都有唯一一个标签与之对应,接口方法名等于标签的id属性值
2.resultType 对应方法的 返回值类型, 无论返回的结果是单个User对象还是一个包含User对象的集合,指定的resultType类型是一样的。不过是在接口对应的方法返回值不同
3.parameterType 对应方法的 形参类型
使用不同的标签将调用SqlSession对象的不同方法来构建具体的接口的实现。
select:将在实现的方法中调用SqlSession的selectOne()/selectList()方法(根据方法返回值类型判断)
insert:将在实现的方法中调用SqlSession的insert()方法
delete:将在实现的方法中调用SqlSession的delete()方法
update:将在实现的方法中调用SqlSession的update()方法
与之前根据映射类型主动调用不同的sqlSession执行方法的过程是相同的:
User user1 = sqlSession.selectOne("User.selectUserById", 1);
不过现在因为是使用代理映射,需要使用不同的标签来指示Mybatis调用哪些方法
下面的各个标签就是针对上面UserDao接口的方法进行映射。
-->
<select id="selectUserById" resultType="domain.User" parameterType="java.lang.Integer">
select * from tb_user where id = ${value}
</select>
<select id="selectUserByName" resultType="domain.User" parameterType = "java.lang.String">
select * from tb_user where name like '%${value}%'
</select>
<insert id="insertUser" parameterType = "domain.User">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into tb_User values (#{id}, #{name});
</insert>
<delete id="deleteUser" parameterType = "java.lang.Integer">
delete from tb_User where id =#{id};
</delete>
<update id="updateUser" parameterType = "domain.User">
update tb_user set name = #{name} where id = #{id};
</update>
</mapper>
在编写完成之后,还需要引入到Mybatis的配置文件里面,这样的话。就完成了对UserDao接口的mapper代理,后续的使用如下:
###3.使用所映射的接口
@Test
public void test2() {
//简单封装了获取SqlSession的流程
SqlSession sqlSession = MybatisUtils.getSqlSession();
/*
使用SqlSession的getMappper( )来获取所映射接口的代理对象(可以理解为实现类)
需要传递一个接口的class对象。然后就会将该接口的代理对象返回,后续就可以直接调用其中的
方法进行操作
*/
UserDao userDaoImpl = sqlSession.getMapper(UserDao.class);
User user = userDaoImpl.selectUserById(2);
sqlSession.close();
System.out.println(user.toString());
}