zoukankan      html  css  js  c++  java
  • Mybatis学习第三天——输入输出映射以及动态SQL

    注意:以下传入数据与输出数据类型部分使用别名的方式,别名在SqlMapConfig.xml核心文件中配置

    1.输入映射

    1.1 传递简单数据类型

    1.2 传递pojo中的类类型

    1.3 传递QueryVo包装类

    开发中通过可以使用pojo传递查询条件。查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。

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

    2.输出映射

    2.1 输出简单数据类型

    2.2 输出pojo类

    2.3 输出列表

    与输出类类型一致

    2.4 手动指定查询结果映射(ResultMap)

    一般情况采用ResultType会自动对应pojo类与表,前提表的字段与pojo类的属性一致。当出现不一致的时候,仍需要返回那么需要自定义。

     1     <resultMap type="User" id="find">
     2         <id column="id" property="id"/>
     3         <result column="username" property="username"/>
     4         <result column="sex" property="sex"/>
     5         <result column="address" property="address"/>
     6         <result column="birthday" property="birthday"/>
     7     </resultMap>
     8     <select id="findUser" resultMap="find" >
     9             select * from user
    10     </select>

    这里因为一致所以看不出效果。注意表中id需要用id标签对应

    3.动态SQL

     1     <!-- 根据条件查询User -->
     2     <select id="findUserBySexAndUserName" parameterType="User" resultType="User">
     3         select * from User
     4         where 1=1
     5         <if test="sex != null and sex !=''">
     6             and sex = #{sex}
     7         </if>
     8         <if test="username != null and username != ''">
     9             and username like '%${username}%'
    10         </if>
    11     </select>
    12     
    13     <!-- 根据条件查询User -->
    14     <select id="findUserBySexAndUserNameByWhere" parameterType="User" resultType="User">
    15         select * from User
    16         <where>
    17             <if test="sex != null and sex !=''">
    18                 and sex = #{sex}
    19             </if>
    20             <if test="username != null and username != ''">
    21                 and username like '%${username}%'
    22             </if>
    23         </where>
    24     </select>

    两种标签if和where,if在test中写判断语句,where标签可以代替sql中的,能够将if语句中的and,是在前面的and给自动忽略。

    当传入对个值时则需要foreach标签进行:假定传入的数据为List集合

     1     <!-- 这里采用在包装类中定义list的方式作为传入值
     2         原SQL语句为select * from user where id in(1,2,3)
     3         collection:表示包装类中需要遍历的列表
     4         item:表示每个数据的名字,需要与#{}中对应
     5         separator:表示数据应“,”隔开
     6         open:数据以这个开头
     7         close:数据以这个结尾    
     8      -->
     9     <select id="findUserByIds" parameterType="QueryVo" resultType="User">
    10         select * from user where id in
    11         <foreach collection="ids" item="id" separator="," open="(" close=")">
    12             #{id}
    13         </foreach>
    14     </select>

    其他的比如用数组传值这里就不介绍了。

  • 相关阅读:
    [VC++]利用VS2005进行dump文件调试
    Release和Debug模式下成员变量初始化问题
    JDBC与C++的DB访问性能
    Log4J与LogBack的性能比较
    WinRar命令行参数
    玩弄C++:回调一个类成员函数
    如何将一个模板类A作为模板类B的模板参数
    HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTup
    HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTup
    使用jQuery发送POST,Ajax请求返回JSON格式数据
  • 原文地址:https://www.cnblogs.com/lisd/p/10267103.html
Copyright © 2011-2022 走看看