
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,这会是一个好的方法吗。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)