Mybatis基础操作

Mybatis基础操作

增删改查

1. 预编译sql

优势:
性能更高
预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条insert语句时,SQL语句一样,不会再次编译。 只是输入的参数不同。
防止SQL注入
将敏感字进行转义,安全

参数占位符

在Mybatis中提供的参数占位符有两种:${…}, #{…}

在这里插入图片描述

#{…}:
执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值。
使用时机:参数传递,都使用#{…}
${…}:
拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题。
使用时机:如果对表名、列表进行动态设置时使用。

注意事项:
在项目开发中,建议使用 #{…} 生成预编译SQL,防止SQL注入安全。

2.数据封装

我们看到查询返回的结果中大部分字段是有值的,但是deptId,createTime,updateTime这几个字段是没有值的,而数据库中是有对应的字段值的,这是为什么呢?

原因如下:
● 实体类属性名 和 数据库表查询返回的字段名一致,mybatis会自动封装为实体类。
● 如果实体类属性名 和 数据库表查询返回的字段名不一致,不能自动封装。

在这里插入图片描述

解决方案

1). 起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样。

@Select("select id, username, password, name, gender, image, job, entrydate, dept_id deptId, create_time createTime, update_time updateTime from emp where id = #{id}")
public Emp getById(Integer id);

2). 手动结果映射:通过 @Results及@Result 进行手动结果映射。

@Results({@Result(column = "dept_id", property = "deptId"),
          @Result(column = "create_time", property = "createTime"),
          @Result(column = "update_time", property = "updateTime")})
@Select("select * from emp where id = #{id}")
public Emp getById(Integer id);

3). 开启驼峰命名(推荐):如果字段名与属性名符合驼峰命名规则,mybatis会自动通过驼峰命名规则映射。

在配置文件中写
#开启驼峰命名自动映射,即从经典数据库列名 a_column 映射到经典 Java 属性名 aColumn。
mybatis.configuration.map-underscore-to-camel-case=true

要使用驼峰命名前提是 实体类的属性数据库表中的字段名严格遵守驼峰命名

3. Mybatis动态SQL

1. XML映射文件
使用Mybatis的注解,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。

SQL映射配置文件的是需要符合一定的规范的:

  1. XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下。(同包同名)
  2. XML映射文件的namespace属性为Mapper接口全限定名一致。
  3. XML映射文件中sql语句的id与Mapper 接口中的方法名一致,并保持参数类型和返回值类型一致。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace=" 接口全限定名 ">

  <select id="接口方法名" resultType=" 返回值类型 ">
    <!-- sql语句 -->

  </select>

</mapper>

在这里插入图片描述

< select >标签的resultType属性,指的是查询返回的单条记录所封装的类型。

2. if

用于判断条件是否成立,使用test属性进行条件判断,如果条件为true,则拼接SQL。
在这里插入图片描述

3. foreach

举例:批量删除

在这里插入图片描述

foreach属性介绍:
collection:集合名称
item:集合遍历出来的元素/项
separator:每一次遍历使用的分隔符
open:遍历开始前拼接的片段
close:遍历结束后拼接的片段

在这里插入图片描述

4. sql/include

在xml映射文件中配置的SQL,有时可能会存在很多重复的片段,此时就会存在很多冗余的代码

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值