标签:
这个其实是有好几种问题的,先把网上那种先 生成key,再返回的到实体类中的
使用数据库自定义函数nextval(‘student’) ,生成一个key,并把他设置到传入的实体类中的studentId属性上。在执行完此方法后,把该 key 赋值给 studentId属性
<insert id="createStudent" parameterType="data.model.StudentEntity" keyProperty="studentId">
<selectKey keyProperty="studentId" resultType="String" order="BEFORE">
select nextval(‘student‘)
</selectKey>
INSERT INTO STUDENT_TBL(STUDENT_ID, STUDENT_SEX, STUDENT_PHOTO)
VALUES (#{studentId}, #{studentSex},
#{studentPhoto, javaType=byte[], jdbcType=BLOB, typeHandler=org.apache.ibatis.type.BlobTypeHandler})
</insert>
再是一种 ID 是自增长的
这里参数我传入的是 map
设置 useGeneratedKeys=”true” 自增长
keyProperty=”ID” 这个ID 实际就是指的数据库自增长的那个字段,在insert完成后会默认填充给他,执行完成后 在map里面取到对应的key获取value就可以了
<insert id="insertTaxiOrder" parameterType="map" useGeneratedKeys="true" keyProperty="ID" >
INSERT INTO tb_TaxiOrderInfo ( UserID, DriverID, StartAddress)
VALUES (#{userID}, 0, #{StartAdd}})
</insert>
属性 描述 取值
1.keyProperty selectKey 语句生成结果需要设置的属性。
2.resultType 生成结果类型,MyBatis 允许使用基本的数据类型,包括String 、int, map类型。
3.order
3.1:BEFORE,会先选择主键,然后设置keyProperty,再执行insert语句;
3.2:AFTER,就先运行insert 语句再运行selectKey 语句。
4.statementType MyBatis 支持STATEMENT,PREPARED和CALLABLE 的语句形式, 对应Statement ,PreparedStatement 和CallableStatement 响应
2.1这个我传入的参数是 map形式的,在mapper中的sql语句中可以用 if进行判断 参数值是否为null,才会看是否执行if中的代码块,数字也是可以的
<select id="registerCYUser" parameterType="map" resultType="map">
SELECT WorkStaffID, ISNULL(PWD,‘‘) AS PWD, WorkType
from tb_WorkStaff
WHERE
WorkType = #{WorkType}
<if test="CarNum != null">
AND
CarNum = #{CarNum}
<if test="CarNum == null">
AND
CarNum = #{CarNum}
</if>
</select>
2.2 如果参数传入的是实体类,也可以这样判断
网上的就下面这样拿过来,在if中进行判断
<select id="StudentLis" resultMap="studentResult" parameterType="model.StudentEntity">
SELECT ST.STUDENT_ID, ST.STUDENT_NAME,
FROM STUDENT_TBL ST
WHERE
<if test="studentSex != null and studentSex != ‘‘ ">
AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER}
</if>
<if test="placeEntity != null and placeEntity.placeId != null and placeEntity.placeId != ‘‘ ">
AND ST.PLACE_ID = #{placeEntity.placeId, jdbcType=VARCHAR}
</if>
</select>
2.3 if 和 set 使用组合 更新 update
<update id="updateZSInfo" parameterType="map">
UPDATE tb_OrdinaryUser
<set>
<if test="UserName != null">
UserName = #{UserName},
</if>
<if test="Phone != null">
Phone = #{Phone},
</if>
<if test="Email != null">
Email = #{Email},
</if>
</set>
WHERE userID = #{UserId}
</update>
3.1 trim 替代 where
<select id="if_trim" resultMap="studentEntity">
SELECT ST.STUDENT_ID,
ST.STUDENT_NAME,
FROM STUDENT_TBL ST
<trim prefix="WHERE" prefixOverrides="AND|OR">
<if test="studentName !=null ">
ST.STUDENT_NAME LIKE CONCAT(CONCAT(‘%‘, #{studentName, jdbcType=VARCHAR}),‘%‘)
</if>
<if test="studentSex != null and studentSex != ‘‘ ">
AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER}
</if>
<if test="studentBirthday != null ">
AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE}
</if>
</trim>
</select>
3.2 trim代替 set
<update id="update_trim" parameterType="StudentEntity">
UPDATE STUDENT_TBL
<trim prefix="SET" suffixOverrides=",">
<if test="studentName != null and studentName != ‘‘ ">
STUDENT_TBL.STUDENT_NAME = #{studentName},
</if>
<if test="studentSex != null and studentSex != ‘‘ ">
STUDENT_TBL.STUDENT_SEX = #{studentSex},
</if>
</trim>
WHERE STUDENT_TBL.STUDENT_ID = #{studentId}
</update>
4.1 choose 是集合 when 和 otherwise 使用的
<!-- 6 choose(判断参数) - 按顺序 将判断成功进入第一个进入 when执行的语句 作为where条件
如果when 都没有进入 ,就会进入 otherwise 中执行-->
<select id="choose" resultMap="studentEntity" parameterType="StudentEntity">
SELECT ST.STUDENT_ID,
ST.STUDENT_NAME,
FROM STUDENT_TBL ST
<where>
<choose>
<when test="studentName !=null ">
ST.STUDENT_NAME LIKE CONCAT(CONCAT(‘%‘, #{studentName, jdbcType=VARCHAR}),‘%‘)
</when >
<when test="studentBirthday != null ">
AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE}
</when >
<otherwise>
</otherwise>
</choose>
</where>
</select>
这个比自己在外部for循环执行,效率会快很多。
item :循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details。
具体说明:在list和数组中是其中的对象,在map中是value。
该参数为必选。
collection: 要做foreach的对象,作为入参时,List
<select id="foreach_array" resultMap="bb" parameterType="aa">
SELECT xx._ID,
xx._NAME,
FROM XXXX xx
WHERE xx._ID
IN
<foreach collection="array" item="classId" open="(" separator="," close=")">
#{classId}
</foreach>
</select>
5.2 配合 in 使用 参数传入一个list
<select id="countByUserList" resultType="_int" parameterType="list">
select count(*) from users
<where>
id in
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
#{item.id, jdbcType=NUMERIC}
</foreach>
</where>
</select>
5.3 批量插入
方式1
insert into aa ( depart1, depart2 ) values
<foreach collection="list" item="item" index="index"
separator=",">
( #{item.depart1}, #{item.depart2} )
</foreach>
方式2
insert into table(aa,bb)
<foreach collection="list" item="item" index="index" separator="union all">
select #{item.hkgs,aa=VARCHAR}, #{item.bb,jdbcType=VARCHAR},
} from dual
</foreach>
5.4 批量删除
<delete id="dd" parameterType="list">
DELETE FROM LD_USER WHERE ID in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
5.5 批量修改
<update id="update" parameterType="list">
update table set age = ‘0‘ where no in
<foreach collection="list" item="nos" open="(" separator="," close=")">
#{nos}
</foreach>
</update>
5.6 批量条件查询
<select id="sel" resultType="int">
select count(*) from aa where
<foreach item="item" index="key" collection="map"
open="" separator="AND" close="">
${key} = #{item}</foreach>
</select>
$ {} 是原样输出, #{} 是取值
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/kongbaidepao/article/details/48056449