美文网首页Spring Cloud Alibaba
SpringBoot+通用Mapper构建单体架构

SpringBoot+通用Mapper构建单体架构

作者: WebGiser | 来源:发表于2021-09-21 17:58 被阅读0次

    SpringBoot+通用Mapper+专用代码生成器 构建简单通用的java单体架构。

    参考网站:https://github.com/abel533/Mapper

    1、项目概况

    项目结构图.jpg 技术选型.jpg 项目结构.jpg

    2、项目结构

    1632217494(1).png

    3、pom.xml

    <?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.13.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.geovis</groupId>
        <artifactId>usercenter</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>usercenter</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.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.0</version>
            </dependency>-->
    
            <!--通用mapper依赖-->
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
                <version>2.1.5</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    
        <build>
            <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.6</version>
                    <configuration>
                        <configurationFile>
                            ${basedir}/src/main/resources/generator/generatorConfig.xml
                        </configurationFile>
                        <overwrite>true</overwrite>
                        <verbose>true</verbose>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>8.0.19</version>
                        </dependency>
                        <dependency>
                            <groupId>tk.mybatis</groupId>
                            <artifactId>mapper</artifactId>
                            <version>4.1.5</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </project>
    

    4、专用代码生成器:根据数据库表生成 java实体类、mapper.xml、mapper接口等代码

    config.properties
    # 通用mapper的专用代码生成器配置
    
    # 数据库连接信息
    jdbc.driverClass=com.mysql.cj.jdbc.Driver
    jdbc.url=jdbc:mysql://192.168.1.13:3306/user_center?characterEncoding=UTF8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
    jdbc.user=root
    jdbc.password=123456
    
    # 表名
    tableName=user
    # 模块名称
    moduleName=user
    
    generatorConfig.xml
    <!DOCTYPE generatorConfiguration
            PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
            "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    
    <generatorConfiguration>
        <properties resource="generator/config.properties"/>
    
        <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
            <property name="beginningDelimiter" value="`"/>
            <property name="endingDelimiter" value="`"/>
    
            <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
                <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
                <property name="caseSensitive" value="true"/>
                <!--暂不支持Lombok的Data、Builder等注解-->
                <property name="lombok" value="Getter,Setter,ToString"/>
            </plugin>
    
            <!--数据库连接信息-->
            <jdbcConnection driverClass="${jdbc.driverClass}"
                            connectionURL="${jdbc.url}"
                            userId="${jdbc.user}"
                            password="${jdbc.password}">
            </jdbcConnection>
    
            <!--生成的实体位置-->
            <javaModelGenerator targetPackage="com.geovis.usercenter.domain.entity.${moduleName}"
                                targetProject="src/main/java"/>
    
            <!--生成的mapper.xml位置-->
            <sqlMapGenerator targetPackage="mapper.${moduleName}"
                             targetProject="src/main/resources"/>
    
            <!--生成的mapper接口位置-->
            <javaClientGenerator targetPackage="com.geovis.usercenter.dao.${moduleName}"
                                 targetProject="src/main/java"
                                 type="XMLMAPPER"/>
    
            <!--为哪张表生成实体、mapper.xml、mapper接口等文件-->
            <table tableName="${tableName}">
                <generatedKey column="id" sqlStatement="JDBC"/>
            </table>
        </context>
    </generatorConfiguration>
    
    代码生成命令
    mvn mybatis-generator:generate
    
    代码微调:在实体类上添加lombok注解、在mapper接口上添加@Repository注解

    User.java

    package com.geovis.usercenter.domain.entity.user;
    
    import java.util.Date;
    import javax.persistence.*;
    
    import lombok.*;
    
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Table(name = "user")
    public class User {
        /**
         * Id
         */
        @Id
        @GeneratedValue(generator = "JDBC")
        private Integer id;
    
        /**
         * 微信id
         */
        @Column(name = "wx_id")
        private String wxId;
    
        /**
         * 微信昵称
         */
        @Column(name = "wx_nickname")
        private String wxNickname;
    
        /**
         * 角色
         */
        private String roles;
    
        /**
         * 头像地址
         */
        @Column(name = "avatar_url")
        private String avatarUrl;
    
        /**
         * 创建时间
         */
        @Column(name = "create_time")
        private Date createTime;
    
        /**
         * 修改时间
         */
        @Column(name = "update_time")
        private Date updateTime;
    
        /**
         * 积分
         */
        private Integer bonus;
    }
    

    UserMapper.java

    package com.geovis.usercenter.dao.user;
    
    import com.geovis.usercenter.domain.entity.user.User;
    import org.springframework.stereotype.Repository;
    import tk.mybatis.mapper.common.Mapper;
    
    @Repository
    public interface UserMapper extends Mapper<User> {
    }
    

    5、编写接口

    application.properties
    server.port=8080
    
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://192.168.1.13:3306/user_center?characterEncoding=UTF8&serverTimezone=GMT%2B8
    spring.datasource.username=root
    spring.datasource.password=123456
    
    UserController.java
    package com.geovis.usercenter.controller.user;
    
    
    import com.geovis.usercenter.dao.user.UserMapper;
    import com.geovis.usercenter.domain.entity.user.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.Date;
    
    @RequestMapping("/user")
    @RestController
    public class UserController {
    
        @Autowired
        private UserMapper userMapper;
    
        @GetMapping(value = "/insertUser")
        public User insertUser(){
            /*User user = new User();
            user.setCreateTime(new Date());
            user.setUpdateTime(new Date());
            user.setWxNickname("xxx");*/
    
            User user = User.builder()
                    .createTime(new Date())
                    .updateTime(new Date())
                    .wxNickname("xxx")
                    .build();
            userMapper.insertSelective(user);
            return user;
        }
    }
    

    6、接口测试

    1632218204(1).png

    相关文章

      网友评论

        本文标题:SpringBoot+通用Mapper构建单体架构

        本文链接:https://www.haomeiwen.com/subject/gvfigltx.html