Mybatis增删改查之Oracle
Mybatis增删改查之Oracle
写在前面的话
Mybatis的话一年没接触过了,这块有几个point需要注意:
- 返回对象resultMap的映射,以及resultMap嵌套(嵌套查询)
- jdbcType的参照,含义,用法
- 新增返回主键
- 批量新增,遇到指定字段重复则更新
没完成的是:批量新增返回主键List
一. 查询
- 普通查询(返回普通的持久层对象,由于数据库字段风格和java不同,所以建立一个map映射)
1 | <resultMap type="com.xxx.domain.RuleCondition" id="RuleConditionResultMapWithoutBondList"> |
- 带有自定义对象的查询(带了一个List,嵌套查询)
1 | <!--collection中的就是查询附带的list的函数 |
二. 新增
- 普通新增
1 | <insert id="addRuleBond" parameterType="com.xxx.domain.RuleBond"> |
- 返回主键(多了一个selectkey)
1 | <!--selectkey中 keyproperty是写java中属性名称 |
- 批量新增
参照网上写了一下,一直报缺失表达式,原来是insert into后面 是不需要 values的;
还有就是关于Oracle返回主键List ,我在网上暂时还没找到能正确执行的例子 ,求大佬告知
1 | <insert id="addRuleBondList" parameterType="java.util.List"> |
- 批量新增,存在则插入
1 | <insert id="generateBaselines" parameterType="java.util.List"> |
三. 修改
(begin,end最好还是加上,之前报错一直找不到错,加上begin,end就好了;end前后都加分号”;”,begin不用加)
- 普通修改
1 | <update id="modifyRuleBond" parameterType="com.xxx.domain.RuleBond"> |
- 批量修改(begin,end加在 foreach的open和close处,记得加上分号)
1 | <update id="modifyRuleCondition" parameterType="java.util.List"> |
四. 删除
- 普通删除
1 | <delete id="deleteRuleBond" parameterType="com.xxx.domain.RuleBond"> |
批量删除
1)批量执行语句
1
2
3
4
5
6<delete id="batchDeleteRuleBond" parameterType="java.util.List">
<foreach collection="ruleBonds" open="begin" close=";end;" item="item" separator=";">
DELETE FROM RULES_BOND
WHERE RB_ID = #{item.ruleBondId} and TO_TIMESTAMP(TO_CHAR(LAST_UPDATED_DATE, 'yyyy-MM-dd hh24:mi:ss'), 'yyyy-MM-dd hh24:mi:ss') = #{item.lastUpdateTime,jdbcType=TIMESTAMP}
</foreach>
</delete> 2)综合成一条语句执行
1
2
3
4
5
6
7
8
9
10
11<delete id="batchDeleteRuleBond" parameterType="java.util.List">
DELETE FROM RULES_BOND
WHERE RB_ID IN (
SELECT A.RB_ID FROM (
<foreach collection="ruleBonds" item="item" separator="UNION All">
SELECT * FROM RULES_BOND
WHERE RB_ID = #{item.ruleBondId} AND TO_TIMESTAMP(TO_CHAR(LAST_UPDATED_DATE, 'yyyy-MM-dd hh24:mi:ss'), 'yyyy-MM-dd hh24:mi:ss') = #{item.lastUpdateTime,jdbcType=TIMESTAMP}
</foreach>
)A
)
</delete>