《二》mybatis写法
**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>
- id :在这个模式下唯一的标识符,可被其它语句引用
- parameterType:传给此语句的参数的完整类名或别名
- resultType:语句返回值类型的整类名或别名。注意,如果是集合,那么这里填写的是集合的项的整类名或别名,而不是集合本身的类名。(resultType 与resultMap 不能并用)
- resultMap:引用的外部resultMap 名。结果集映射是MyBatis 中最强大的特性。许多复杂的映射都可以轻松解决。(resultType 与resultMap 不能并用)
- 其他:flushCache,useCache,timeout,fetchSize,statementType,resultSetTypes
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>
- useGeneratedKeys 生成主键策略
- keyProperty :标识一个将要被MyBatis设置进getGeneratedKeys的key 所返回的值,或者为insert 语句使用一个selectKey子元素。
支持批量插入
用到了动态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带来的各种麻烦。
-
if 条件 :多条件组合
<if test="">sql语句 </if>
<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>
-
choose(when, otherwise) :类似于 switch 吧,满足其一就可以啦
<choose> <when>语句</when> <when>语句</when> …… <otherwise>语句</otherwise> </choose>
-
where trim set
为了避免if动态条件不成立
条件写在<where> </where> 里面 或者 where条件加上1=1的条件
<trim prefix="WHERE" prefixOverrides="AND |OR ">
...
</trim>
<set></set>
<trim prefix="SET" suffixOverrides=",">
...
</trim>
- foreach
必要操作是迭代一个集合, 通常是构建在IN条件中的。
指定的是list,有()和分隔符
<foreach item="productIdList" index="index" collection="list" open="(" separetor="," close=")">
#{productIdList}
</foreach>
- bind
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语法