入门
- MyBatis是一款优秀的持久层(dao)框架,用于简化JDBC的开发
- 使用:
- IDEA创建SpringBoot模块,而后勾选MySQL Driver和MyBatis Framework
- pom.xml引入了
mybatis-spring-boot-starter起步依赖、com.mysql依赖包、org.springframework.boot单元测试依赖
- pojo中,创建实体对象,属性和字段要相对应
- 需要配置数据库的连接信息(properties):驱动类类名、数据库连接url、用户名、密码
@Mapper:在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器进行管理
- java文测试接口件中使用
@Select("select * from user");进行sql查找
- 配置问题:

MyBatis与JDBC对比
- JDBC(Java Database Connectivity),使用java语言操作关系型数据库的一套api

- 本质:sun公司定义的一套操作所有关系型数据库的规范,即接口
- 各个数据库可以去实现这套接口,提供数据库驱动jar包
- 真正执行的代码时驱动jar包中的实现类
数据库连接池
- 是一个容器,负责分配、管理数据库连接
- 它允许应用程序重复使用一个现有的数据库连接,而不是重写建立一个
- 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

- 标准接口:DataSource,功能:获取连接
Connection getConnection() throws SQLException
lombook
- lombook是一个java类库,通过注解的方式自动生成构造器,并自动生成日志变量,简化java开发,可解决实体类定义复杂的问题:


<dependency>
<groupId>org.projectlombook</groupId>
<artifactId>lombook</artifactId>
</denpendency>
- lombook在编译时,会自动生成对应的java代码,还需要安装一个lombook插件(IDEA自带)
预编译SQL
- 性能更高
- 更安全(防止SQL注入),SQL注入是指:通过操作输入的数据来修改实现定义好的SQL语句,以达到执行代码对服务器进行攻击的方法
MyBatis基本操作
删除
@Delete("delete from emp where id = #{id}")
public void delete(Integer);
- 如果mapper接口方法形参只有一个普通类型的参数,
#{...}里面的属性可以随便写
新增

- 如果有多个参数,可以使用实体类将参数封装起来
- 主键返回:需要获取数据库数据的主键,方法如下:

更新

查询

- 数据封装:
- 实体类属性名和数据库表查询返回的字段名不一致,mybatis会自动封装
- 如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装
- 解决方案1:给字段起别名:
original1 New1, original2 New2
- 解决方案2:通过mybatis中的
@Results和@Result注解手动映射封装


- 参数名说明(原因:在springboot1.x版本中,变量的名称并不会在编译后的字节码文件中保留,以
var x的形式保存,#{}无法获取参数):

MybatisXML映射文件配置MySQL
规范
- XML映射文件名称和Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下

- XML映射文件的namespace属性与Mapper接口全限定名一致
- XML映射文件中sql语句的id与Mapper接口中方法名一致,并保持返回类型一致

- IDEA注意事项:如果是package,可以使用
.进行分隔,如果是directory则需要使用/进行分隔
动态SQL
- 即随着用户输入或外部条件的变化而变化的SQL语句,称为动态SQL

<if>:用于判断条件是否成立,使用test属性进行条件判断,如果为true,则拼接SQL
<where>:只会在子元素有内容的情况下插入where子句,并且自动抹去子句开头的and和or
<set>:动态的在行首插入set关键字,并且删掉额外的逗号
<foreach>:循环遍历:

