Mybatis

  • 准备
  1. 创建一个新的springboot工程,选择引入对应的起步依赖(mybatis、mysql驱动、lombok)

  1. application.properties中引入数据库连接信息(复制过来即可)

  1. 准备数据库表 emp,及对应的实体类 Emp(实体类属性采用驼峰命名)

新建一个pojo包,在包下面创建Emp

  1. 准备Mapper接口 EmpMapper

定义一个Mapper的包,在包下面建EmpMapper接口

  • 根据主键删除案例
  1. 在接口中写sql语句
  2. 在测试中对其进行测试

  注意:@Mapper 也可以控制反转,所以在测试当中就直接可以依赖注入了

  

三、日志输出

四、预编译SQL

优点:

  1. 性能更高
  2. 防止SQL注入

性能高:

使用#{}是不写死数据,便于传输,他可以在内存中缓存一段时间,如果遇到有相同语法的代码进来就会直接使用,不需要重新编译,这个过程就是预编译SQL语句了

如果直接写死由于参数传入的不同,那么我们每次都需要编译一次,这样会大大影响效率。

预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条insert语句时,SQL语句一样,不会再次编译。 只是输入的参数不同。

防止SQL注入:

SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。密码采用:’or’ ‘1’=1’这种形式

将敏感字进行转义,安全。

五、参数占位符

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

1). #{...}

执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值。

使用时机:参数传递,都使用#{…}

2). ${...}

拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题。

使用时机:如果对表名、列表进行动态设置时使用。

注意事项:

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

  • 新增案例:

(1)在接口中写sql语句

(2)在测试中对其进行测试

  • 新增(主键返回)

含义:在数据添加成功后,需要获取插入数据库数据的主键。如:添加菜品口味

实现:

在mapper接口对应的方法上面写上一个@Options注解

注意:只能用于返回主键,无论定义的什么拿到的数据都是主键对应的数据

  • 更新

九、查询(根据ID查询)

  

而在测试的过程中,我们会发现有几个字段(deptId、createTime、updateTime)是没有封装上的

原因如下:

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

解决方法有三个:

方法一:取别名,在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样。

方法二:手动结果映射:通过 @Results及@Result 进行手动结果映射。

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

  1. 开启驼峰命名自动映射,即从经典数据库列名 a_column 映射到经典 Java 属性名 aColumn。
  2. mybatis.configuration.map-underscore-to-camel-case=true
  3. 要使用驼峰命名前提是 实体类的属性 与 数据库表中的字段名严格遵守驼峰命名。

  

十、查询(根据条件查询)

在员工管理的列表页面中,我们需要根据条件查询员工信息,查询条件包括:姓名、性别、入职时间

  1. 姓名:要支持模糊匹配
  2. 性别:要求精确匹配
  3. 入职时间:要求进行范围查询
  4. 并且最后要求根据修改时间进行倒序排序

方式一:

这种方式使用 $ 进行字符串拼接,这种方式呢,由于是字符串拼接,并不是预编译的形式,所以效率不高、且存在sql注入风险。

方式二、

Concat()是数据库的字符串拼接函数

十一、Mybatis动态SQL

(1)XML映射文件

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

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

  1. XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下。(同包同名)
  2. XML映射文件的namespace属性为Mapper接口全限定名一致。
  3. XML映射文件中sql语句的id与Mapper 接口中的方法名一致,并保持参数类型和返回值类型一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值