zoukankan      html  css  js  c++  java
  • mybatis进阶--mapper输入映射和输出映射

             我们知道,mapper.xml是我们配置操作数据库的sql语句的地方。其中每个sql语句对应着一个方法,每个方法都有自己的输入输出参数类型。那么这些类型都是怎么配置的呢?今天我们来一起学习下。

             输入映射

             首先是输入类型,输入类型分为以下几种:1.基本类型。2.pojo对象类型。3.pojo包装对象。所谓的包装对象,可以理解为,一个对象里面包含着另外一个对象。

             简单类型

              简单输入类型,比较简单。在传入参数的时候,直接将参数类型配置到parameterType中,代码如下:

    1. <select id="findUserById" parameterType="int" resultType="cn.itcast.pojo.User">  
    2.     SELECT * FROM user where id=#{id}  
    3. </select>  

            其中的sql语句内的占位符或者拼接符中的内容可以随意书写,没有实际意义。不过建议最好见名知意。以便于阅读。

             pojo对象

             如果传入的是一个对象的话,那么情况就稍有不同了。除了传入类型需要是对象的类型(可以直接写类的全路径,也可以通过在sqlConfig.xml中配置别名的方式,配置类的别名)。还需要注意的是在sql语句的占位符上也需要将我们的内容对应我们的对象的属性值。代码如下:

    1. <select id="findUserByUserName" parameterType="cn.itcast.pojo.User" resultType="cn.itcast.pojo.User">  
    2.         select * from user where username like'%${username}%'  
    3. </select>  

             这里的username必须对应User类中的属性。也就是说,在User类中必须有username的属性。而且我们在传入参数的时候,需要将user对象的username赋值。用于被mybatis框架解析。

              在sqlConfig.xml中配置别名的方法:

    1. <!-- 自定义别名 -->  
    2. <typeAliases>  
    3.     <!-- 给单个pojo起别名: type:pojo的全路径名称, alias:别名 -->  
    4. lt;!--      <typeAlias type="cn.itcast.pojo.User" alias="user"/> -->  
    5.   
    6.     <!-- 使用包扫描的方式将整个包下面的pojo起别名   
    7.           别名就是类名, 不区分大小写, 建议按照java的命名规则来写  
    8.     -->  
    9.     <package name="cn.itcast.pojo"/>  
    10. </typeAliases>  



             pojo包装对象

             如果传入对象是一个包含有另外一个对象的对象,也就是说传入对象是一个包装对象的时候,我们该怎么办呢?其实也差不多,就是将占位符或者连接符中的值改为对象.属性名具体代码如下:

             首先是pojo对象的代码,我们可以看出,整个user对象都作为了queryVo对象的一个属性值了,其字段名称为user:

    1. package cn.itcast.pojo;  
    2.   
    3. public class QueryVo {  
    4.     private User user;  
    5.   
    6.     public User getUser() {  
    7.         return user;  
    8.     }  
    9.   
    10.     public void setUser(User user) {  
    11.         this.user = user;  
    12.     }  
    13. }  

             然后是我们的映射文件,其中的${user.userneme}中,user和我们的QueryVo类中的user属性名称一致,而username对应的是User类中的username字段:

    1. <select id="findUserByVo" parameterType="cn.itcast.pojo.QueryVo" resultType="cn.itcast.pojo.User">  
    2.         select * from user where username like'%${user.username}%' and sex =#{user.sex}  
    3. </select>  

             输出映射

             输出映射的配置和输入映射基本一致。首先是简单类型,mybatis中只有一种情况可以返回简单类型,那就是我们的sql语句返回值只有一条的时候。可以返回简单类型。

             还有就是我们的pojo类型。我们的mybatis可以将返回的数据,封装成为一个pojo对象,但是,pojo的对象属性必须和我们的返回值的字段名一致。才可以封装进去。如果不一致仍然想封装,那么,就需要指定其对应关系。具体代码及注释如下:

      1. <!-- 这里的userListResultMap对应的是resultMap的唯一标示符 -->  
      2.     <select id="findUserByVo" parameterType="cn.itcast.pojo.QueryVo" resultMap="userListResultMap">  
      3.         select * from user where username like'%${user.username}%' and sex =#{user.sex}  
      4.     </select>  
      5.     <!-- 这里的cn.itcast.pojo.User代表的是User类也就是最终生成对象的类型;userListResultMap是这个resultMap的唯一标示符 -->  
      6.     <resultMap type="cn.itcast.pojo.User" id="userListResultMap">  
      7.         <!-- 这里的id_是从数据库中查出的数据字段名称是主键;而id是我们的User对象中的属性 -->  
      8.         <id column="id_" property="id"/>  
      9.         <!-- 这里的result指的是其他字段 -->  
      10.         <result column="userneme_" property="username"/>  
      11.     </resultMap>  
  • 相关阅读:
    Mac os下安装pycurl
    Mac os 10.9下面配置JAVA_HOME
    同步,异步,阻塞,非阻塞
    Python处理XML
    Apriori算法在购物篮分析中的运用
    Python抓取双色球数据
    为什么这么多Python框架
    Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明
    ubuntu 开机自动挂载分区
    VIM 配置随手记
  • 原文地址:https://www.cnblogs.com/zhangyuhang3/p/6901129.html
Copyright © 2011-2022 走看看