spring boot 2.0多模块搭建

开发工具用idea,用maven管理jar:

1.创建父级模块:file-new-project-maven-next,直接上图,项目名字包路径可修改,打包方式pom,具体配置最后贴上

2.创建子模块,右键父模块new-Module,(web模块与其他模块有区别),先web模块创建new-Module-spring initializr-next

2.1这里可以选适合自己,也可以不选,自己在pom.xml里面配置

3.其他子模块的创建,就比较简单的,两种方式都可以:

3.1继续选spring initializr,但不勾选web和sql

4.其他模块我就不一一创建了,跟上面3一致,都创建好以后项目结构如下

5.开始整理项目结构,删除多余的文件,带mvn的都删掉,还有个主模块的src,建红色标记,其他模块同理

6.各个模块的pom.xml,依赖关系,

父级只是管理整个模块,统一版本号,提供公共jar,打包方式pom

web控制层依赖service,domain,utils,连接前端和后端主要模块,数据库配置我也放这里,打包方式jar,也可以war

domain实体类模块,不依赖谁,可继承父模块,打包方式jar

service服务层依赖dao(mapper),domain,utils,打包方式jar

dao(mapper)依赖domain,打包方式jar

utils工具类模块,暂不依赖谁,可继承父模块,打包方式jar

6.1父级模块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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.demo</groupId>
    <artifactId>muchmodule</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--打包方式pom-->
    <packaging>pom</packaging>

    <!--管理的所有模块-->
    <modules>
        <module>service</module>
        <module>domain</module>
        <module>utils</module>
        <module>dao</module>
        <module>web</module>
    </modules>

    <!--指定项目的spring boot的版本-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <!--统一配置所需jar的版本,方便管理-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <!--默认关掉单元测试 -->
        <skipTests>true</skipTests>
        <pagehelper.version>1.2.5</pagehelper.version>
        <druid.version>1.1.9</druid.version>
        <mysql-version>5.1.46</mysql-version>
        <commons-lang3-version>3.4</commons-lang3-version>
        <commons-pool2-version>2.5.0</commons-pool2-version>
        <fastjson-version>1.2.47</fastjson-version>
    </properties>

    <!--只是声明依赖方便统一版本号,并不实现引入,因此子项目需要显示的声明需要用的依赖,子类不用加version除非插件-->
    <dependencyManagement>
        <dependencies>

        <!--管理模块版本,这样其他模块引入就不用加版本号-->
            <dependency>
				<groupId>com.demo</groupId>
				<artifactId>utils</artifactId>
				<version>${project.version}</version>
			</dependency>
			<dependency>
				<groupId>com.demo</groupId>
				<artifactId>domain</artifactId>
				<version>${project.version}</version>
			</dependency>
			<dependency>
			<groupId>com.demo</groupId>
			<artifactId>service</artifactId>
				<version>${project.version}</version>
			</dependency>

			<dependency>
				<groupId>com.demo</groupId>
				<artifactId>dao</artifactId>
				<version>${project.version}</version>
			</dependency>

            <!-- 分页插件pagehelper自动依赖mybatis -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>${pagehelper.version}</version>
            </dependency>
            <!-- alibaba的druid数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3-version}</version>
            </dependency>
            <!--spring2.0集成redis所需common-pool2-->
            <!-- 必须加上,jedis依赖此  -->
            <!-- spring boot 2.0 的操作手册有标注 大家可以去看看 地址是:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle/-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
                <version>${commons-pool2-version}</version>
            </dependency>

            <!-- 将作为Redis对象序列化器 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson-version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!--指定项目中公有的依赖,所有的模块不管是否调用都自动添加-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

