zoukankan      html  css  js  c++  java
  • springboot2之结合mybatis增删改查解析-copy

    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:m2
    epositorymysqlmysql-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

    完整的代码,完整的注释,希望对你有帮助。

  • 相关阅读:
    openwrt 相关文章
    负载均衡相关文章
    Today's Progress
    Rodrigues formula is beautiful, but uneven to sine and cosine. (zz Berkeley's Page)
    Camera Calibration in detail
    Fundamental Matrix in Epipolar
    Camera Calibration's fx and fy do Cares in SLAM
    FilterEngine::apply
    FilterEngine 类解析——OpenCV图像滤波核心引擎(zz)
    gaussBlur
  • 原文地址:https://www.cnblogs.com/hanease/p/14515296.html
Copyright © 2011-2022 走看看