MyBatis 知识总结

1 MyBatis 

1.1 简介

        持久层框架,用于简化JDBC开发

JavaEE三层架构:表现层、业务层、持久层

表现层:做页面展示

业务层:做逻辑处理

持久层:负责将数据保存到数据库的那一层代码

框架:半成品软件,一套可重用的、通用的、软件基础代码模型

1.2 快速入门

2 解决SQL语句警告提示

3 Mapper代理开发

4 Mybatis 核心配置文件

5 配置文件完成增删改查

5.1 查询

5.1.1 查询所有结果

MyBatis完成操作需要三步:编写接口方法->编写SQL->执行方法

【注】数据库表的字段名称和实体类的属性名称不一样,则不能自动封装数据 

解决一:起别名:对不一样的列名起别名,让别名和实体类的属性名一样

缺点:每次查询都要定义一次别名

5.1.2 查看详情

说明 :

1、参数占位符:

#{}:会将其替换为 ? ,为了防止SQL注入

${}: 进行sql拼接,会存在SQL注入问题

2、参数占位符使用时机:

- 参数传递时:#{}

- 对表名和列名进行动态设置时:${}  // 比较少 

【注】SQL注入问题可以理解为SQL语句不合法

<select id = "selectById" resultMap = "brandResultMap">
    select *
    from ${tbName} where id = #{id}

 3、parameterType:用于设置参数类型,该参数可以省略

4、SQL语句中特殊字符处理:

① 转义字符,如:< :&lt

② <![CDATA[内容]]>

5.1.3 条件查询

【分析】

1、条件表达式

2、如何连接各个条件表达式

5.1.4 动态条件查询 

要求:输入所有条件中的其中一个条件也能够实现查询

【注】SQL语句随着用户的输入或外部条件的变化而变化,我们称为动态SQL

多条件动态查询:

if:

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <if test="title != null">
    AND title like #{title}
  </if>
  <if test="author != null and author.name != null">
    AND author_name like #{author.name}
  </if>
</select>

语法结构:

<if test = “逻辑表达式”>

        条件表达式  // if 用于判断参数是否有值,使用 test 属性进行条件判断
问题:第一个条件不需要逻辑运算符
解决①:where后面加一个恒等式 使得后面的执行语句格式统一,都有and 

解决②:<where> 替代 where 关键字

单条件动态查询 

choose(when、otherwise)

        从多个条件中选择一个使用,针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句

choose ------------->  switch

when --------------->  case

otherwise ---------> default   

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <choose>
    <when test="title != null">
      AND title like #{title}
    </when>
    <when test="author != null and author.name != null">
      AND author_name like #{author.name}
    </when>
    <otherwise>
      AND featured = 1
    </otherwise>
  </choose>
</select>

foreach
        对集合进行遍历(尤其是在构建 IN 条件语句的时候)

<select id="selectPostIn" resultType="domain.blog.Post">
  SELECT *
  FROM POST P
  <where>
    <foreach item="item" index="index" collection="list"
        open="ID in (" separator="," close=")" nullable="true">
          #{item}
    </foreach>
  </where>
</select>

【注】可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象作为集合参数传递给 foreach。当使用可迭代对象或者数组时,index 是当前迭代的序号,item 的值是本次迭代获取到的元素;当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值 。

5.2 添加

【存在问题】无法获取到 id ,原因是这个 id 值没有绑定到对象上

【解决方法】

<insert id = "addOrder"  useGeneratedKeys = "true"  keyProperty = "id">

5.3 修改

5.3.1 修改全部字段

5.3.2 修改动态字段

【注】如上图左下角代码,当修改部分字段如新密码时,只有用户id和密码会进行输入,这个时候执行SQL语句,其他值就会被设置为Null,所以需要进行动态修改字段,即上图右,主要是利用<set></set> 和 <if></if>标签来完成的动态修改

5.4 删除

5.4.1 删除一个

5.4.2 批量删除

将选中的 id 封装到 id 数组,然后遍历数组,根据 id 进行删除

         这里的?占位符个数是随着传入数组的变化而变化的,所以需要动态SQL语言编写,mybatis提供了<foreach>标签完成遍历。

【注】mybatis会将数组参数封装为一个Map集合。默认key的名称叫 array ,value 值=数组。可以使用 @Param 注解改变 map 集合的默认 key 的名称。

6 参数传递

6.1 多个参数

 mybatis会将传入的多个参数封装为Map集合

可以使用 @Param 注解,替换 Map 集合中默认的 arg 键名

@Param("**")注解中的参数应当和SQL语句中的参数占位符的名称保持一致

6.2 单个参数

【注】建议将来都使用 @Param 注解来修改 Map 集合中的默认的键名,并使用修改后的名称来获取值,这样可读性更高!

7 注解完成增删改查

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值