目录
一、准备工作
二、mybatis——新增
三、mybatis——删除
四、mybatis——更新
五、mybatis——查询
六、XML映射文件
一、准备工作
1.准备一个数据库表
2.创建一个新的springboot工程,选择引入对应的起步依赖(Mybatis、mybatis等)
3.application.properties中引入数据库连接信息
4.创建对应的实体类Emp(实体类属性采用驼峰命名)
5.准备Mapper接口EmMapper
在这里我就不过多的描述,在我的上一篇博客我已经详细介绍了。
配置mybatis日志:
#配置mybatis的日志,指定输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
二、mybatis——新增
1.基于注解方式
刷新表,数据插入成功。
在某些特定的条件下,在数据添加成功后,我们是需要的获取数据库的主键。(主键返回)
// 自动将生成的主键值,赋值给emp对象id属性
@Options(keyProperty="id",useGeneratedKeys = true)
获取主键的值:
System.out.println(emp.getId());
三、mybatis——删除
根据记录的唯一标识(主键)进行删除。
1.基于注解方式
注意事项:
如果mapper接口方法的形参只有一个普通类型的参数,#{...}里面的属性名可以随便写,如#{id},#{value}。建议两者保持一致增强可读性。
update后面的数字表示受影响的记录行数,如果你的后面是的1,则代表删除成功,我的是0是因为在此之前我已经把Id为17的记录给删除了。 “Id=?”:?是一个参数占位符,它最终会用Parameters来替代。被我框出来的SQL语句有一个专业的名字叫预编译SQL,在这里我们为什么要用预编译SQL而不是直接进行拼接呢?
预编译SQL有两大优势:
1.性能更高。
执行SQL语句要经历以下流程:
如果进行拼接,不同Id 表示不同的SQL语句,需要执行多次。而预编译采用?进行占位,然后用参数去替代,在数据库中是同一条SQL语句,不用再去重新缓存(缓存中已存在),速度更快性能更优。
2.更安全(防止SQL注入)。
SQL注入是指通过操作输入数据来修改实现定义好的SQL语句,已达到执行代码对服务器进行攻击的方法。('or'1'='1')
参数占位符:#{}(生成预编译SQL,会自动设置参数值),${}(直接进行拼接,存在SQL注入问题)。
四、mybatis——更新
1.基于注解方式
更新成功。
五、mybatis——查询
1.基于注解方式
根据id进行查询
虽然idea没有报错,但是我们仔细看一下控制台的输出会发现,后面三个变量值为null,为什么会出现这样的结果呢?之前有提到过,实体类属性名和数据库表查询返回的字段名一致,myBatis会自动进行封装。但是如果不一致就不能就行自动封装。有一下几种方案可以解决上述问题:
方案一:给字段起别名,让别名和实体类属性保持一致
方案二:通过@results,@result注解手动进行映射
方案三:开启mybatis的驼峰命名的自动映射的开关(前提:字段名和属性名符合驼峰命名的规则,才能自动映射)
经过上述任意操作,我们可以后面三个的属性值已经不再为空,已经成功封装。
根据条件查询(员工姓名支持模糊匹配,性别进行精准查询,入职时间进行范围查询,进行排序)
#{}不能出现在单引号内,再进行预编译的时候?在单引号内,会变成一个普通的?,起不到预编译的作用,在这里我们可以使用${}。虽然可以达到想要的结果,但是${}性能低,会存在SQL注入问题,我们可以使用concat函数(推荐使用)。(and前后有空格不要忘记)
测试代码
参数名的说明:在早期springboot中,多个参数与参数值不能进行对应,需要通过一个@Param注解
恭喜你,你已经成功学习mybatis的基本操作增删改查 (基于注解方式的)。
六、XML映射文件
我们除了可以通过注解配置SQL语句,还可以通过xml进行配置。下面介绍一下xml映射文件:
- xml映射文件的名称与Mapper接口名称一致,并且xml映射文件和Mapper接口要在相同的包下(目录使用/分隔)
- xml映射文件的namespace属性为Mapper接口全限定名一致
- xml映射文件中SQL语句的id与Mapper接口中的方法名保持一致,并保持返回类型一致(resultType 单条记录封装的类型一致)
xml映射文件的约束
<?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">
使用注解配置简单的SQL语句会使代码更加的简洁,但是对于稍微复杂一点的语句,java注解会使本就复杂的SQL语句更加的混乱不堪,因此做一些复杂的操作最好用xml语句。没有统一的标准,永远不要拘泥一种方式,你可以在基于注解和xml语句映射方式自由的进行切换。