在IDEA上搭建使用SpringBoot搭配Mybatis的Maven项目

在IDEA上使用SpringBoot搭配Mybatis实现数据呈现

1. New Project 选择Spring Initializr

在IDEA上搭建使用SpringBoot搭配Mybatis的Maven项目

2. 项目基础信息填完之后选择Web组件

在IDEA上搭建使用SpringBoot搭配Mybatis的Maven项目

3. 刚建完的Maven项目,pom文件是这样的

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.huayun</groupId>
    <artifactId>safety</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>safety</name>
    <description>a safety project</description>

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

    <dependencies>
        <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>
    </dependencies>

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

</project>

之后,我们就可以根据自己需要在dependencies这个节点内增加我们要引用的jar包依赖。接下来,我们把Mybatis组件和MySQL连接的依赖加进项目里

	<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

加入这两个依赖,并刷新一下Maven,模块引用就成功了,是不是觉得很简单。之后你要用到其他依赖的jar包也可以像这样,利用Maven来帮你处理jar包之间的版本选择和冲突处理。
接下来,我们再配置一下初始化文件,之前的项目里我们用的都是xml格式的文件,现在我们用yml格式的文件来写配置文件,更加简洁高效实用。
在项目中,由于我们要区分开发环境的配置与实际应用环境的配置,我们先在resource目录下建立一个总文件,application.yml

spring:
  profiles:
    active: dev

意思是我们本次启动**dev后缀的配置文件,再次基础上,我们在同级目录再建立一个application-dev.yml,使得该配置文件被用作实际加载。以此类推,如果我们要部署到服务器作为生产环境运行,那么我们可以再建立一个application-release.yml文件。现在我们来填充application-dev.yml这个开发配置文件:

server:
  port: 8080

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.huayun.safety.domain

#showSql
logging:
  level:
    com:
      huayun:
        safety :
          repository: debug

以上配置的意思是,使用8080端口启动,使用mysql连接到test这个库中,我们与数据库交互的Mapper.xml文件一定要放在resource目录下的mapper目录,并且取名格式一定要是xxxMapper.xml。type-aliases-package的意思是配置与你请求数据库返回的属性值与对象对应的包目录,即实体类的包目录。
logging节点下的配置主要是针对启动日志的输出,只有在debug级别或者更高以上级别才输出控制台打印日志。
至此,我们使用SpringBoot+Mybatis的Maven项目就已经完成了,resources下的目录是这样的:
在IDEA上搭建使用SpringBoot搭配Mybatis的Maven项目
我们想做个测试,首先在本地数据库新建一个test库,并且新建一张user表,我们需要从Controller层->Service层->Dao层->Mapper.xml,最后从数据库获取到数据并返回给页面。我目前建立的包结构是这样的:
在IDEA上搭建使用SpringBoot搭配Mybatis的Maven项目
写个简单的查询语句,在mapper.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="com.huayun.safety.repository.ADao">

    <resultMap id="BaseResultMap" type="com.huayun.safety.domain.ADomain">
        <result column="id" jdbcType="BIGINT" property="id" />
        <result column="user_name" jdbcType="VARCHAR" property="userName" />
        <result column="pass_word" jdbcType="VARCHAR" property="userPassword" />
    </resultMap>

    <select id="getList" resultMap="BaseResultMap">
        select * from user
    </select>

</mapper>

ADomain对象即是我对应User表的实体类,属性名具体是:

package com.huayun.safety.domain;

import lombok.Data;

/**
 * @author [email protected]
 * @data 2019/1/24 20:48
 */
@Data
public class ADomain {

    private Long id;

    private String userName;

    private String userPassword;
}

在这里插个题外话,你看到我这个实体类中并没有写get/set方法,只有一个@Data注解,如果之前没有接触过这个@Data注解估计会很纳闷,我一开始接触的时候也是思考了很久,后来从@Data注解入手,发现该注解能够帮你自动加载get/set方法,从此我就爱上了这个注解,能够省略不少时间也增加了代码的简洁可读性,而我们使用@Data注解需要在pom文件的Dependencies中引入lombok:

		<!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>

回归正题,我们mapper.xml文件书写好了,该写Dao层了,在这里我建立一个对应AMapper.xml中resultMap指向的ADao.java文件:

package com.huayun.safety.repository;

import com.huayun.safety.domain.ADomain;

import java.util.List;

/**
 * @author [email protected]
 * @data 2019/1/24 18:14
 */
public interface ADao {

    /**
     * 获取用户列表
     * @return
     */
    List<ADomain> getList();
}

接着是Service的接口,AService.java文件:

package com.huayun.safety.service;

import com.huayun.safety.domain.ADomain;

import java.util.List;

/**
 * @author [email protected]
 * @data 2019/1/24 18:02
 */
public interface AService {

    List<ADomain> getUserList();
}

随后是Service接口对应的实现类,AServiceImpl.java文件:

package com.huayun.safety.service.impl;

import com.huayun.safety.domain.ADomain;
import com.huayun.safety.repository.ADao;
import com.huayun.safety.service.AService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author [email protected]
 * @data 2019/1/24 18:02
 */
@Service
public class AServiceImpl implements AService {

    @Autowired
    private ADao aDao;

    @Override
    public List<ADomain> getUserList() {
        return aDao.getList();
    }
}

最后是Controller层,UserController.java文件:

package com.huayun.safety.controller;

import com.huayun.safety.domain.ADomain;
import com.huayun.safety.service.AService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author [email protected]
 * @data 2019/1/24 21:43
 */
@RestController
@RequestMapping(value = "/user")
public class UserController {

    @Autowired
    private AService aService;

    @RequestMapping(value = "/getList")
    public List<ADomain> getUserList(){
        return aService.getUserList();
    }
}

至此,我们完成了99%的工作,你可以尝试启动一下,会发现有报错信息。之所以让读者体验一下报错信息,是因为我们需要学会从报错中学习总结的能力,你会发现Dao包下的文件没法被项目加载。这时候,我们就需要在应用启动入口,Application.java这个文件的类名上加@MapperScan注解,并且写入basePackages的值,即项目中Dao包的目录,

package com.huayun.safety;

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

@SpringBootApplication
@MapperScan(basePackages = "com.huayun.safety.repository")
public class SafetyApplication {

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

}

好了,大功告成。启动完成之后,我们尝试访问一下http://localhost:8080/user/getList ,你就能在访问结果中看到你数据库user表中的数据内容项了
在IDEA上搭建使用SpringBoot搭配Mybatis的Maven项目
至此,简单的MySQL与SpringBoot的Maven项目搭建就已经实现了,希望能够为刚接触SpringBoot的同学提供一点帮助,后续也会不定期更新记录自己在搭建过程中遇到的问题和解决的思路,共勉。

参考资料:

yml配置
https://blog.csdn.net/colton_null/article/details/82145467

Mybatis中typealiases的使用
https://www.cnblogs.com/YuyuanNo1/p/7873220.html

构建springboot自动生成mapper文件和dao接口
https://blog.csdn.net/ligh_sqh/article/details/79549629