6.2web模块的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.demo</groupId>
	<artifactId>web</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>web</name>
	<description>Demo project for Spring Boot</description>

	<!--继承父模块,需要注意的是,这里要指定父模块pom.xml的相对路径-->
	<parent>
		<groupId>com.demo</groupId>
		<artifactId>muchmodule</artifactId>
		<version>1.0-SNAPSHOT</version>
		<relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
	</parent>


	<dependencies>
		<!--其他模块的依赖-->
		<dependency>
			<groupId>com.demo</groupId>
			<artifactId>utils</artifactId>
		</dependency>
		<dependency>
			<groupId>com.demo</groupId>
			<artifactId>domain</artifactId>
		</dependency>
		<dependency>
			<groupId>com.demo</groupId>
			<artifactId>service</artifactId>
		</dependency>
		<!--其他jar-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-joda</artifactId>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.module</groupId>
			<artifactId>jackson-module-parameter-names</artifactId>
		</dependency>
		<!-- 分页插件pagehelper自动依赖mybatis ,service已引入-->
		<!--	<dependency>
                    <groupId>com.github.pagehelper</groupId>
                    <artifactId>pagehelper-spring-boot-starter</artifactId>
                </dependency>-->
		<!-- alibaba的druid数据库连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<!-- 没有该配置,devtools不生效 -->
					<fork>true</fork>
					<!-- 指定该Main Class为全局的唯一入口 -->
					<mainClass>com.demo.WebApplication</mainClass>
				</configuration>
				<!--	<executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>可以把依赖的包都打包到生成的Jar包中
                            </goals>
                        </execution>
                    </executions>-->
			</plugin>
			<!-- 如果打包报没有web.xml,加上下面的插件 -->
			<!--<plugin>
				<artifactId>maven-war-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>
				<dependencies>
					<!-- 在pom中可以直接配置依赖的数据库 generatorConfig.xml就不需要再配置数据库的jar了 -->
					<dependency>
						<groupId>mysql</groupId>
						<artifactId>mysql-connector-java</artifactId>
						<version>${mysql-version}</version>
					</dependency>
				</dependencies>
			</plugin>
		</plugins>
	</build>

</project>

6.3domain

<?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>
    <groupId>com.demo</groupId>
    <artifactId>domain</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>domain</name>
    <description>Demo project for Spring Boot</description>

    <!--继承父模块,需要注意的是,这里要指定父模块pom.xml的相对路径-->
    <parent>
        <groupId>com.demo</groupId>
        <artifactId>muchmodule</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    </parent>

</project>

6.4utils

<?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>
    <groupId>com.demo</groupId>
    <artifactId>utils</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>utils</name>
    <description>Demo project for Spring Boot</description>

    <!--继承父模块,需要注意的是,这里要指定父模块pom.xml的相对路径-->
    <parent>
        <groupId>com.demo</groupId>
        <artifactId>muchmodule</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    </parent>

</project>

6.5dao

<?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>
    <groupId>com.demo</groupId>
    <artifactId>dao</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>dao</name>
    <description>Demo project for Spring Boot</description>

    <!--继承父模块,需要注意的是,这里要指定父模块pom.xml的相对路径-->
    <parent>
        <groupId>com.demo</groupId>
        <artifactId>muchmodule</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
    <!--其他模块的依赖-->
    <dependency>
        <groupId>com.demo</groupId>
        <artifactId>domain</artifactId>
    </dependency>
    </dependencies>
</project>

6.6service

<?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>
    <groupId>com.demo</groupId>
    <artifactId>service</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>service</name>
    <description>Demo project for Spring Boot</description>

    <!--继承父模块,需要注意的是,这里要指定父模块pom.xml的相对路径-->
    <parent>
        <groupId>com.demo</groupId>
        <artifactId>muchmodule</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <!--其他模块的依赖-->
        <dependency>
            <groupId>com.demo</groupId>
            <artifactId>domain</artifactId>
        </dependency>
        <dependency>
            <groupId>com.demo</groupId>
            <artifactId>dao</artifactId>
        </dependency>
        <dependency>
            <groupId>com.demo</groupId>
            <artifactId>utils</artifactId>
        </dependency>
        <!-- 分页插件pagehelper自动依赖mybatis -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

</project>

6.6反向生成工具,

<?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="D:\apache-maven-3.5.3\repository\mysql\mysql-connector-java\5.1.35\mysql-connector-java-5.1.35.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/test"
                        userId="root" password="123456">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.demo.domain" targetProject="../domain/src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapping" targetProject="../dao/src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.demo.dao" targetProject="../dao/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>

6.7mysql创表语句:数据库是test

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(16) DEFAULT NULL,
  `password` varchar(10) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

6.8自动生成

7.1.创建测试,先在utils建个结果集封装

package com.demo.utils;

import java.io.Serializable;

/**
 * Created by Administrator on 2018/6/21.
 */
public class R<T> implements Serializable {

    private static final int OK = 0;
    private static final int FAIL = 1;
    private static final int UNAUTHORIZED = 2;
    private static final long serialVersionUID = -6373402751616512206L;

    private T data; //服务端数据
    private int status = OK; //状态码
    private String msg = ""; //描述信息

