1、导入依赖
1、需要的依赖
<!--MySQL驱动: 无需版本号,spring-boot父工程已经指定好了--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--druid连接池:与SpringBoot整合的依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency> <!--MyBatis依赖:与SpringBoot整合的依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency>
2、pom文件所有依赖内容
<dependencies> <!--MySQL驱动: 无需版本号,spring-boot父工程已经指定好了--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--druid连接池:与SpringBoot整合的依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency> <!--MyBatis依赖:与SpringBoot整合的依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <!--web项目相关依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--测试相关依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--lombok依赖--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>
2、建表以及测试数据
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (1, '张三', 23); INSERT INTO `user` VALUES (2, '李四', 24); INSERT INTO `user` VALUES (3, '王五', 25); SET FOREIGN_KEY_CHECKS = 1;
3、编写实体类
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private long id; private String name; private long age; }
4、编写Mapper接口
注意:此处接口上可以加@Mapper注解,也可以不加,如果此处没有加@Mapper注解,那需要在启动类上加上@MapperScan(basePackages = "com.shiory.springbootdemo01.mapper(Mapper接口所在包)")注解
补充:SpringBoot整合MyBatis有两种方式:两种方式可以共存
1、xml整合方式:需要在xml文件中写SQL,常用于比较复杂的SQL语句
2、注解整合方式:直接在注解中写SQL,常用于简单SQL语句。增删改查:@Insert、 @Delete、@Update、@Select
注意:
xml整合方式中,传参的情况,@Param注解中的变量名 与 xml文件中的接收的变量名要保持一致
注解整合方式中,传参的情况,@Param注解中的变量名 与 @Insert、 @Delete、@Update、@Select中的接收的变量名要保持一致
import com.shiory.springbootdemo01.entity.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface UserMapper { // xml方式整合 List<User> selectByName(@Param("username") String name); // 注解方式整合 @Select("select * from user where id = #{id}") User selectById(@Param("id") Long id); @Select("select * from user") List<User> selectAll(); }
5、编写映射文件(xml整合需要)
在resources目录下创建mapper文件夹,并在其中创建UserMapper.xml文件
UserMapper.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"> <!--指定namespace--> <mapper namespace="com.shiory.springbootdemo01.mapper.UserMapper"> <select id="selectByName" parameterType="java.lang.String" resultType="User"> select * from user where name = #{username} </select> </mapper>
6、在application.yml中添加配置信息
配置文件内容
server: # 端口 port: 8081 servlet: # 项目路径 context-path: /demo # MyBatis配置 mybatis: # 文件扫描映射文件 mapper-locations: classpath:mapper/*.xml # 配置别名扫描的包 type-aliases-package: com.shiory.springbootdemo01.entity # 该包下的所有实体在xml文件中就可以直接使用类名了 # 开启驼峰映射 configuration: map-underscore-to-camel-case: true # 数据库连接信息配置 spring: datasource: # 驱动,使用带cj的 driver-class-name: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=UTC # UTC:东八区 url: jdbc:mysql://localhost:3306/test01?characterEncoding=UTF-8&serverTimezone=GMT # 用户名 username: root # 密码 password: root # 连接池 type: com.alibaba.druid.pool.DruidDataSource # 日志 logging: level: # 设置日志级别:将Mapper接口所在包下的内容设置为debug级别,可以查看执行SQL语句打印 com.shiory.springbootdemo01.mapper: debug
7、测试
1、在Mapper接口中,右键选择【Go To】-----》【Test】-----》【Create New Test....】
2、勾选方法,点击OK,就可以得到一个测试类
3、修改测试类
加上注解:@SpringBootTest、@Slf4j,然后就可以正常的使用注入注解等注解了
测试类内容
import com.shiory.springbootdemo01.entity.User; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.List; @SpringBootTest // SpringBoot测试注解 @Slf4j // 日志使用 class UserMapperTest { // 注入Mapper接口 @Autowired private UserMapper userMapper; // 此处会报红,但是不影响功能,强迫症的后面介绍去除方法 /** * xml整合方式测试:有参数 */ @Test void selectByName() { List<User> userList = userMapper.selectByName("张三"); userList.forEach(user -> log.info(user.toString())); } /** * 注解整合方式测试:有参数 */ @Test void selectById() { User user = userMapper.selectById(1L); log.info(user.toString()); } /** * 注解整合方式测试:无参 */ @Test void selectAll() { List<User> userList = userMapper.selectAll(); userList.forEach(user -> log.info(user.toString())); } }
4、测试结果
xml整合方式测试结果:selectByName()
注解整合方式测试结果:selectById()
注解整合方式测试结果:selectAll()
8、针对Mapper接口注入报红解决
如果在注入Mapper接口时报红,IDEA在提示could not autowire....,但项目能正常运行的话,可以在Idea的设置中做如下设置
【File】----》【Settings】----》【Editor】----》【Inspections】----》找到Spring,点击Spring,然后将右侧的Severity改为Warning,最后点击OK,报红就不见了
报红消失
9、集成分页助手PageHelper
1、在上面的基础上,在pom.xml文件中加入下面的依赖
<!-- 分页助手依赖:与SpringBoot整合的依赖 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency>
2、在上面的测试类中加入下面的测试方法
@Test void selectPageAll() { // 1、执行分页:参数1:pageNum--当前页码,参数2:pageSize--每页显示条数 PageHelper.startPage(1, 2); // 2、执行查询 List<User> userList = userMapper.selectAll(); // 3、封装PageInfo对象 PageInfo<User> pageInfo = new PageInfo<>(userList); // 日志输出pageInfo log.info(pageInfo.toString()); }
3、运行测试方法得到结果