• 04_SpringBoot整合Mybatis


    SpringBoot整合Mybatis

    欢迎关注公众号“小东方不败”

    0x01_创建项目+导入依赖

    创建项目:

    image-20221116222500625

    目前稳定的最新版本是2.7.5,勾选两个依赖:LombokSpring Web

    image-20221116222543344

    然后需要导入依赖:(Lombok的依赖已经导入了)

    <dependency>
        <groupId>org.mybatis.spring.bootgroupId>
        <artifactId>mybatis-spring-boot-starterartifactId>
        <version>2.2.2version>
    dependency>
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>8.0.31version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    确保依赖导入成功:

    image-20221116223215177

    0x02_编写配置文件

    application.yml

    上一个笔记学习过yml和properties文件的差异之后,决定以后都用yml更好吧。

    首先需要配置数据库连接的4个要素和项目部署的端口号和上下文路径(其实端口和项目的上下文路径不需要部署也行,默认8080,项目上下文路径是“”):

    server:
      port: 8080
      servlet:
        context-path: /mybatis
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 你的密码
        url: jdbc:mysql://127.0.0.1/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    其次,因为还有mybatis的配置:

    mybatis:
      type-aliases-package: com.bones.pojo
      mapper-locations: classpath:mybatis/*.xml
    
    • 1
    • 2
    • 3

    上面的配置对应于:

    image-20221116224212500

    注意:

    mapper-locations: classpath:mybatis/*.xml mapper映射文件包扫描
    type-aliases-package 实体类别名包扫描

    0x03_编写功能代码

    要完成的功能就是数据库表user的所有数据:

    image-20221116224521551

    项目最终结构:

    image-20221116225458338

    实体类:com.bones.pojo.User

    package com.bones.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User implements Serializable {
        private Integer uid;
        private String uname;
        private Integer password;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    mapper层:com.bones.mapper.UserMapper

    package com.bones.mapper;
    
    import com.bones.pojo.User;
    import org.apache.ibatis.annotations.Mapper;
    
    import java.util.List;
    
    @Mapper
    public interface UserMapper {
        List<User> queryAll();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    mapper xml文件

    
    DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.bones.mapper.UserMapper">
        <select id="queryAll" resultType="user">
            select * from user
        select>
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    service层:com.bones.service.UserService

    package com.bones.service;
    
    import com.bones.pojo.User;
    
    import java.util.List;
    
    public interface UserService {
        List<User> queryAll();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    其实现类:com.bones.service.UserServiceImpl

    package com.bones.service.impl;
    
    import com.bones.mapper.UserMapper;
    import com.bones.pojo.User;
    import com.bones.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class UserServiceImpl implements UserService {
        @Autowired
        private UserMapper userMapper;
    
        @Override
        public List<User> queryAll() {
            return userMapper.queryAll();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    controller层com.bones.controller.UserController

    package com.bones.controller;
    
    import com.bones.pojo.User;
    import com.bones.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.util.List;
    
    @Controller
    @RequestMapping("/user")
    public class UserController {
        @Autowired
        private UserService userService;
        @ResponseBody
        @RequestMapping("queryAllUser")
        public List<User> queryAll(){
            return userService.queryAll();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    运行启动类,访问http://localhost:8080/mybatis/user/queryAllUser

    得到数据:

    image-20221116225844383

    如果是用火狐访问,可以得到JSON格式显示的数据:

    image-20221116225924013

    以上就是一层一层的编写步骤。

    1.我个人写代码的习惯是:先写实体类(Lombok注解一写,so quick)—>创建好各个层的类或者接口(加上注解,但是不写具体代码)—》从controller层写起,从controller层先定义好返回的类型,这样用IDEA快捷键快速写完service层和mapper层,一层一层往下写。如果一层一层往上写,还得考虑返回值类型,不想动这个脑。

    2.还有就是在注入对象的时候,往往IDEA会误报,建议将IDEA的报错级别调低:

    确定代码无问题,可以通过降低idea检查代码的严格程度来消除报错快捷键(windows):ctrl+alt+shift+h

    我个人不是很喜欢把报错级别调整低。

    3.在resource下新建mybatis文件夹,mapper.xml文件名没有要求了,不需要和接口名完全对应了,是根据namespace去找接口。但是最好还是和接口名字保持一致 (增强可读性+开发效率)

    4.在上面的mapper接口中加了注解@Mapper,其实可以不加.如果不加@Mapper注解,那么要在启动类上加:

    @MapperScan("com.bones.mapper")

    两个注解写1个即可。

  • 相关阅读:
    Android随笔-虚拟机
    【POJ No. 3104】 烘干衣服 Drying
    脚手架构建VUE项目
    pytest fixture 中的使用包信scope skip conftest.py 和参数化等功能使用
    [数据可视化] 词云(Word Cloud)
    一、高效构建Java应用:Maven入门和进阶
    python经典百题之前N项和
    Java语言知识大盘点(期末总复习)一
    MySQL--慢查询(一)
    C++11特性-可调用对象
  • 原文地址:https://blog.csdn.net/qq_51550750/article/details/128078139