springBoot多模块编程

创建父工程

  • 打开软件idea,新建项目->左侧选择Spring Initializr 后选择jdk的版本。
  • 配置项目信息,注意Type要选择Maven POM,选择project的话,它会帮你生成整个完整的工程结构;选择pom的话,它只会在工程目录下生成pom.xml,而没有src等等结构。

19

  • 不选择依赖,直接下一步完成

创建子模块

  • 在项目上右键>New>Module, 配置Group要跟最外层的一样,Artifact可以自己改,前面创建跟之前的一样,Type选择Maven Project.

20

  • 在项目本身下创建新的文件夹来存储

21

  • 按照上面得流程分别创建controller service dao entity 四个子模块

22

修改子模块pom.xml

  • 修改entity的pom文件,添加继承父项目

        <parent>
            <groupId>indi.xzw</groupId>
            <artifactId>modules</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
  • 标签中的spring-boot-starter和spring-boot-starter-test依赖删除(移除整个dependency)

  • 去掉里面的标签

父模块声明子模块

修改父级packaging类型,并父pom.xml 里面声明该父工程包含的子模块

<!--  packaging 父级项目的类型是pom  -->
<packaging>pom</packaging>

<!-- 声明多个子模块 -->
<modules>
    <module>controller</module>
    <module>dao</module>
    <module>service</module>
    <module>entity</module>
</modules>

entity

在entity 目录下新建Admin实体类

package indi.xzw.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@TableName("xzw_admin")
@Data
public class Admin {
    /**
     * 主键属性  @TableId
     *
     * value 该属性对应的数据库表中的字段名
     * type 主键自增的类型 AUTO 代表自动递增
     */
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
    /**
     * 非主键属性  @TableField
     *  @TableField("username")  参数为该属性对应的数据库表中的字段名
     *
     */
    private String username;

    private String password;

    private String salt;
}

在pom.xml 中添加依赖

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1.tmp</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
        </dependency>

dao

修改pom.xml,因为dao层用到entity,添加依赖

<!-- 在dao中引用entity
可以在dao的代码中直接导入entity中的类和方法
-->
<dependency>
    <groupId>indi.xzw</groupId>
    <artifactId>entity</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

修改父pom.xml,在父pom中添加这个依赖是因为多个子模块都用到它

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.1.tmp</version>
</dependency>
<!--如果配置依赖在父项目的 dependencyManagement 有-->
<!--数据源-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>
<!-- 可以不写版本号 版本号继承父项目中的-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

新建AdminDao接口

package indi.xzw.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import indi.xzw.entity.Admin;

public interface AdminDao extends BaseMapper<Admin> {
}

service

pom中添加dao依赖

        <!--service中需要引入 dao模块-->
        <dependency>
            <groupId>indi.xzw</groupId>
            <artifactId>dao</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

新建AdminService实体类

package indi.xzw.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import indi.xzw.dao.AdminDao;
import indi.xzw.entity.Admin;

@Service
public class AdminService {
    @Autowired
    private AdminDao adminDao;

    public List<Admin> adminList(){
        return adminDao.selectList(null);
    }
}

controller

pom中添加service依赖 以及web依赖

        <!-- controller中需要引入service-->
        <dependency>
            <groupId>indi.xzw</groupId>
            <artifactId>service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
     
        <!--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>

修改启动类代码

package indi.xzw.controller;

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

@MapperScan("indi.xzw.dao")
@SpringBootApplication
public class ControllerApplication {

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

}

新建实体类AdminController

package indi.xzw.controller;
import indi.xzw.entity.Admin;
import indi.xzw.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class AdminController {
    @Autowired
    private AdminService adminService;

    @RequestMapping("adminList")
    public List<Admin> adminList(){
        return adminService.adminList();
    }
}

application配置文件配置

修改controller下的application

mybatis-plus.mapper-locations=classpath:mapper/*Mapper.xml
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.99.100:3306/xzw
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

创建数据库

CREATE TABLE `xzw_admin` (
  `id` int(32) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `passWord` varchar(50) NOT NULL,
  `salt` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

运行

23

运行报错

错误:Consider defining a bean of type 'indi.xzw.service.AdminService' in your configuration.

自动找不到service包只能手动添加

在ControllerApplication中添加@ComponentScan(basePackages = "indi.xzw.service")

注:同时还要加上@ComponentScan(basePackages = "indi.xzw.controller"),不然都找不到那个url路径

编写测试类

修改文件ControllerApplicationTests

package indi.xzw.controller;

import indi.xzw.entity.Admin;
import indi.xzw.service.AdminService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ControllerApplicationTests {
    @Autowired
    private AdminService adminService;

    @Test
    void test1() {
        for (Admin admin: adminService.adminList()){
            System.out.println(admin);
        }
    }

}

24

打包运行

点击modules -》 install ,在每个模块的target目录下都会生成一个jar包

25

我们直接运行java -jar controller-0.0.1-SNAPSHOT.jar 即可,不需要其他jar包

26

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×