目录
1、 之前的JDBC的使用缺点?
2、 Mybatis的介绍
3 、xml方式整合Mybatis[重点]
3.1 环境
3.2 编写接口和映射文件
3.3 yml文件 配置文件【重要】
3.4 扫描mapper
3.5 测试
1、 之前的JDBC的使用缺点?
-
大量的代码重复
-
手动加载驱动,创建连接(Connection),关流
-
封装数据麻烦(ORM) 将数据库中表数据 赋值给实体类对象
-
效率不高(没有缓存)
2、 Mybatis的介绍
官网: mybatis – MyBatis 3 | Introduction
MyBatis本是apache的一个开源项目
iBatis
,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis
。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层(Dao)框架。用于操作数据库。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集
。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。且有缓存机制,可以提高查询效率。
Mybatis是一个
半ORM框架
,可以消除JDBC的代码和步骤,让开发者只关注SQL
本身。
ORM是对象关系映射,是指数据库表和java实体类一一对应.
半ORM框架,还是需要写SQL,由框架帮你完成映射
完全ORM框架,连SQL都不需要写,只需要遵循ORM的要求,就会自动生成SQL完成映射(Hibernate,JPA等)
3 、xml方式整合Mybatis[重点]
xml方式在编写复杂SQL时,更适合
3.1 环境
mybatis和druid的springboot环境下的依赖
<!-- 小辣椒 --> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional> </dependency> <!-- mysql驱动 --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version> </dependency> <!-- druid 德鲁伊 数据库连接池 --> <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version> </dependency> <!-- mybatis --> <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version> </dependency>
安装小辣椒插件:Lombok
准备数据库
create table tb_user(id int primary key auto_increment,username varchar(50),password varchar(50),phone varchar(50),createTime date,money double,sex int )default charset = utf8;
实体类
@Data @AllArgsConstructor @NoArgsConstructor @ToString public class User { private int id;private String username;private String password;private String phone;private Date createTime;private double money;private int sex; }
3.2 编写接口和映射文件
接口就是我们之前的Dao层接口,Mybatis习惯叫做Mapper,所以先创建mapper包,然后再在其中创建接口文件
public interface UserMapper {User findUserById(int id) }
以前是写接口的实现类,现在mybatis的接口实现功能由xml文件来实现了
在resources/下创建mapper文件夹,在其内创建mapper映射文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace名称空间 --> <!-- 用来关联,映射文件(XML)和接口文件,即接口的类路径 --> <mapper namespace="com.qf.mapper.UserMapper"> <!--select标签,用于执行查询语句id: 是接口中的方法名resultType: 返回的结果类型,是接口对应方法的返回值[现在只写User报错,要写完整类路径]==========================代码执行时,调用接口方法findUserById时传入的参数,就会赋值给#{}内的id执行完,查询返回结果集会自动封装到resultType指定的对象中--><select id="findUserById" resultType="com.qf.model.User"><!-- #{id} 就相当于是之前的预处理的 ?,会自动给此处复制 --><!-- 其实就是接口方法的参数列表的值,会传给 #{id} -->select * from tb_user where id = #{id}</select> </mapper>
3.3 yml文件 配置文件【重要】
# 连接数据库的信息 spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://ip:3306/数据库名?serverTimezone=UTCusername: rootpassword: 123456# 数据库连接池type: com.alibaba.druid.pool.DruidDataSource # mybatis配置 mybatis:# 扫描映射文件mapper-locations: classpath:mapper/*.xml# 配置别名扫描的包type-aliases-package: com.qf.modelconfiguration:# 开启驼峰映射配置map-underscore-to-camel-case: true # 打印执行过程的sql信息 logging:level:com.qf.mapper: DEBUG
3.4 扫描mapper
主类扫描mapper
@SpringBootApplication @MapperScan("com.qf.mapper") // 扫描mapper接口,创建代理对象 public class TestSpringbootApplication { public static void main(String[] args) {SpringApplication.run(TestSpringbootApplication.class, args);} }
3.5 测试
@RestController public class TestMybatisController { // todo: 这里省略了service,也可以调用service,由service掉mapper@Autowiredprivate UserMapper userMapper; // http://localhost:8080/find?id=1@GetMapping("/m1")public R testMybatis1(int id) {User user = userMapper.findUserById(id);return R.ok(user);} }