Mybatis 常用sql之批量添加和修改

Mybatis 常用sql之批量添加和修改,第1张

Dao层

int updateByList(List list)

Mappe层

批量修改

<update id="updateByList" parameterType="java.util.List">

<foreach collection="list" item="item" index="index" separator="">

update jt_fin_repayment_plan

<set >

erestTotal != null" >

ORG_INTEREST_TOTAL = #{item.orgInterestTotal},

</if>

<if test="item.delFlag != null" >

DEL_FLAG = #{item.delFlag},

</if>

<if test="item.state != null" >

STATE = #{item.state},

</if>

<if test="item.createBy != null" >

CREATE_BY = #{item.createBy},

</if>

<if test="item.createTime != null" >

CREATE_TIME = #{item.createTime},

</if>

<if test="item.updateBy != null" >

UPDATE_BY = #{item.updateBy},

</if>

UPDATE_TIME = #{NOW(),

</set>

where REPAYMENT_ID = #{item.repaymentId}

</foreach>

</update>

----------------------------------------------------------------------------------------------------------

dao层

//批量添加

int addList(List list)

Map层

批量添加

<insert id="addList" parameterType="java.util.List">

insert into jt_fin_adjust_rates_project_history (

ID,ADJUST_RATES_ID,PROJECT_ID,START_WHOLE,

END_WHOLE,START_WITHOUT,END_WITHOUT,PROJECT_DATE,

KEEP,AUDIT_FLAG,STATUS,REMARK,DEL_FLAG,

CREATE_BY,CREATE_TIME,UPDATE_TIME,UPDATE_BY

)

values

<foreach collection="list" separator="," item="item" index="index">

((select UUID()), #{item.adjustRatesId},#{item.projectId},#{item.startWhole},

#{item.endWhole},#{item.startWithout},#{item.endWithout},#{item.projectDate},

#{item.keep},#{item.auditFlag},#{item.status},#{item.remark},#{item.delFlag},

#{item.createBy},sysdate(), #{item.updateTime}, #{item.updateBy})

</foreach>

</insert>

注意:我的id VARCHAR类型 主键 不能递增 在这里我用的是UUID生成的

原本,想写一个批量添加,回显id但是没实现就不写了,有大佬可以补充一下

在对一套系统进行开发前,应该预先做整体的功能需求分析,把需要开发或者修改的地方列一个清单,对照清单修改,这样能够降低功能遗漏的问题。

另外就是做好版本控制,对于修改前与修改后可以有完整的对比,而不用手动将原来的代码复制一份。

从Controller到Mapper如果只是搭建框架,用不了几分钟,一般做过几次的人,会保留一份基础框架模板,需要的时候直接拿过来用就行了,可以说基本不需要花什么时间。

你说的完全开发完,不知道以什么标准来说?如果只是全查,全删,单一添加,单个字段修改的话,全部写完也就四条SQL语句,用不了多少时间,除了使用mapper.xml方式,也可以使用注解的方式写,可以减少xml标签的编写。

如果是还有其它具体要求的功能,所花费的时间因人因需求而异,不同的功能,复杂度不一样,功能个数不一样,不同的能力的人开发,所花费的时间是不一样的,这个需要根据实际情况来评估。

想象一下你在淘宝,在购买东西后会有个订单支付的页面,下单后用户和订单就关联起来了,同时订单有一个唯一的编号叫订单号。用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户

一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户

即 order对user是一对一的,反过来,user对order是一对多的

select * ,o.id oid from orders o,user u where o.uid=u.id

这个查询结果看起来很怪,有很多个id,不着急,后面我们在进行配置文件的配置的时候可以将id忽略。

User和以前一样

测试

或者通过

<association>标签配置user

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户

一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单

select *,o.id oid from user u,orders o where u.id = o.id

打印结果

再来假设一个场景,小明是一个学生,他同时是班干部和学生会的干部,而学生会干部可以有多个学生,这样学生和学生会干部表就构成了多对多的关系

用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用

多对多查询的需求:查询用户同时查询出该用户的所有角色

要实现这种多对多的关系,我们不仅需要role角色表,也需要一个中间表,用户和角色表之间的桥梁——用户id和角色id对应的表。

select u.*,r.*,r.id rid,u.id uid from user u left join user_role ur on u.id=ur.uid inner join role r on ur.rid=r.id

select * from user u,user_role ur,role r where u.id = ur.uid and ur.rid =r.id

User类添加

UserMapper接口添加

配置sqlMapperConfig.xml,给Role增加别名

这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了。

我们先围绕一些基本的CRUD来学习,再学习复杂映射多表 *** 作。

修改MyBatisTest.java,将公共 *** 作抽取出来

删除了之后,我们没有了配置文件了呀,那怎么做呢。

我们之前在sqlMapperConfig.xml里面配置了

删除了之后我们就得加载映射关系,指定接口所在的包

没有问题!说明可以运行。

实现复杂关系映射之前我们可以在映射文件中通过配置<resultMap>来实现,使用注解开发后,我们可以使用

@Results注解,@Result注解,@One注解,@Many注解

组合完成复杂关系的配置

前面我们用配置文件的方式实现了order和user的一对多查询,同样的我们也可以使用注解实现。

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户

一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户

对应的sql语句:

测试

两个都可以正常运行。

我们上面的查询方式是一次查两张表,但是我们也可以通过查order表获取uid,再通过uid去查user表,这种方法怎么实现呢?

不知道你还记不记得,前面我们使用了<association>进行order和user表的一对一查询的封装,前面图中提到了@One属性,就是它的一种替代

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户

一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单

可能这种方式用的比较多

对应的sql语句:

给OrderMapper.java增加一个查询方法

修改UserMapper.java

但是这种方法,其实是查到了所有的user,其中有些有orderList,原因在于这其实是一种按顺序的查询方式,先查了user表再查了order表

select *,o.id oid from user u,orders o where u.id = o.id 是不一样的

再来回顾一下多对多的查询

用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用

多对多查询的需求:查询用户同时查询出该用户的所有角色

对应的sql语句:

这样子,就有个很怪的问题,注解查询每次都返回了全部的user,我不需要这么多的user啊,我只想要和role关联的那几个user,这会是一个好的方法吗。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11679436.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存