SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)

在上一篇文章《SpringBoot进阶教程(六十)intellij idea project下建多个module(上)》中,我们已经介绍了在intellij idea中创建project之后再分化多个module,今天再大致介绍介绍各个module之间详细工作的细分。 如果是不考虑细分多个module的话,可以看看这篇文章《SpringBoot入门教程(一)详解intellij idea搭建SpringBoot》。

v设计数据库

CREATE TABLE `useraccount` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `username` varchar(255) NOT NULL,
    `age` int(10) NOT NULL,
    `phone` bigint NOT NULL,
    `email` varchar(255) NOT NULL,
    `account` varchar(100) NOT NULL UNIQUE,
    `pwd` varchar(255) NOT NULL,
    PRIMARY KEY (`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
insert into `useraccount` values(1,'赵(dev)',23,158,'[email protected]','test001','test001');
insert into `useraccount` values(2,'钱(dev)',27,136,'[email protected]','test002','test002');
insert into `useraccount` values(3,'孙(dev)',31,159,'[email protected]','test003','test003');
insert into `useraccount` values(4,'李(dev)',35,130,'[email protected]','test004','test004');
select * from `useraccount`;

v引入mybatis

1.0 添加mybatis插件

在learn-persist的pom.xml中添加mybatis插件。

<build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generatorgroupId>
                <artifactId>mybatis-generator-maven-pluginartifactId>
                <version>${mybatis-generator.version}version>
                <dependencies>
                    <dependency>
                        <groupId> mysqlgroupId>
                        <artifactId> mysql-connector-javaartifactId>
                        <version>${mysql.version}version>
                    dependency>
                    <dependency>
                        <groupId>org.mybatis.generatorgroupId>
                        <artifactId>mybatis-generator-coreartifactId>
                        <version>${mybatis-generator.version}version>
                    dependency>
                dependencies>
                <configuration>
                    
                    <configurationFile>src/main/resources/mybatis-config/mybatis-generator.xmlconfigurationFile>
                    
                    <verbose>trueverbose>
                    
                    <overwrite>falseoverwrite>
                configuration>
            plugin>
        plugins>
    build>

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第1张图片

如上图,在learn-persist的resources下分别创建mapper和mybatis-config文件目录,并添加jdbc.properties和mybatis-generator.xml文件。

1.1 jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mytest?useSSL=false
jdbc.username=toutou
jdbc.password=demo123456

1.2 mybatis-generator.xml

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>
    <properties resource="mybatis-config/jdbc.properties"/>
    <context id="DB2Tables"    targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        commentGenerator>
        
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}">
        jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        javaTypeResolver>
        <javaModelGenerator targetPackage="learn.model.po"
                            targetProject="../learn-model/src/main/java/">
            <property name="enableSubPackages" value="false" />
            <property name="trimStrings" value="true" />
        javaModelGenerator>

        <sqlMapGenerator targetPackage="mapper"
                         targetProject="../learn-persist/src/main/resources">
            <property name="enableSubPackages" value="false" />
        sqlMapGenerator>

        <javaClientGenerator targetPackage="learn.persist"
                             targetProject="../learn-persist/src/main/java/"
                             type="XMLMAPPER">
            <property name="enableSubPackages" value="false" />
        javaClientGenerator>
        
        <table tableName="useraccount" domainObjectName="UserAccount" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">table>
    context>
generatorConfiguration>

mybatis-generator.xml更多介绍可以看这里。

1.3 版本号统一配置

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第2张图片

为了方便后续管理,将所有引入插件的版本号统一放在project(hellolearn)的pom.xml中统一控制,各子module(如learn-persist)的pom.xml中直接用 ${} 的方法使用。

例如:在hellolearn的pom.xml 属性中添加 < mybatis-generator.version>1.3.6< /mybatis-generator.version> ,在learn-persist的pom.xml中直接 < version>${mybatis-generator.version}< /version> 使用即可。

注意上面的"例如"中代码标签部分有空格是为了转义的,防止浏览器将"mybatis-generator.version"和"version"识别为html标签。

1.4 Maven Project 插件

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第3张图片

如上图,在idea右侧的maven project中就可以了对应的找到mybatis-generator的插件,如果找不到就右键maven project中的learn-persist,然后点击generate sources...。

1.5 运行mybatis generator插件

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第4张图片

如上图,点击运行mybatis generator:generator插件,会对应生成左侧标红的三个文件。

v编写controller

2.0 添加result返回实体类

package learn.model.vo;

import java.io.Serializable;

/**
 * @author toutou
 * @date by 2019/07
 */
public class Result implements Serializable {

    public int code;
    public String message;
    public T data;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public static  Result setSuccessResult(T t){
        Result r = new Result();
        r.setCode(200);
        r.setData(t);
        r.setMessage("success");
        return r;
    }

    public static  Result setErrorResult(int tempCode, String messageTemp){
        Result r = new Result();
        r.setCode(tempCode);
        r.setMessage(messageTemp);
        return r;
    }
}

2.1 添加controller

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第5张图片

package learn.web.controller;

import learn.model.vo.Result;
import learn.model.vo.UserAccountVO;
import learn.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author toutou
 * @date by 2019/07
 */
@RestController
public class UserController {

    @Autowired
    UserAccountService userAccountService;

    @GetMapping("/user/hello")
    public String helloWorld() {
        return "hello world.";
    }

    @GetMapping("/user/getuser")
    public Result getUserAccountById(@RequestParam("uid") int id){
        UserAccountVO user = userAccountService.getUserAccountById(id);
        if(user != null){
            return Result.setSuccessResult(user);
        }else{
            return Result.setErrorResult(404, "用户不存在");
        }
    }
}
注意:getUserAccountById暂时用不上,可以先不添加。

2.2 添加aplication启动类

package learn.web;

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

/**
 * Created by toutou on 2019/7
 */
@SpringBootApplication
@ComponentScan(basePackages = {"learn.*" })
@MapperScan(basePackages = {"learn.persist"})
public class Application {

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

}

 

2.3 添加aplication.properties

server.port=8300
spring.profiles.active=@env@

#mybatis
mybatis.mapper-locations = classpath:mapper/*Mapper.xml

2.4 配置启动类

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第6张图片

2.5 测试效果

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第7张图片

v编写service

3.1 添加Service

package learn.service;

import learn.model.vo.UserAccountVO;

/**
 * @author toutou
 * @date by 2019/07
 */
public interface UserAccountService {
    UserAccountVO getUserAccountById(Integer id);
}

3.2 实现Service

package learn.service.impl;

import learn.model.po.UserAccount;
import learn.model.vo.UserAccountVO;
import learn.persist.UserAccountMapper;
import learn.service.UserAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author toutou
 * @date by 2019/07
 */
@Service
public class UserAccountServiceImpl implements UserAccountService{
    @Autowired
    UserAccountMapper userMapper;

    public UserAccountVO getUserAccountById(Integer id){
        UserAccountVO accountVO = null;
        UserAccount account = userMapper.selectByPrimaryKey(id);
        if (account != null) {
            accountVO = new UserAccountVO();
            accountVO.setId(account.getId());
            accountVO.setAccount(account.getAccount());
            accountVO.setAge(account.getAge());
            accountVO.setEmail(account.getEmail());
            accountVO.setUsername(account.getUsername());
            accountVO.setPhone(account.getPhone());
        }

        return accountVO;
    }
}

v配置设置

4.1 添加application.properties

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第8张图片

4.2 添加application.dev.properties

spring.datasource.url=jdbc:mysql://localhost:3306/mytest?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
spring.datasource.username=toutou
spring.datasource.password=demo123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

4.3 添加pom.xml配置

4.3.1 hellolearn pom.xml

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第9张图片

4.3.2 learn-web pom.xml

    <build>
        <filters>
            <filter>src/main/resources/config/application-${env}.propertiesfilter>
        filters>
    build>

4.4 更新application启动类

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第10张图片

4.5 测试效果

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第11张图片

vlinux部署springboot

5.1 learn-web pom.xml中添加插件

    <build>
        <filters>
            <filter>src/main/resources/config/application-${env}.propertiesfilter>
        filters>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <mainClass>learn.web.ApplicationmainClass>
                    <classifier>execclassifier>
                configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>

5.2 hellolearn pom.xml中添加插件

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-jar-pluginartifactId>
                <version>3.0.2version>
                <configuration>
                    <excludes>
                        <exclude>**/profiles/exclude>
                        <exclude>**/mybatis-generator/exclude>
                    excludes>
                configuration>
            plugin>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                configuration>
            plugin>
        plugins>
    build>

注意:如果有用到profiles文件目录则exclude。

5.3 打包部署

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第12张图片

java -jar learn-web-0.0.1-SNAPSHOT-exec.jar --server.port=95

SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下)_第13张图片

你可能会遇到的问题:

  • Spring boot Field required a bean of type that could not be found
  • Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'xxxController' bean method
  • mybatis-generator的maven插件使用异常(mybatis-generator-maven-plugin):generate failed: Exception getting JDBC Driver
  • maven出现:Failed to execute goal on project ...: Could not resolve dependencies for project ...
  • spring boot 项目打包时报错 Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.
  • Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

v源码地址

https://github.com/toutouge/javademosecond/tree/master/hellolearn


作  者:请叫我头头哥
出  处:http://www.cnblogs.com/toutou/
关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!

你可能感兴趣的:(SpringBoot进阶教程(六十一)intellij idea project下建多个module搭建架构(下))