09-SpringBoot整合MyBatis及分页助手PageHelper

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、运行测试方法得到结果

 

猜你喜欢

转载自blog.csdn.net/zhuzbYR/article/details/113058167