删除
更新
动态更新
查询
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中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式