第1关:Springboot 整合 Mybatis
任务描述
本关任务:实现 Springboot 整合 Mybatis。
相关知识
为了完成本关任务,你需要掌握:
- 什么是 Mybatis;
- 为什么用 Mybatis;
- Springboot 整合 Mybatis。
什么是 Mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java 对象)映射成数据库中的记录。
为什么用 Mybatis
Mybatis 有如下优点:
- MyBatis 是免费且开源的。与 JDBC 相比,减少了 50% 以上的代码量。
- MyBatis 是最简单的持久化框架,小巧并且简单易学。
- MyBatis 相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL 写在 XML 中,和程序逻辑代码分离,降低耦合度,便于同一管理和优化,提高了代码的可重用性。
- 提供 XML 标签,支持编写动态 SQL 语句。
- 提供映射标签,支持对象与数据库的 ORM 字段关系映射。
- 支持存储过程。MyBatis 以存储过程的形式封装 SQL,可以将业务逻辑保留在数据库之外,增强应用程序的可移植性、更易于部署和测试。
当然,Mybatis 缺点有如下:
- 编写 SQL 语句工作量较大,对开发人员编写 SQL 语句的功底有一定要求。
- SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
Springboot 整合 Mybatis
- 导入依赖:
<!--web项目依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
- 配置数据源:
spring:
datasource:
#链接地址,指定编码格式,指定时区
url: jdbc:mysql://127.0.0.1:3306/mistore?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useAffectedRows=true
#用户名
username: root
#密码
password: 123123
#驱动包地址
driver-class-name: com.mysql.cj.jdbc.Driver
- 配置 Mybaits:
- 配置包扫描
#配置mybatis
#pojo别名扫描包
mybatis.type-aliases-package=com.lxc.entity
<select id="findUser" parameterType="int" resultType="user">
select * from users where user_id=#{user_id}
</select>
resultType="com.lxc.entity.User"
- 配置 mybatis 映射文件:也就是使用 xml 式 sql 时的 xml 文件地址。
mybatis.mapper-locations=classpath:dao/*.xml
- 配置包扫描
- 注解配置:
- 在 dao 层文件里加入 @Mapper 注解,如下:
@Mapper
public interface UserDao {
User findUser(int user_id);
}
- 也可以不使用 @Mapper 注解,使用 @Repository 注解把 dao 文件注册到容器,同时在 Application.java 项目启动文件里加入 @MapperScan("com.lxc.dao") 注解扫描 dao 层,如下:
@Repository
public interface UserDao {
User findUser(int user_id);
}
@MapperScan("com.lxc.dao")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 在 dao 层文件里加入 @Mapper 注解,如下:
编程要求
在右侧编辑器 application.properties、application-dev.yaml、UserDao.java、Application.java 文件里 Begin-End 处根据提示补充代码。
测试说明
平台会对你编写的代码进行测试:发送请求检验结果集是否正确。
预期输出:
{"product_id":1,"product_name":"Redmi K30","category_id":1,"product_title":"120Hz流速屏,全速热爱","product_intro":"120Hz高帧率流速屏/ 索尼6400万前后六摄 / 6.67'小孔径全面屏 / 最高可选8GB+256GB大存储 / 高通骁龙730G处理器 / 3D四曲面玻璃机身 / 4500mAh+27W快充 / 多功能NFC","product_picture":"public/imgs/phone/Redmi-k30.png","product_price":2000.00,"product_selling_price":1599.00,"product_num":10,"product_sales":0,"status":1}
开始你的任务吧,祝你成功!
application.properties
#指定生效的配置文件
spring.profiles.active=dev
##################Begin##################
#配置mybatis
#pojo别名扫描包
mybatis.type-aliases-package=com.lxc.entity
#加载mybatis映射文件
mybatis.mapper-locations=classpath:dao/*.xml
##################End##################
application-dev.yaml
#####################配置数据源#####################
#####################Begin#####################
spring:
datasource:
#链接地址,指定编码格式,指定时区
url: jdbc:mysql://127.0.0.1:3306/mistore?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useAffectedRows=true
#用户名
username: root
#密码
password: 123123
#驱动包地址
driver-class-name: com.mysql.cj.jdbc.Driver
#####################End#####################
UserDao.java
package com.lxc.dao;
import com.lxc.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
//补充注解
/*******************Begin*******************/
@Repository
/*******************End*******************/
public interface UserDao {
User findUser(int user_id);
}
Application.java
package com.lxc;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//补充注解
/************************Begin************************/
@MapperScan("com.lxc.dao")
/************************End************************/
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
加油哦,同学们!