springboot2之結合mybatis增刪改查解析

  • 2019 年 10 月 3 日
  • 筆記

1. 場景描述

本節結合springboot2、springmvc、mybatis、swagger2等,搭建一個完整的增刪改查項目,希望通過這個基礎項目,能幫忙朋友快速上手springboot2項目。

2. 解決方案

2.1新建springboot項目

使用idea新建springboot項目(springboot項目快速搭建

(1)new project

(2)gav設置

2.2 項目整體圖及說明

2.2.1 整體圖

2.2.2 說明

項目包含4大內容

(1)pom.xml

maven項目必備,用於定義項目、獲取jar包、打包等。

(2)項目配置文件

有兩個,一個是項目內配置文件;一個是用於mybatis-generate生成相關資料庫操作文件。

(3)spcrudapplication

項目啟動類,springboot項目必備。

(4)springmvc對應類。

包含controller、service、db等相關類。

2.3 詳細說明

2.3.1 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 https://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.7.RELEASE</version>          <relativePath/> <!-- lookup parent from repository -->      </parent>      <groupId>com.laowang</groupId>      <artifactId>spcrud</artifactId>      <version>0.0.1-SNAPSHOT</version>      <name>spcrud</name>      <description>Demo project for Spring Boot</description>        <properties>          <java.version>1.8</java.version>      </properties>      <dependencies>       <!--1.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>            <!--2. 資料庫 軟體老王-->          <dependency>              <groupId>mysql</groupId>              <artifactId>mysql-connector-java</artifactId>              <version>8.0.15</version>          </dependency>          <dependency>              <groupId>org.springframework.boot</groupId>              <artifactId>spring-boot-starter-jdbc</artifactId>              <version>2.1.5.RELEASE</version>          </dependency>            <!--3. swagger 軟體老王-->          <dependency>              <groupId>io.springfox</groupId>              <artifactId>springfox-swagger2</artifactId>              <version>2.7.0</version>          </dependency>          <dependency>              <groupId>io.springfox</groupId>              <artifactId>springfox-swagger-ui</artifactId>              <version>2.7.0</version>          </dependency>          <!--4.mybatis 軟體老王-->          <!--mybatis-->          <dependency>          <groupId>org.mybatis.spring.boot</groupId>          <artifactId>mybatis-spring-boot-starter</artifactId>          <version>2.1.0</version>      </dependency>        </dependencies>         <!--5.打包 軟體老王-->      <build>          <resources>              <resource>                  <directory>src/main/resources/</directory>              </resource>              <resource>                  <directory>src/main/java</directory>                  <includes>                      <include>**/*.xml</include>                  </includes>              </resource>          </resources>          <plugins>              <plugin>                  <groupId>org.springframework.boot</groupId>                  <artifactId>spring-boot-maven-plugin</artifactId>              </plugin>                <plugin>                  <groupId>org.mybatis.generator</groupId>                  <artifactId>mybatis-generator-maven-plugin</artifactId>                  <version>1.3.5</version>                  <configuration>                    <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>                      <verbose>true</verbose>                      <overwrite>true</overwrite>                  </configuration>              </plugin>          </plugins>      </build>    </project>  

說明:

包含5塊內容

(1)web啟動包 ;

(2)資料庫 ;

(3)swagger;

(4)mybatis;

(5)打包;

2.3.2 資源文件

(1)application.properties

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/ruanjianlaowang?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8  spring.datasource.username=root  spring.datasource.password=root

說明: 資料庫配置文件,連接、用戶名、密碼

(2)mybatis資源文件

<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE generatorConfiguration          PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"          "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  <generatorConfiguration>      <classPathEntry              location="E:m2repositorymysqlmysql-connector-java5.1.46mysql-connector-java-5.1.46.jar"/>      <context id="DB2Tables" targetRuntime="MyBatis3">          <!--<plugin type="org.mybatis.generator.plugins.ExamplePagePlugin"/>-->          <!--<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>-->          <commentGenerator>              <!-- 是否去除自動生成的注釋 true:是 : false:否 -->              <property name="suppressAllComments" value="true"/>          </commentGenerator>            <jdbcConnection driverClass="com.mysql.jdbc.Driver"                          connectionURL="jdbc:mysql://127.0.0.1:3306/ruanjianlaowang"                          userId="root"                          password="root">          </jdbcConnection>            <javaTypeResolver>              <property name="forceBigDecimals" value="false"/>          </javaTypeResolver>          <javaModelGenerator targetPackage="com.laowang.spcrud.db.entity" targetProject="src/main/java">              <property name="enableSubPackages" value="true"/>              <property name="trimStrings" value="true"/>          </javaModelGenerator>          <sqlMapGenerator targetPackage="com.laowang.spcrud.db.mapper" targetProject="src/main/java">              <property name="enableSubPackages" value="true"/>          </sqlMapGenerator>          <javaClientGenerator type="XMLMAPPER" targetPackage="com.laowang.spcrud.db.mapper" targetProject="src/main/java">              <property name="enableSubPackages" value="true"/>          </javaClientGenerator>              <table tableName="t_laowang" domainObjectName="TLaowang" enableInsert="true"                 enableDeleteByPrimaryKey="true"                 enableSelectByPrimaryKey="true"                 enableUpdateByPrimaryKey="true"                 enableCountByExample="false"                 enableDeleteByExample="false"                 enableSelectByExample="false"                 enableUpdateByExample="false">              <property name="useActualColumnNames" value="false"/>              <generatedKey column="id" sqlStatement="MYSQL" identity="true"/>          </table>          </context>  </generatorConfiguration>

說明:

包含幾塊內容:

(a)classPathEntry 標籤定義的是mysql-connector的jar包地址

(b)jdbcConnection 資料庫連接資訊

(c)javaModelGenerator、sqlMapGenerator、javaClientGenerator定義的是生成文件存放的地址;

(d)table具體執行生成程式碼的tabel,增加幾個標籤,不生成example方法。

2.3.3 啟動類
package com.laowang.spcrud;    import org.mybatis.spring.annotation.MapperScan;  import org.springframework.boot.SpringApplication;  import org.springframework.boot.autoconfigure.SpringBootApplication;  import springfox.documentation.swagger2.annotations.EnableSwagger2;    @SpringBootApplication  @EnableSwagger2  @MapperScan("com.laowang.spcrud.db.mapper")  public class SpcrudApplication {        public static void main(String[] args) {          SpringApplication.run(SpcrudApplication.class, args);      }    }  

說明:

@SpringBootApplication所有springboot項目啟動必備

@EnableSwagger2 啟動swagger

@MapperScan載入mpper文件。

2.3.4 springmvc類

(1)TestController

package com.laowang.spcrud.controller;    import com.laowang.spcrud.db.entity.TLaowang;  import com.laowang.spcrud.service.TestService;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.web.bind.annotation.RequestMapping;  import org.springframework.web.bind.annotation.RequestMethod;  import org.springframework.web.bind.annotation.ResponseBody;  import org.springframework.web.bind.annotation.RestController;    @RestController  public class TestController {      @Autowired      private TestService testService;        /**       *  增加       * @auther: 軟體老王       */      @RequestMapping(value ="/save", method = RequestMethod.POST)      @ResponseBody      public  String save(TLaowang tLaowang) {          testService.insertRecord(tLaowang);          return "保存成功,i'm 軟體老王!";      }      /**       *  刪除       * @auther: 軟體老王       */      @RequestMapping(value ="/delete", method = RequestMethod.POST)      @ResponseBody      public  String delete(int id) {          testService.deleteByPrimaryKey(id);          return "刪除成功,i'm 軟體老王!";      }        /**       *  更新       * @auther: 軟體老王       */      @RequestMapping(value ="/update", method = RequestMethod.POST)      @ResponseBody      public  String update(TLaowang tLaowang) {          testService.updateByPrimaryKeySelective(tLaowang);          return "更新成功,i'm 軟體老王!";      }      /**       *  查詢       * @auther: 軟體老王       */      @RequestMapping(value ="/select", method = RequestMethod.POST)      @ResponseBody      public  Object select(int id) {          return testService.selectByPrimaryKey(id);      }  }  

ctroller類包含增刪改查4個方法,使用了rest請求的方式。

(2)TestService

package com.laowang.spcrud.service;    import com.laowang.spcrud.db.entity.TLaowang;  import com.laowang.spcrud.db.mapper.TLaowangMapper;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Service;    @Service  public class TestService {      @Autowired      private TLaowangMapper tLaowangMapper;          /**       *  增加       * @auther: 軟體老王       */      public  void insertRecord(TLaowang tLaowang) {          tLaowangMapper.insert(tLaowang);      }        /**       *  刪除       * @auther: 軟體老王       */      public  void deleteByPrimaryKey(int id) {          tLaowangMapper.deleteByPrimaryKey(id);      }      /**       *  更新       * @auther: 軟體老王       */      public  void updateByPrimaryKeySelective(TLaowang tLaowang) {          tLaowangMapper.updateByPrimaryKeySelective(tLaowang);      }        /**       *  查詢       * @auther: 軟體老王       */      public  TLaowang selectByPrimaryKey(int id) {          return tLaowangMapper.selectByPrimaryKey(id);      }  }  

TestService類,增刪改查的服務類。

(3)實體類TLaowang

package com.laowang.spcrud.db.entity;    public class TLaowang {      private Integer id;        private String name;        private String password;        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 == null ? null : name.trim();      }        public String getPassword() {          return password;      }        public void setPassword(String password) {          this.password = password == null ? null : password.trim();      }  }

