Mybatis

记录一下在实习中使用mybatis所用到的一些功能和应该注意的一些小事项(踩过的坑)

循环里不要写操作数据库的方法,因为这样你循环多少次,就会访问多少次数据库,如果库中数据量庞大容易造成服务崩坏。所以如果要操作多条数据尽量使用批量操作

注意事项

  • 不要手写sql
  • 书写SQL DML语句需要注意的地方
  • 字段和表名看好不要写错了
  • 字段的数据类型和你要写入的数据类型要一致
  • 不要超过字段数据类型的范围
  • 不要违反数据库字段的约束,比如:非空,值唯一,有默认值
  • 在可以操作数据库的地方,执行一遍后,确认无误后复制粘贴过来
  • XML文件里的SQL语句就不要写分号了,批量更新语句有分号的时候就报错了。


批量插入

Mybatis的预Sql:Preparing: insert into student(student_id, name, age, gender, major, enrollment_year) values (?,?,?,?,?,?) , (?,?,?,?,?,?)

所以foreach就要写在values的后面,而且只需要一个separator=","来声名是用逗号进行隔开的
<foreach collection="list" item="el" separator=",">  
批量插入,collection不是要与传来的参数保持一致,是参数的类型
item是当前集合的迭代对象,insert的value每个字段值都要写成el.字段

批量插入示例

<!--    批量插入-->
    <insert id="bulkInsertStudent">
        insert into student(student_id, name, age, gender, major, enrollment_year)
        values
        <foreach collection="list" item="item" separator=",">
        (#{item.studentId},#{item.name},#{item.age},#{item.gender},#{item.major},#{item.enrollmentYear})
        </foreach>
    </insert>

批量更新


 <foreach collection="list" item="eC" separator=";">
批量更新
批量更新,collection不是要与传来的参数保持一致,是参数的类型
separator是分号,用来多个更新sql语句的隔离

只有中间是数据库字段的名称,其余需要迭代对象.字段名,

逗号只有最后一行不加,其余行要加

Mybatis的预SQL(实际就是多条语句中间以分号进行分割,一次性执行多条语句)

update student SET name=?, age=?, enrollment_year=? where student_id = ? ;

update student SET name=?, age=?, enrollment_year=? where student_id = ?

<!--    批量更新加动态更新-->
    <!--    必要情况下检验String类型的字段是不是空字符串-->
    <update id="bulkUpdateStudent">
        <foreach collection="list" item="item" separator=";">
            update student
            <set>
                <if test="item.name !=null">name=#{item.name},</if>
                <if test="item.age !=null">age=#{item.age},</if>
                <if test="item.gender !=null">gender=#{item.gender},</if>
                <if test="item.major !=null">major=#{item.major},</if>
                <if test="item.enrollmentYear !=null">enrollment_year=#{item.enrollmentYear}</if>
            </set>
            where student_id = #{item.studentId}
        </foreach>
    </update>

批量查询

Mybatis的预SQL语句   postman参数:[2,3,4,5]

Preparing: select * from student where student_id in ( ? , ? , ? , ? )

查询示例

<!--    foreach进行批量查询-->
    <select id="selectByList" resultType="cn.hechongyang.entry.pojo.Student">
        select * from student where student_id in
        <foreach collection="list" item="item" separator="," open="(" close=")">
            #{item}
        </foreach>
    </select>

 可以对查询的多个字段在Mapper就进行起别名,方便返回到service直接进行操作

xml文件里的DML方法可选参数

parameterType  参数类型     xml文件里parameterType,是集合里单个数据的类型
resultType   返回值类型      xml文件里resultType,是集合里单个数据的类型


如果parameterType是Map的话,那么collection就是map里的导入集合的key
如果parameterType是list的话,那么collection就是这个集合的类型就是collection=list

疑问

参数类型不写,为啥也不会报错

接口传来的数据字段,你要使用实体类来接收的话实体类的属性字段要与传来的保持一致

或者你可以使用注解来起别名,标明是和接口传来的数据。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值