SpringBoot2.0系列--04--最简单的Mybatis连接数据库.md

Posted by lizhao on 07-09,2019

SpringBoot2.0系列--04--最简单的Mybatis连接数据库

[toc]

前言

JDK出11了,SpringBoot出2.0了,还没有系统的学习过,刚好最近项目中有使用到,就把一些关键的东西列出来,避免忘记 SpringBoot2.0系列--00--目录

介绍

写完前台访问,下来就是访问数据库,这样基本的主干就有了

这边使用的是Mybatis框架,在整个行业中使用的也是比较广了,生态相对较好

下面直接看下怎么集成吧

这个是最精简的一个方式了,主要是引入的包和书写的代码是最少的,最少的东西,那么出错的概率就最小,出错之后排查也是最简单的

总流程

  1. 添加需要依赖的包
  2. 在配置文件中添加数据库连接(ip、端口、账号密码)
  3. 先在数据库中建表(先建表还是先写实体类,看个人的习惯)
  4. 在entity中添加与数据库表对应的实体类XXX
  5. 添加数据库访问层XXXDao,包路径在dao.mysql,注意这个dao是以接口形式出现
  6. 在XXXDao中添加方法(就是对数据库的操作)
  7. 在resources/mapper中添加对应的XXX.xml文件
  8. 在XXX.xml中配置:
    • dao和entity的联系
    • entity中的数据和数据库字段的对应关系
    • dao中写的那些方法的具体实现(具体到sql语句)
  9. 在application.yml配置下mapper的路径,第七条的路径
  10. 在项目启动的main文件上添加注解,路径就是第五条的路径:

@MapperScan("com.lizhaoblog.pro004mybatis.dao")

  1. 启动访问

示例

这里以User表为例,分别对上面的过程进行解释

添加需要依赖的包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.lizhaoblog</groupId>
  <artifactId>pro004-mybatis</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>pro004-mybatis</name>
  <description>Mybatis Connection Demo project for Spring Boot</description>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <mysql.version>5.1.38</mysql.version>
  </properties>


  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- jdbc、mybatis 需要-->
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!-- jdbc、mybatis 需要-->

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>


</project>

在配置文件中添加数据库连接(ip、端口、账号密码)

# mysql
spring:
    datasource:
        name: test
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8
        username: admindev
        password: admin123

先在数据库中建表(先建表还是先写实体类,看个人的习惯)

这样我们就建一个简单的表、三个字段id/name/age 数据库sql在etc/mysql.sql中

/*
SQLyog 企业版 - MySQL GUI v8.14 
MySQL - 5.6.26-log : Database - test
*********************************************************************
*/

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `test`;

/*Table structure for table `user` */

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(256) DEFAULT NULL,
  `age` int(11) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

/*Data for the table `user` */

insert  into `user`(`id`,`name`,`age`) values (1,'aaa',11),(2,'bbb',22);

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

在entity中添加与数据库表对应的实体类XXX

/*
 * Copyright (C), 2015-2018
 * FileName: User
 * Author:   zhao
 * Date:     2018/10/11 17:51
 * Description: User实体类
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.lizhaoblog.pro004mybatis.entity;

/**
 * 〈一句话功能简述〉<br>
 * 〈User实体类〉
 *
 * @author zhao
 * @date 2018/10/11 17:51
 * @since 1.0.1
 */
public class User {
  private Integer id;
  private String name;
  private Integer age;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }

  @Override
  public String toString() {
    return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}';
  }
}

添加数据库访问层XXXDao,包路径在dao.mysql,注意这个dao是以接口形式出现

在XXXDao中添加方法(就是对数据库的操作)

这2个一起写了

/*
 * Copyright (C), 2015-2018
 * FileName: UserDao
 * Author:   zhao
 * Date:     2018/10/11 17:50
 * Description: User数据库连接类
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.lizhaoblog.pro004mybatis.dao.mysql;

import com.lizhaoblog.pro004mybatis.entity.User;

import java.util.List;

/**
 * 〈一句话功能简述〉<br>
 * 〈User数据库连接类〉
 *
 * @author zhao
 * @date 2018/10/11 17:50
 * @since 1.0.1
 */
public interface UserDao {
  List<User> findAll();
}

在resources/mapper中添加对应的XXX.xml文件

在XXX.xml中配置:

  • dao和entity的联系
  • entity中的数据和数据库字段的对应关系
  • dao中写的那些方法的具体实现(具体到sql语句)
<?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="com.lizhaoblog.pro004mybatis.dao.mysql.UserDao">
  <!-- 这个id就是其他标签暴露的一个key,这样返回的数据就是这个resultMap,比如findAll标签就用到了这个 -->
  <resultMap type="com.lizhaoblog.pro004mybatis.entity.User" id="resultMap">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
  </resultMap>


  <select id="findAll" resultMap="resultMap">
		select * from user
	</select>

</mapper>

在application.yml配置下mapper的路径,第七条的路径

# Mybatis配置
mybatis:
    mapper-locations: "classpath:mapper/**/*.xml"

在项目启动的main文件上添加注解,路径就是第五条的路径:

@MapperScan("com.lizhaoblog.pro004mybatis.dao")

package com.lizhaoblog.pro004mybatis;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.lizhaoblog.pro004mybatis.dao")
public class Pro004MybatisApplication {

  public static void main(String[] args) {
    SpringApplication.run(Pro004MybatisApplication.class, args);
  }
}

启动访问

输入网址:http://127.0.0.1:8080/mybatis/find-all

结果:[User{id=1, name='aaa', age=11}, User{id=2, name='bbb', age=22}]

这样子就是连接成功了

通用Mybatis的使用

这样连接成功了数据库,刚开始还好,如果经常开发业务的话,就会写挺多dao的,所以很多通用dao框架就出现了,这些框架一般都包含了一些常用的方法,比如增删改查计数等

这个放到后面那篇说。

联系方式

项目代码路径码云:https://gitee.com/lizhaoandroid/Springboot-Learning-lz

联系方式:QQ3060507060

查看下一篇或者其他文章,可点击目录或者专栏查看