操作實體類,包含三個欄位:id、name、password

(4)mpper介面類TLaowangMapper

package com.laowang.spcrud.db.mapper;    import com.laowang.spcrud.db.entity.TLaowang;    public interface TLaowangMapper {      int deleteByPrimaryKey(Integer id);        int insert(TLaowang record);        int insertSelective(TLaowang record);        TLaowang selectByPrimaryKey(Integer id);        int updateByPrimaryKeySelective(TLaowang record);        int updateByPrimaryKey(TLaowang record);  }

(5)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.laowang.spcrud.db.mapper.TLaowangMapper">    <resultMap id="BaseResultMap" type="com.laowang.spcrud.db.entity.TLaowang">      <id column="id" jdbcType="INTEGER" property="id" />      <result column="name" jdbcType="VARCHAR" property="name" />      <result column="password" jdbcType="VARCHAR" property="password" />    </resultMap>    <sql id="Base_Column_List">      id, name, password    </sql>    <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">      select      <include refid="Base_Column_List" />      from t_laowang      where id = #{id,jdbcType=INTEGER}    </select>    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">      delete from t_laowang      where id = #{id,jdbcType=INTEGER}    </delete>    <insert id="insert" parameterType="com.laowang.spcrud.db.entity.TLaowang">      <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">        SELECT LAST_INSERT_ID()      </selectKey>      insert into t_laowang (name, password)      values (#{name,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR})    </insert>    <insert id="insertSelective" parameterType="com.laowang.spcrud.db.entity.TLaowang">      <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">        SELECT LAST_INSERT_ID()      </selectKey>      insert into t_laowang      <trim prefix="(" suffix=")" suffixOverrides=",">        <if test="name != null">          name,        </if>        <if test="password != null">          password,        </if>      </trim>      <trim prefix="values (" suffix=")" suffixOverrides=",">        <if test="name != null">          #{name,jdbcType=VARCHAR},        </if>        <if test="password != null">          #{password,jdbcType=VARCHAR},        </if>      </trim>    </insert>    <update id="updateByPrimaryKeySelective" parameterType="com.laowang.spcrud.db.entity.TLaowang">      update t_laowang      <set>        <if test="name != null">          name = #{name,jdbcType=VARCHAR},        </if>        <if test="password != null">          password = #{password,jdbcType=VARCHAR},        </if>      </set>      where id = #{id,jdbcType=INTEGER}    </update>    <update id="updateByPrimaryKey" parameterType="com.laowang.spcrud.db.entity.TLaowang">      update t_laowang      set name = #{name,jdbcType=VARCHAR},        password = #{password,jdbcType=VARCHAR}      where id = #{id,jdbcType=INTEGER}    </update>  </mapper>

4與5在一起,這裡使用了mybatis自動生成的增刪改查方法,未做擴展,真實項目中除了這幾個外,肯定還會做些擴展,比如根據name查詢等。

2.4 資料庫建表語句

CREATE TABLE `t_laowang` (    `id` int(11) NOT NULL AUTO_INCREMENT,    `name` varchar(50) DEFAULT NULL,    `password` varchar(50) DEFAULT NULL,    PRIMARY KEY (`id`)  ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;    

2.5 swagger效果

http://localhost:8080/swagger-ui.html

完整的程式碼,完整的注釋,希望對你有幫助。


I』m 「軟體老王」,如果覺得還可以的話,關注下唄,後續更新秒知!歡迎討論區、同名公眾號留言交流!