    public static R isOk() {
        return new R();
    }

    public static R isFail() {
        return new R().status(FAIL);
    }

    public static R isFail(Throwable e) {
        return isFail().msg(e);
    }

    public R msg(Throwable e) {
        this.setMsg(e.toString());
        return this;
    }

    public R data(T data) {
        this.setData(data);
        return this;
    }

    public R status(int status) {
        this.setStatus(status);
        return this;
    }
    //Constructors
    public R() {
    }

    public T getData() {
        return data;
    }

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

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

7.2在mapper.xml和mapper,自己多加了个方式

  <select id="selectAllUser" resultMap="BaseResultMap">
    select <include refid="Base_Column_List" /> from user
  </select>
   //这个方式我自己加的
    List<User> selectAllUser();

7.3service服务层

package com.demo.service;


import com.demo.domain.User;
import com.demo.utils.R;
import com.github.pagehelper.PageInfo;


/**
 * Created by Administrator on 2018/6/18.
 */
public interface UserService {
    R<Integer> addUser(User user);

    PageInfo<User> findAllUser(int pageNum, int pageSize);
}

7.31实现类

package com.demo.service.impl;

import com.demo.dao.UserMapper;
import com.demo.domain.User;
import com.demo.service.UserService;
import com.demo.utils.R;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

/**
 * Created by Administrator on 2018/6/18.
 */
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;


    @Override
    public R<Integer> addUser(User user) {
         R<Integer> result = new R<Integer>();
        Integer insertNum = userMapper.insertSelective(user);
        if(insertNum>0){
            result.setStatus(0);
        }else{
            result.setStatus(1);
        }
        result.setData(insertNum);
        return result;
    }

    @Override
    public PageInfo<User> findAllUser(int pageNum, int pageSize) {
        //将参数传给这个方法就可以实现物理分页了,非常简单。
        PageHelper.startPage(pageNum, pageSize);
        List<User> user = userMapper.selectAllUser();
        PageInfo result = new PageInfo(user);
        return result;
    }
}

7.4web控制层

package com.demo.controller;


import com.demo.domain.User;
import com.demo.service.UserService;
import com.demo.utils.R;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by Administrator on 2018/6/18.
 */
@RequestMapping("/user")
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping(value = "/add", produces = {"application/json;charset=UTF-8"})
    public R<Integer> addUser(User user){
        user= new User();
        user.setPhone("133443545");
        user.setPassword("123443");
        user.setUserName("用户名");
        return userService.addUser(user);
    }

    @GetMapping("/all")
    public Object findAllUser(@RequestParam(name = "pageNum", required = false, defaultValue = "1") int pageNum,
            @RequestParam(name = "pageSize", required = false, defaultValue = "10") int pageSize){
        return userService.findAllUser(pageNum,pageSize);
    }

}

7.5还少了个配置,我用的ym方式

server:
  port: 8080


spring:
    datasource:
        name: mysql_test
        type: com.alibaba.druid.pool.DruidDataSource
        #druid相关配置
        druid:
          #监控统计拦截的filters
          filters: stat
          driver-class-name: com.mysql.jdbc.Driver
          #基本属性
          url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
          username: root
          password: 123456
          #配置初始化大小/最小/最大
          initial-size: 1
          min-idle: 1
          max-active: 20
          #获取连接等待超时时间
          max-wait: 60000
          #间隔多久进行一次检测,检测需要关闭的空闲连接
          time-between-eviction-runs-millis: 60000
          #一个连接在池中最小生存的时间
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 'x'
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
          pool-prepared-statements: false
          max-pool-prepared-statement-per-connection-size: 20

mybatis:
  mapper-locations: classpath:mapping/*.xml
  type-aliases-package: com.demo.domain

#pagehelper
pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql
    returnPageInfo: check


7.6主启动类,把mapper加进去

package com.demo;

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

@SpringBootApplication
@MapperScan("com.demo.dao")//将项目中对应的mapper类的路径加进来就可以了
public class WebApplication {

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

8直接启动,由于直接跳过了test,多种启动方式,也可以用命令启动,个人喜欢debug模式

8.1出现以下就表示启动成功,端口是默认是8080

8.2直接在浏览器输入:

1,新增user接口:http://localhost:8080/user/add

2.查询user接口:http://localhost:8080/user/all

猜你喜欢

转载自blog.csdn.net/anyeoo/article/details/80862159
今日推荐