转载:http://blog.csdn.net/ppby2002/article/details/20611737

<?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.lee.UserMapper">

<!--返回单一对象-->
  <select id="selectName" resultType="com.lee.User">
    <![CDATA[ 
      select user_name userName from user_table where user_id = #{userId}     
    ]]>
  </select>

<!--返回结果格式 Map<字段名称,字段值>-->
  <select id="selectByName" resultType="hashMap" parameterType="string">
      <![CDATA[
          SELECT * from user_table where user_name=#{userName}
     ]]>      
  </select>
  
  <!--调用存储过程-->
  <select id="selectUserFromStoreProcedure" statementType="CALLABLE">
    <![CDATA[
       {call my_pack.my_proc(
           #{userId,mode=IN,jdbcType=VARCHAR,javaType=string},
           #{userName,mode=OUT,jdbcType=FLOAT,javaType=string})}
       ]]>
  </select>

<!--返回List<User>-->
  <select id="selectUsers" resultType="com.lee.User">   
        <![CDATA[ 
      select user_id userId, user_name userName from user_table
     ]]>
  </select>
  
  <!--重用sql-->
  <sql id="subQuery">   
      <![CDATA[  
         WITH MY_SUB_QUERY as (
        select 'lee' as user_name, '1' as user_id from dual 
        union select 'lee1' ,'2' from dual
      )
    ]]>
  </sql>
  
  <!--动态sql-->
  <sql id="selectOther">
    <include refid="subQuery" />        
        <![CDATA[ 
        SELECT t.other_id otherId, t.other_name otherName, t.other_flag otherFlag FROM OtherTable t
            INNER JOIN MY_SUB_QUERY mapper ON mapper.user_id = t.user_id 
     ]]>
    <if test="filterFlag==true">  
            <![CDATA[
              and t.other_flag = 'Y'
            ]]>
    </if>
    <!--
    另一个if段
    <if test="flag1==true">  
      ...
    </if>
    -->
<!--
使用choose语句,flag1是从mapper方法中传递的参数,如 @Param("flag1") String flag1
    <choose>
      <when test="flag1 == 'Y'">
        t1.flag1 AS flag
        FROM table1 t1
      </when>
      <otherwise>
        t2.flag2 AS flag
        FROM table2 t2
      </otherwise>
    </choose>  
  -->
  </sql>
  
  <!--返回数字-->
  <select id="selectCount" resultType="java.lang.Long">       
        <![CDATA[   
          SELECT count(*) FROM user_table
        ]]>
  </select>
  
  <!--Map参数, 格式Map<参数名称,参数值>-->
  <select id="selectUser"  parameterType="java.util.HashMap" resultType="com.lee.User">
    <![CDATA[     
            SELECT user_id userId, user_name userName from user_table
          where user_id=#{userId} and user_name = #{userName}
        ]]>
  </select>
</mapper>

--------------------------------------------------这个分割线的作用是要显示下边的Java对象例子--------------------------------------------------
public class User {
  private int userId;
  private String userName;
  public String getUserId() {return userId}
  public void setUserId(int userId) {this.userId=userId}
  public String getUserName() {return userName}
  public void setUserName(String userName) {this.userName=userName}
}
--------------------------------------------------这个分割线的作用是要显示下边的Mapper对象例子--------------------------------------------------
@Repository
public interface UserMapper {  
  public User selectName(@Param("userId") String userId);
  public List<Map<String,Object>> selectByName(@Param("userName")String userName);
  <!--Map<字段名称,字段值>-->
  public void selectUserFromStoreProcedure(Map<String,Object> map);
  public List<User> selectUsers();
  public OtherUser selectOther();
  public int selectCount();
  public User selectUser(Map<String,Object> map);
}
--------------------------------------------------这个分割线的作用是要显示另一些配置例子--------------------------------------------------
<!--用映射配置查询sql-->
<resultMap id="UserMap" type="com.lee.User">
  <result column="user_id" property="userId"/>
  <result column="user_name" property="userName"/>
</resultMap>
<select id="selectName" resultMap="UserMap">
  <![CDATA[ 
    select user_name from user_table where user_id = #{userId}     
  ]]>
</select>

<!--重用映射配置并连接到其它结果集查询-->
<resultMap id="OtherUserMap" type="com.lee.OtherUser" extends="UserMap">
    <!--多个查询条件用逗号隔开,如userId=user_id,userName=user_name-->
    <collection property="ownedItems" select="selectItems" column="userId=user_id"/> 
</resultMap>
<select id="selectItems" resultType="com.lee.UserItem">   
  SELECT * FROM user_item_table WHERE user_id = #{userId}
</select>

public class OtherUser extends User {
  private List<UserItem> ownedItems;
  public List<UserItem> getOwnedItems() {return ownedItems}
  public void setOwnedItems(List<UserItem> userId) {this.ownedItems=ownedItems}
}
--------------------------------------------------这个分割线的作用是要显示另一个重用子查询配置例子--------------------------------------------------
<mapper namespace="mapper.namespace">
  <sql id="selectTable1">
    <![CDATA[       
      select f1, f2, f3 from table1 where 1=1
    ]]> 
  </sql>
  <select id="getStandardAgents" resultMap="StandardAgent">   
     <include refid="mapper.namespace.selectTable1"/>
     <![CDATA[             
      and f1 = 'abc'
     ]]>      
  </select>
</mapper>
--------------------------------------------------这个分割线的作用是要显示insert/update/delete配置例子--------------------------------------------------
<!--从Oracle序列中产生user_id, jdbcType=VARCHAR用于插入空值-->
<insert id="insertUser" parameterType="com.lee.User">
  <selectKey keyProperty="user_id" resultType="string" order="BEFORE">
    select db_seq.nextval as user_id from dual
  </selectKey>
  INSERT INTO 
    user_table(
      user_id,
      user_name,
    ) VALUES(
      #{user_id},
      #{user_name,jdbcType=VARCHAR}
    )
</insert>

<update id="updateUser" parameterType="com.lee.User">
  UPDATE user_table
    SET user_name = #{userName,jdbcType=VARCHAR},
  WHERE
    user_id = #{userId}
</update>

<delete id="deleteUser" parameterType="com.lee.User">
  DELETE user_table WHERE user_id = #{userId} 
</delete>

MyBatis Mapper 文件例子的更多相关文章

  1. MyBatis mapper文件中的变量引用方式#{}与${}的差别

    MyBatis mapper文件中的变量引用方式#{}与${}的差别 #{},和 ${}传参的区别如下:使用#传入参数是,sql语句解析是会加上"",当成字符串来解析,这样相比于$ ...

  2. [DB][mybatis]MyBatis mapper文件引用变量#{}与${}差异

    MyBatis mapper文件引用变量#{}与${}差异 默认,使用#{}语法,MyBatis会产生PreparedStatement中.而且安全的设置PreparedStatement參数,这个过 ...

  3. intellij idea 插件开发--快速定位到mybatis mapper文件中的sql

    intellij idea 提供了openApi,通过openApi我们可以自己开发插件,提高工作效率.这边直接贴个链接,可以搭个入门的demo:http://www.jianshu.com/p/24 ...

  4. mybatis mapper文件sql语句传入hashmap参数

    1.怎样在mybatis mapper文件sql语句传入hashmap参数? 答:直接这样写map就可以 <select id="selectTeacher" paramet ...

  5. ][mybatis]MyBatis mapper文件中的变量引用方式#{}与${}的差别

    转自https://blog.csdn.net/szwangdf/article/details/26714603 MyBatis mapper文件中的变量引用方式#{}与${}的差别 默认情况下,使 ...

  6. MyBatis mapper文件中使用常量

    MyBatis mapper文件中使用常量 Java 开发中会经常写一些静态常量和静态方法,但是我们在写sql语句的时候会经常用到判断是否等于 //静态类 public class CommonCod ...

  7. Mybatis mapper文件占位符设置默认值

    如果要设置占位符默认值的话:需要进行 设置 org.apache.ibatis.parsing.PropertyParser.enable-default-value 属性为true启用占位符默认值处 ...

  8. 自己挖的坑自己填--Mybatis mapper文件if标签中number类型及String类型的坑

    1.现象描述 (1)使用 Mybatis 在进行数据更新时,大部分时候update语句都需要通过动态SQL进行拼接.在其中,if标签中经常会有 xxx !='' 这种判断,若 number 类型的字段 ...

  9. Mybatis mapper文件中的转义方法

    在mybatis中的sql文件中对于大于等于或小于等于是不能直接写?=或者<=的,需要进行转义,目前有两种方式: 1.通过符号转义: 转义字符       <     <   小于号 ...

随机推荐

  1. 使用JavaScript实现弹出层效果

    声明 阅读本文需要有一定的HTML.CSS和JavaScript基础 设计 实现弹出层效果的思路非常简单:将待显示的内容先隐藏,在触发某种条件后(如点击按钮),将原本隐藏的内容显示出来. 实现 < ...

  2. hi,mongo!(1)

    用了很多年的关系型数据库,想换一种思路,学习一下最近比较火的mongo数据库. 一.下载.安装mongo 下载地址:http://www.mongodb.org/downloads(官网) 官网的mo ...

  3. LLVM language 参考手册(译)(2)

    调用约定(Calling Conventions) LLVM functions, calls and invokes 可以带有一个可选的调用约定来指明调用方式.每一对 caller/callee(调 ...

  4. 第27章 项目8:使用XML-RPC进行文件共享

    1.问题 创建一个简单的P2P文件共享程序. P2P文件共享程序是在不同计算机上的程序交换文件.P2P交互内,任何节点(peer)都可以是链接到其他节点.在这样一个由节点组成的虚拟网络中,是没有中央节 ...

  5. openerp学习笔记 调用工作流

    获取工作流服务:wf_service = netsvc.LocalService("workflow")删除对象对应记录的工作流:wf_service.trg_delete(uid ...

  6. 解决ASP.NET使用IIS架设网站时“服务器应用程序不可用”的方法

    服务器应用程序不可用您试图在此 Web 服务器上访问的 Web 应用程序当前不可用.请点击 Web 浏览器中的“刷新”按钮重试您的请求. 管理员注意事项: 详述此特定请求失败原因的错误消息可在 Web ...

  7. spring多数据源配置

    项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此.多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源.例如在一个spring和hibernate的框架的 ...

  8. netlink---Linux下基于socket的内核和上层通信机制 (转)

    需要在linux网卡 驱动中加入一个自己的驱动,实现在内核态完成一些报文处理(这个过程可以实现一种零COPY的网络报文截获),对于复杂报文COPY下必要的数据交给用户 态来完成(因为过于复杂的报文消耗 ...

  9. 【quartz】 入门-配置文件

    quartz 启动 NameValueCollection props = (NameValueCollection)ConfigurationManager.GetSection("qua ...

  10. centos 6.4 apache开启gzip方法

    系统概况,主机CentOS6.4  Apache2.4 php5.3.6 mysql5.5 开始:首先得确认apache是否已经加载了mod_deflate模块 1.httpd -M 在结果中查看是否 ...