《二》mybatis写法

2016-11-21  本文已影响94人  进击的小鹿

**1.select ** :主要看前面几个常用参数即可

<select id="getUser" parameterType="String" resultMap="userResultMap">  
    SELECT UT.ID,  
           UT.NAME,  
           UT.SEX,  
           UT.AGE  
      FROM USER UT  
      WHERE UT.ID = #{UID}  
</select>  

2.update

基本的语法 与 select类似。
支持批量更新--用到了动态sql :foreach

3.insert

<insert id="insertUser" parameterType="UserEntity">  
    INSERT INTO USER (ID,  
                      NAME,  
                      SEX,  
                      AGE)  
          VALUES   (#{UID},  
                     #{UName},  
                     #{USex},  
                     #{UAGE})  
</insert>  

支持批量插入
用到了动态sql :foreach

4.delete

省略
可以批量删除。

5.sql
Sql元素用来定义一个可以复用的SQL 语句段,供其它语句调用。

<!-- 复用sql语句  查询student表所有字段 -->  
<sql id="selectUserAll">  
    SSELECT UT.ID,  
           UT.NAME,  
           UT.SEX,  
           UT.AGE  
      FROM USER UT  
</sql>  

复用:

<select id="getUser" parameterType="String" resultMap="userResultMap">  
    <include refid="selectUserAll"/>  
        WHERE UT.ID = #{UID}   
</select>  

6.参数
MyBatis可以使用Java的基本数据类型和Java的复杂数据类型。如:基本数据类型,String,int,date等。

使用基本数据类型,只能提供一个参数,所以需要使用Java实体类,或Map类型做参数类型。通过#{}可以直接得到其属性。

**传入多参数 **

public List<StudentEntity> getStudentListWhereParam(@Param(value = "name") String name, @Param(value = "sex") String sex, @Param(value = "birthday") Date birthdar, @Param(value = "classEntity") ClassEntity classEntity);  

默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义。 #{}比${}安全。

别名

<typeAlias type="com.someapp.model.User" alias="User"/> 
<!-- In SQL Mapping XML file --> 
<select id="selectUsers" parameterType="int" resultType="User">
  select id, username, hashedPassword from some_table 
  where id = #{id}
</select>

7.动态的sql

Mybatis强大特性之一就是它的动态sql,免除了拼接sql带来的各种麻烦。

<update id="updateCategory" parameterType="Category">
    update CATEGORY t SET
    <if test="categoryName!=null">
            t.CATEGORY_NAME = #{categoryName, jdbcType=VARCHAR},
    </if>
    <if test="updateUser!=null">
            t.UPDATE_USER = #{updateUser, jdbcType=VARCHAR},
    </if>
    t.UPDATE_TIME = currentTimeStamp
    WHERE t.CATEGORY_ID = #{categoryId, jdbcType=NUMERIC}
</update>

为了避免if动态条件不成立

条件写在<where> </where> 里面 或者 where条件加上1=1的条件

<trim prefix="WHERE" prefixOverrides="AND |OR ">
      ... 
</trim>

<set></set>

<trim prefix="SET" suffixOverrides=",">
      ...
</trim>

必要操作是迭代一个集合, 通常是构建在IN条件中的。

指定的是list,有()和分隔符

<foreach item="productIdList" index="index" collection="list" open="(" separetor="," close=")">
    #{productIdList}
</foreach>

bind元素允许你在自定义变量(不用符合OGNL规范),并且应用到上下文中

<select id="selectBlogsLike" resultType="Blog">
    <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
    SELECT * FROM BLOG
    WHERE title LIKE #{pattern}
</select>

参考:

MyBatis常用SQL语句整理笔记
mybatis——select、insert、update、delete
Mybatis 3.1中 Mapper XML 文件 的学习详解
MyBatis动态SQL语法

上一篇下一篇

猜你喜欢

热点阅读