Mybatis的组成(二)

删除

更新

动态更新

查询

resultType写返回值的类型,也就是说查询的数据赋值给哪个对象,还有一个是resultMap

<if>标签使用场景,例如,where user_name like concat('%',#(userName),'%')

and user_mail = #{userMail},当同时输入userName 和userMail 时,能查出正确的结果,但是只提供一个userName的参数值时,userMail默认是null,这时候会导致user_mail= null,也是查询条件,因而查不出正确的结果,这时候就要用<if>标签了。

<if test="userName != null and userName !='' ">

and  user_name like concat('%',#{userName},'%')

</if>

<if test="userMail != null and userMail!='' ">

and  user_mail =#{userMail}

</if>

<where>标签 使用场景,例如,当if条件里面没有满足的时候,where标签里的内容是空的,这时候sql中不会出现where,也就不会出现空的报错,当if条件满足的时候,where标签里面有值,where元素的内容是以and开头的条件,where会自动去掉开头的and,这样保证where条件正确

 <where>
           <if test="userName !=null and userName !='' ">
              and user_name=#{userName}
           </if>
           <if test="password !=null and password !='' ">
               and password=#{password}
           </if>

       </where>

<set>标签 ,使用场景,set标签 会解决多逗号的问题,但是,当if没有满足的条件是,set元素内没有内容,这个会报错,这个时候,需要类似id=#{id} update_time=#{updateTime}来做兜底,这样就不会报错

     <set>
          <if test="projectName !=null  and projectName !='' ">
              project_name=#{projectName},
          </if>
          <if test="yn !=null ">
              yn=#{yn}
          </if>
      <set>
      where id=#{id}

Mysql是一种动态sql,如果有多个属性查询条件的化,如果where写死了,那么代码冗余会非常高,

所以出现了where标签和if标签,当你确定返回多条记录的时候java返回对象要是list

<where>

1=1

<if test="null != interfaceId"> and interface_id=#{interfaceId}

</if>

<if test="null!= interfaceName">

and interface_name =#{interfaceName} </if>

</where>

有两种方式映射,一种是<sql id= > 另外一种是resultMap

resultMap,返回类型要跟数据库的字段一一对象上。

当数据库的字段和java字段不一致时可以通过resultMap做映射,那么返回的类型是resultMap,而不是resultType

 

like

子对象查询

一般用于多表关联查询,然后有父子关系

关联查询

子查询比关联查询相对比较独立

分页

MySQL对分页的支持主要是通过limit子句

limit关键字的用法是 LIMIT [offset,] rows offset

是相对于首行的偏移量(首行是0),rows是返回条数

  • 每页10条记录,取第一页,返回的是前10条记录 select * from tableA limit 0,10;
  • 每页10条记录,取第二页,返回的是第11条记录,到第20条记录, select * from tableA limit 10,10;

PageHelper

<dependency>

<groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.2</version>

</dependency>

语法:设置开始pageNum =limit 第一个参数(偏移量起点的行数) 

pageSize =limit 第二个参数(一页要多少行)

True = 是否需要返回总行数

安全性问题,只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的

Sql的应用

主要是抽取共性的内容,类似抽取变量一样

批量插入,通过循环的方式,批量插入数据,和java的for循环是一样的语法,只不过换种表达方法

批量更新,入参是一个list对象,在执行sql的时候批量执行

Sql是一个循环,和java循环一样的,换种表达方式而已

批量删除,

事物,在Spring中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NeilNiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值