• springboot学习随笔(四):Springboot整合mybatis(含generator自动生成代码)


    这章我们将通过springboot整合mybatis来操作数据库

    以下内容分为两部分,一部分主要介绍generator自动生成代码,生成model、dao层接口、dao接口对应的sql配置文件

    第一部分:

    1.修改的pom.xml,最终pom如下,添加了自动生成代码generator插件

    <?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>1.5.20.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>Springboot</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <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>
            
            <!-- 整合mybatis -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.0</version>
            </dependency>
            
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                </dependency>
            
            <!-- 分页插件 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.1.2</version>
            </dependency>
            
            <!-- druid连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.0</version>
            </dependency>
    
    
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <!-- mybatis generator 自动生成代码插件 -->
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.2</version>
                    <configuration>
                        <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
                        <overwrite>true</overwrite>
                        <verbose>true</verbose>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>

    2.项目不使用application.properties文件 而使用更加简洁的application.yml文件:
    将原有的resource文件夹下的application.properties文件删除,创建一个新的application.yml配置文件,
    文件的内容如下:

    server:
      port: 8080
    
    spring:
        datasource:
            name: test
            url: jdbc:mysql://127.0.0.1:3306/mysql_test
            username: root
            password: root
            # 使用druid数据源
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.jdbc.Driver
            filters: stat
            maxActive: 20
            initialSize: 1
            maxWait: 60000
            minIdle: 1
            timeBetweenEvictionRunsMillis: 60000
            minEvictableIdleTimeMillis: 300000
            validationQuery: select 'x'
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            poolPreparedStatements: true
            maxOpenPreparedStatements: 20
    
    ## 该配置节点为独立的节点,有很多同学容易将这个配置放在spring的节点下,导致配置无法被识别
    mybatis:
      mapper-locations: classpath:mapping/*.xml  #注意:一定要对应mapper映射xml文件的所在路径
      type-aliases-package: com.example.model  # 注意:对应实体类的路径
    
    #pagehelper分页插件
    pagehelper:
        helperDialect: mysql
        reasonable: true
        supportMethodsArguments: true
        params: count=countSql

    3.添加generator配置文件

    在src/main/resources目录下,添加generator配置文件,路径:src/main/resources/generator/generatorConfig.xml

    generatorConfig.xml如下:

    注意:修改部分内容:

    1.<classPathEntry  location="E:devtools
    epomysqlmysql-connector-java5.1.24mysql-connector-java-5.1.24.jar"/>
      修改为实际的mysql-connect的jar包全路径(如果是本地仓库的,就写本地仓库的地址,如上就是我的本地仓库的jar包地址)
    2.<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1/mysql_test" userId="root" password="root">
      修改为实际数据库ip,数据库名,账号,密码

    3.<
    javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
      targetPackage修改为生成model的包名

    4.<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
      targetPackage修改为生成mapper的包名
    
    
    <?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:devtools
    epomysqlmysql-connector-java5.1.24mysql-connector-java-5.1.24.jar"/>
        <context id="DB2Tables"  targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressDate" value="true"/>
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <!--数据库链接URL,用户名、密码 -->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1/mysql_test" userId="root" password="root">
            </jdbcConnection>
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
            <!-- 生成模型的包名和位置-->
            <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
            <!-- 生成映射文件的包名和位置-->
            <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
                <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
            <!-- 生成DAO的包名和位置-->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
            </javaClientGenerator>
            <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
            <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    </context> </generatorConfiguration>

    4.在数据库中创建user表,

      

    5.根据表生成model、mapper、sqlmapper

     右键项目,run-as,maven-build,下图框中输入:mybatis-generator:generate ,  执行run

    6.执行成功后刷新项目,会发现自动生成了model、mapper、mapper.xml(如接着上章的操作,则删除之前的mainUser.java),最终目录如下


     User.java对应了数据库中的user表

    package com.example.model;
    
    import java.io.Serializable;
    
    public class User implements Serializable{
        /**
         * 
         */
        private static final long serialVersionUID = 6308154504229603370L;
    
        private Long id;
    
        private String name;
    
        private Integer age;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name == null ? null : name.trim();
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    }

    UserMapper.java 自动生成了dao层的增删改查接口

    package com.example.mapper;
    
    import com.example.model.User;
    
    public interface UserMapper {
        int deleteByPrimaryKey(Long id);
    
        int insert(User record);
    
        int insertSelective(User record);
    
        User selectByPrimaryKey(Long id);
    
        int updateByPrimaryKeySelective(User record);
    
        int updateByPrimaryKey(User record);
    }

    UserMapper.xml则自动生成了UserMapper.java中接口对应的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.example.mapper.UserMapper" >
      <resultMap id="BaseResultMap" type="com.example.model.User" >
        <id column="id" property="id" jdbcType="BIGINT" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="age" property="age" jdbcType="INTEGER" />
      </resultMap>
      <sql id="Base_Column_List" >
        id, name, age
      </sql>
      <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
        select 
        <include refid="Base_Column_List" />
        from user
        where id = #{id,jdbcType=BIGINT}
      </select>
      <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
        delete from user
        where id = #{id,jdbcType=BIGINT}
      </delete>
      <insert id="insert" parameterType="com.example.model.User" >
        insert into user (id, name, age)
        values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})
      </insert>
      <insert id="insertSelective" parameterType="com.example.model.User" >
        insert into user
        <trim prefix="(" suffix=")" suffixOverrides="," >
          <if test="id != null" >
            id,
          </if>
          <if test="name != null" >
            name,
          </if>
          <if test="age != null" >
            age,
          </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
          <if test="id != null" >
            #{id,jdbcType=BIGINT},
          </if>
          <if test="name != null" >
            #{name,jdbcType=VARCHAR},
          </if>
          <if test="age != null" >
            #{age,jdbcType=INTEGER},
          </if>
        </trim>
      </insert>
      <update id="updateByPrimaryKeySelective" parameterType="com.example.model.User" >
        update user
        <set >
          <if test="name != null" >
            name = #{name,jdbcType=VARCHAR},
          </if>
          <if test="age != null" >
            age = #{age,jdbcType=INTEGER},
          </if>
        </set>
        where id = #{id,jdbcType=BIGINT}
      </update>
      <update id="updateByPrimaryKey" parameterType="com.example.model.User" >
        update user
        set name = #{name,jdbcType=VARCHAR},
          age = #{age,jdbcType=INTEGER}
        where id = #{id,jdbcType=BIGINT}
      </update>
    </mapper>

    以上是通过generator自动生成代码。是不是可以少些很多代码呀。。

    接下来我们进入第二部分,开始操作数据库

    第二部分:

    1.修改SpringbootApplication.java启动类,添加mapper扫描包

    2.编写通用返回类ResultModel

    package com.example.demo.base;
    
    import java.io.Serializable;
    
    public class ResultModel<T> implements Serializable {
    
        /**
         * 
         */
        private static final long serialVersionUID = -3045412214539024289L;
        private String resultCode;
        private String resultMsg;
        private T t;
    
        public String getResultCode() {
            return resultCode;
        }
    
        public void setResultCode(String resultCode) {
            this.resultCode = resultCode;
        }
    
        public String getResultMsg() {
            return resultMsg;
        }
    
        public void setResultMsg(String resultMsg) {
            this.resultMsg = resultMsg;
        }
    
        public T getT() {
            return t;
        }
    
        public void setT(T t) {
            this.t = t;
        }
    
    }

    3.编写Service层代码UserService.java(本次直接编写实现,不在分servicce接口和实现)

    package com.example.demo.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.example.demo.base.ResultModel;
    import com.example.mapper.UserMapper;
    import com.example.model.User;
    
    @Service
    public class UserService {
    
        @Autowired
        private UserMapper userMapper;
        
        public ResultModel<User> insert(User user){
            ResultModel<User> rm = new ResultModel<User>();
            try {
                userMapper.insert(user);
            } catch (Exception e) {
                rm.setResultCode("9999999");
            }
            rm.setResultCode("0000000");
            rm.setResultMsg("新增成功");
            return rm;
        }
    }

    4.修改UserController.java

    package com.example.demo.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.example.demo.base.ResultModel;
    import com.example.demo.service.UserService;
    import com.example.model.User;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
        
        @Autowired
        private UserService userService;
        
        @RequestMapping("/add")
        public ResultModel<User> user(User user){
            ResultModel<User> rm = userService.insert(user);
            return rm;
        }
    }

    5.在浏览器中访问,实现添加User

     本章内容结束,如有疑问请留言

  • 相关阅读:
    正则表达式(RegExp)
    文本处理工具(cut,sort,tr,grep等)
    权限和ACL练习题
    访问控制列表ACL
    权限和ACL访问控制-02-特殊权限
    数据库的高级操作
    数据表三范式&范式理论
    数据表之间的关系
    数据表的列类型
    修改表结构
  • 原文地址:https://www.cnblogs.com/livensummer/p/10696829.html
Copyright © 2020-2023  润新知