mybatis中的动态代理应用(mapper对象)
-----------------UserMapper的配置信息---------------------
<?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"> <mapper namespace="com.tabchanj.mybatis.domain.UserMapper"> <resultMap type="com.tabchanj.mybatis.domain.User" id="User"/> <select id="get" parameterType="Long" resultMap="User"> select * from t_user where id = #{id} </select> <select id="list" resultMap="User"> select * from t_user </select> </mapper>
1.将mapper配置文件中的namespace路径作为一个接口的全限定名,即创建一个接口,其全限定名为namespace的名称.
2.该接口的方法名与mapper文件中的sql语句的id名相同,返回值与sql语句的resultType相同,参数类型与paramterType相同,
---------UserMapper接口------------
package com.tabchanj.mybatis.domain; import java.util.List; public interface UserMapper { User get(Long id); List<User> list(); }
3.使用时,通过 sqlsession对象.getMapper(接口.class)获取到该接口的代理实现类,,可以直接使用该类进行crud,该类可看作是一个Dao.
@Test public void testName1() throws Exception { //通过sqlsession获得代理对象(Mapper) UserMapper mapper = MyBatisUtil.openSession().getMapper(UserMapper.class); //mapper调用接口中方法,相当于执行了mapper映射文件中的id为get的sql语句 User u = mapper.get(1L); System.out.println(u + "----------"); //mapper调用接口中方法,相当于执行了mapper映射文件中的id为list的sql语句 List<User> list = mapper.list(); for (User user : list) { System.err.println(user + "........"); } }
结果: