1. 什么是Mybatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2. Spring Boot 整合 Mybatis

  • 2.1 引入maven坐标

    <!--springboot父工程-->
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent> <dependencies>
    <!--springboot框架web组件-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.2.2.RELEASE</version>
    </dependency>
    <!--mybatis整合springboot组件-->
    <dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.0</version>
    </dependency>
    <!--mysql数据库连接驱动-->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.18</version>
    </dependency>
    <!--lombok组件-->
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
    </dependency>
    </dependencies> <build>
    <!--springboot的maven插件-->
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
    <compilerArgs>
    <arg>-parameters</arg>
    </compilerArgs>
    </configuration>
    </plugin>
    </plugins>
    </build>
  • 2.2 编写代码

    • 2.2.1 创建如图所示的目录结构

      记得两个mapper文件的路径要一致,在编译之后mybatis的映射文件和接口文件才会在同一个目录下。

    • 2.2.2 代码编写

      • 2.2.2.1 创建配置文件和启动类

        application.yml

        butterflytri:
        databaseurl-port: 127.0.0.1:3306 # 数据库端口
        database-name: student_db # 数据库名
        server:
        port: 8080 # 应用端口
        servlet:
        context-path: /butterflytri # 应用映射
        spring:
        application:
        name: mybatis # 应用名称
        datasource:
        url: jdbc:mysql://${butterflytri.databaseurl-port}/${butterflytri.database-name}?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
        driver-class-name: com.mysql.jdbc.Driver
        username: root
        password: root
        mybatis:
        type-aliases-package: org.wjf.entity # entity别名
        mapper-locations: classpath:org/wjf/mapper/*Mapper.xml # mapper映射包扫描

        启动类MybatisApplication.java

        package org.butterflytri;
        
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication; /**
        * @author: WJF
        * @date: 2020/5/16
        * @description: MybatisApplication
        */
        @SpringBootApplication
        public class MybatisApplication { public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class,args);
        } }
      • 2.2.2.2 创建实体类Student

        在entity包下创建Student.java实体类。

        package org.butterflytri.entity;
        
        import lombok.Getter;
        import lombok.Setter;
        import lombok.ToString; import java.io.Serializable; /**
        * @author: WJF
        * @date: 2020/5/16
        * @description: Student
        */ @ToString
        @Getter
        @Setter
        public class Student implements Serializable { private Long id; private String studentName; private String studentNo; private String sex; private Integer age; }
      • 2.2.2.3 编写mybatis接口文件

        在mapper包下创建StudentMapper.java接口。

        package org.butterflytri.mapper;
        
        import org.apache.ibatis.annotations.Mapper;
        import org.butterflytri.entity.Student; import java.util.List; /**
        * @author: WJF
        * @date: 2020/5/16
        * @description:
        */
        @Mapper
        public interface StudentMapper { /**
        * 查询所有学生信息
        * @return List<Student>
        */
        List<Student> findAll(); /**
        * 通过id查询学生信息
        * @param id
        * @return Student
        */
        Student findOne(Long id); /**
        * 通过学号查询学生信息
        * @param studentNo
        * @return Student
        */
        Student findByStudentNo(String studentNo); }
      • 2.2.2.4 创建mybatis映射文件

        在mapper包下创建StudentMapper.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">
        <mapper namespace="org.butterflytri.mapper.StudentMapper">
        <sql id="propertyMapper">
        `ID` AS id,
        `STUDENT_NAME` AS studentName,
        `STUDENT_NO` AS studentNo,
        `SEX` AS sex,
        `AGE` AS age
        </sql>
        <select id="findAll" resultType="org.butterflytri.entity.Student">
        SELECT
        <include refid="propertyMapper"></include>
        FROM
        `t_student`
        </select>
        <select id="findOne" parameterType="java.lang.Long" resultType="org.butterflytri.entity.Student">
        SELECT
        <include refid="propertyMapper"></include>
        FROM
        `t_student`
        WHERE
        `ID` = #{id}
        </select>
        <select id="findByStudentNo" parameterType="java.lang.String" resultType="org.butterflytri.entity.Student">
        SELECT
        <include refid="propertyMapper"></include>
        FROM
        `t_student`
        WHERE
        `STUDENT_NO` = #{studentNo}
        </select>
        </mapper>
      • 2.2.2.5 Service层

        在service包下创建StudentService.java接口,在impl包下创建StudentServiceImpl.Java类并继承StudentService.Java接口。

        StudentService.java

        package org.butterflytri.service;
        
        import org.butterflytri.entity.Student;
        
        import java.util.List;
        
        /**
        * @author: WJF
        * @date: 2020/5/16
        * @description: StudentService
        */ public interface StudentService { public List<Student> findAll(); public Student findOne(Long id); public Student findByStudentNo(String studentNo);
        }

        StudentServiceImpl.java

        package org.butterflytri.service.impl;
        
        import org.butterflytri.entity.Student;
        import org.butterflytri.mapper.StudentMapper;
        import org.butterflytri.service.StudentService;
        import org.springframework.stereotype.Service; import javax.annotation.Resource;
        import java.util.List; /**
        * @author: WJF
        * @date: 2020/5/16
        * @description: StudentServiceImpl
        */
        @Service
        public class StudentServiceImpl implements StudentService { @Resource
        private StudentMapper studentMapper; @Override
        public List<Student> findAll() {
        return studentMapper.findAll();
        } @Override
        public Student findOne(Long id) {
        return studentMapper.findOne(id);
        } @Override
        public Student findByStudentNo(String studentNo) {
        return studentMapper.findByStudentNo(studentNo);
        }
        }
      • 2.2.2.6 Controller层

        在controller包下创建StudentController.java控制器类。

        package org.butterflytri.controller;
        
        import org.butterflytri.entity.Student;
        import org.butterflytri.service.StudentService;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource;
        import java.util.List; /**
        * @author: WJF
        * @date: 2020/5/16
        * @description: StudentController
        */
        @RestController
        @RequestMapping("/student")
        public class StudentController { @Resource
        private StudentService studentService; @RequestMapping("/findAll")
        public List<Student> findAll() {
        return studentService.findAll();
        } @RequestMapping("/findOne")
        public Student findOne(Long id) {
        return studentService.findOne(id);
        } @RequestMapping("/findByStudentNo")
        public Student findByStudentNo(String studentNo) {
        return studentService.findByStudentNo(studentNo);
        } }
      • 2.2.2.7 启动工程,访问路径

        启动工程,访问三个接口:

        findAll

        findOne

        findByStudentNo

3. 项目地址

本项目传送门:spring-boot-mybatis

此教程会一直更新下去,觉得博主写的可以的话,关注一下,也可以更方便下次来学习。

Spring Boot 教程(2) - Mybatis的更多相关文章

  1. Spring boot教程mybatis访问MySQL的尝试

    Windows 10家庭中文版,Eclipse,Java 1.8,spring boot 2.1.0,mybatis-spring-boot-starter 1.3.2,com.github.page ...

  2. Spring Boot教程(三十八)使用MyBatis注解配置详解(1)

    之前在Spring Boot中整合MyBatis时,采用了注解的配置方式,相信很多人还是比较喜欢这种优雅的方式的,也收到不少读者朋友的反馈和问题,主要集中于针对各种场景下注解如何使用,下面就对几种常见 ...

  3. Spring Boot教程(三十七)整合MyBatis

    Spring中整合MyBatis就不多说了,最近大量使用Spring Boot,因此整理一下Spring Boot中整合MyBatis的步骤.搜了一下Spring Boot整合MyBatis的文章,方 ...

  4. Spring Boot:整合MyBatis框架

    综合概述 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单 ...

  5. Spring Boot:实现MyBatis分页

    综合概述 想必大家都有过这样的体验,在使用Mybatis时,最头痛的就是写分页了,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真的不想花双倍 ...

  6. Spring Boot:实现MyBatis动态数据源

    综合概述 在很多具体应用场景中,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库.又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动态数据 ...

  7. Spring Boot:实现MyBatis动态创建表

    综合概述 在有些应用场景中,我们会有需要动态创建和操作表的需求.比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等.这个时候就需要我们动态的生成和操作数据库表了. ...

  8. Spring Boot 教程

    Spring Boot 系列教程: Spring Boot:快速入门教程 Spring Boot:整合Swagger文档 Spring Boot:整合MyBatis框架 Spring Boot:实现M ...

  9. 程序员DD 《Spring boot教程系列》补充

    最近在跟着程序员DD的Spring boot教程系列学习Spring boot,由于年代原因,Spring boot已经发生了一些变化,所以在这里进行一些补充. 补充的知识大多来自评论区,百度,Sta ...

随机推荐

  1. 【java基础】01 计算机基础知识

    一.计算机基础知识 1. 计算机 1. 什么是计算机? 计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设 ...

  2. 【Linux常见命令】xargs命令

    xargs - build and execute command lines from standard input. 从标准输入< 方向获取数据,再创建和执行命令 xargs 是给命令传递参 ...

  3. nodeJS中express框架设置全局跨域请求头

    //设置跨域请求头 router.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin&qu ...

  4. TensorRT入门

    本文转载于:子棐之GPGPU 的 TensorRT系列入门篇 学习一下加深印象 Why TensorRT 训练对于深度学习来说是为了获得一个性能优异的模型,其主要的关注点在与模型的准确度.精度等指标. ...

  5. docker部署gitlab

    Docker部署gitlab 一.前提条件 (1)     存在docker (2)     服务器可以联网(外网) (3)     服务器内存至少4G(内存不够会出现502错误) 内存不足502错误 ...

  6. Java——单双引号的区别

    单引号: 单引号包括的是单个字符,表示的是char类型.例如: char  a='1' 双引号: 双引号可以包括0个或者多个字符,表示的是String类型. 例如: String s="ab ...

  7. 2-JVM内存模型

    内存模型 方法区 JDK1.7 之前包含1.7 将方法区称为 Perm Space 永久代 JDK1.8之后包含1.8 将方法区称为 MetaSpace 元空间. 堆(分配内存会大一些) 分配对象.n ...

  8. 网络流二十四题,题解summary

    没有全部写完,有几题以后再补吧. 第一题:最简单的:飞行员配对方案问题 讲讲这个题目为什么可以用网络流? 因为这个题目是要进行两两之间的匹配,这个就可以想到用二分图匹配,二分图匹配又可以用网络流写. ...

  9. Java 面向对象和封装

    目录 面向对象思想的概述 类和对象的关系 什么是类 什么是对象 类和对象的关系 局部变量和成员变量的区别 this关键字 构造方法 一个标准的类 面向对象思想的概述 面向过程:当需要实现一个功能的时候 ...

  10. C# 数据操作系列 - 1. SQL基础操作

    0.前言 前篇介绍了一些数据库的基本概念和以及一些常见的数据库,让我们对数据库有了一个初步的认识.这一篇我们将继续为C#数据操作的基础填上一个空白-SQL语句. SQL(Structured Quer ...