李子栗子梨

导航

mybatis实现动态代理

  取消掉Dao接口的实现类,因为DAO接口的实现类,仅仅是通过SQLsession的实现类,定位到映射文件的XML语句,做真正操作的是XML中的语句,对DB进行操作,所以就抛开了DAO接口的实现类,这种操作方式就叫做Mapper的动态代理

  Mapper接口开发要遵循一下几个规范

  1.mapper.xml文件的namespace与mapper定义的接口类路径相同

  2.Mapper定义的方法名与mapper.xml文件中的每一个statement的ID都相同

  3.mapper接口方法的输入参数类型和mapper.xml中每个sql定义的ParamenterTypr的类型相同

  4.mapper接口方法的输出参数类型和mapper.xml中每个sql定义的resultTypr的类型相同

 

遵循了以上的规范,再去写测试类。不需要DAO的实现类,也能实现相应的功能 

USER.XML文件

id就是相应接口实现类的ID ,resuleType 是返回类型

这里说一下resuleType 和resuleMap的区别

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

 

parameterType是相应传入参数的类型

 1 <?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">
 2 <mapper namespace="org.lizi.userdao.UserDao">
 3 
 4   <select id="findAllUser" resultType="User" parameterType="_int">
 5       select * from User
 6           <where>
 7               id = #{arg0}
 8           </where>
 9   </select>
10 </mapper>

多条参数查询可以省略掉parameterType   使用#{arg0},#{arg1}代表相应的参数

也可以将参数封装成一个Map进行查询。

在xml文件中 调用map的Key即可

1 @Test
2     public void findUserByMaptest(){
3         SqlSession session = Tools.getSession();
4         UserDao ud = session.getMapper(UserDao.class);
5         Map<String, Object> map = new HashMap<String, Object>();
6         map.put("id", 2);
7         User u = ud.findUserByMap(map);
8         System.out.println(u);
9     }
1    <select id="findUserByMap" resultType="User">
2       select * from User
3           <where>
4               id = #{id}
5           </where>
6   </select>

 

 

 

下面来说动态SQL标签

  常用的动态SQL标签是 <if> <where> <choose> <foreach> <when> <otherwise>

  


posted on 2017-08-15 20:56  李子栗子梨  阅读(225)  评论(0编辑  收藏  举报