SpringBoot多模塊項目搭建(Maven管理、整合MyBatis,搭建、依賴、打包)

工程結構和依賴關係

工程結構:
springboot-multi
子模塊:data(實體類)
子模塊:dao(持久層,與數據庫交互)
子模塊:service(業務層,處理業務邏輯)
子模塊:web(controller,頁面交互,啓動類入口)
依賴關係:

模塊 模塊依賴
data -
dao data
service data、dao
web data、dao、service

一、創建工程模塊

File → new → project → Spring Initializr →Next進入下一頁面
在這裏插入圖片描述填寫Group和Artifact →Next進入下一頁面
在這裏插入圖片描述Next進入下一頁面
在這裏插入圖片描述選擇項目名稱和位置 →Finish
在這裏插入圖片描述工程結構
在這裏插入圖片描述因爲父項目是聚合體,僅僅負責聚合其他模塊,刪除父項目的src目錄
類似父項目的創建過程,創建出子模塊
在父工程右鍵 → new → Module → Spring Initaializr → Next
在這裏插入圖片描述依賴選擇 →Next
在這裏插入圖片描述確定項目名稱和位置 →Finish
重複以上創建流程,創建出dao、service、web子模塊
data和service不需額外引入依賴,dao和web根據實際需求引入必要依賴,比如我這dao引入Mysql Mybatis依賴,web引入Web依賴
在這裏插入圖片描述
在這裏插入圖片描述接下來,刪除每個子模塊中.mvn、.gitignore、HELP.md、mvnw、mvnw.cmd,
除了web模塊的其他模塊的Applicatin啓動類、sources下的application.properties
項目結構如下在這裏插入圖片描述

二、配置依賴

父項目需要修改打包方式爲pom,build的內容需要替換,具體的配置:

父項目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 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.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.wl</groupId>
    <artifactId>multimodule</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

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

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <modules>
        <module>data</module>
        <module>dao</module>
        <module>service</module>
        <module>web</module>
    </modules>

    <!--父項目配置的依賴,子模塊繼承依賴-->
    <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <defaultGoal>compile</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>    <!--默認關掉單元測試 -->
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

data子模塊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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.wl</groupId>
        <artifactId>multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.wl</groupId>
    <artifactId>data</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>data</name>
    <description>Demo project for Spring Boot</description>

</project>

dao子模塊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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.wl</groupId>
        <artifactId>multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.wl</groupId>
    <artifactId>dao</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dao</name>
    <description>Demo project for Spring Boot</description>

    <dependencies>
        <dependency>
            <groupId>com.wl</groupId>
            <artifactId>data</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>

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

</project>

service子模塊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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.wl</groupId>
        <artifactId>multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.wl</groupId>
    <artifactId>service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service</name>
    <description>Demo project for Spring Boot</description>

    <dependencies>
        <dependency>
            <groupId>com.wl</groupId>
            <artifactId>data</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.wl</groupId>
            <artifactId>dao</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

web子模塊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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.wl</groupId>
        <artifactId>multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.wl</groupId>
    <artifactId>web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>web</name>
    <description>Demo project for Spring Boot</description>

    <dependencies>
        <dependency>
            <groupId>com.wl</groupId>
            <artifactId>data</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.wl</groupId>
            <artifactId>dao</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.wl</groupId>
            <artifactId>service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>

項目打包

然後package打包,第一次不需要clean,以後每次打包先clean一下。按照流程走,打包是沒有問題的
到這裏項目搭建和打包已經是可以了,後面是整合mybatis和一個demo
在這裏插入圖片描述

三、整合MyBatis

web下的application文件填寫配置信息
在這裏插入圖片描述`server:
port: 8080

db:
hikari:
jdbcUrl: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&serverTimezone=UTC
username: root
password: root
driverClassName: com.mysql.jdbc.Driver
connectionTestQuery: SELECT 1
connectionTimeout: 30000
idleTimeout: 600000
maxLifetime: 1800000
maximumPoolSize: 20
minimumIdle: 1
`
dao增加MybatisConfig
在這裏插入圖片描述配置類@Primary可以不加,我是想接下來配置多數據源,所以這樣寫的

@Configuration
@MapperScan(basePackages = {"com.wl.dao.mapper"})
public class MybatisConfig {

    @Bean("hikariDataSource")
    @Primary
    @ConfigurationProperties(prefix = "db.hikari")
    public DataSource getHikariDataSource() {
        return new HikariDataSource();
    }

    @Bean("hikariTransactionManager")
    @Primary
    public DataSourceTransactionManager getDataSourceTransactionManager() {
        return new DataSourceTransactionManager(getHikariDataSource());
    }

    @Bean("hikariSqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("hikariDataSource") DataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/mapper/**/*.xml"));
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject();
        return sqlSessionFactory;
    }

}

四、寫一個新增、查找的demo

web、service、dao、data內容如下:
在這裏插入圖片描述在這裏插入圖片描述

// 實體類
@Data
public class User {
    private Integer id;
    private String username;
    private String gender;
    private Integer age;
}
// mapper文件
public interface UserMapper {
    int insert(User user);

    User getByName(String name);
}
// 映射的xml文件
<?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.wl.dao.mapper.user.UserMapper">
  <resultMap id="BaseResultMap" type="com.wl.data.user.User">
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="username" jdbcType="VARCHAR" property="username" />
    <result column="gender" jdbcType="VARCHAR" property="gender" />
    <result column="age" jdbcType="BIGINT" property="age" />
  </resultMap>
  <sql id="Base_Column_List">
    id, username, gender, age
  </sql>

  <!--插入-->
  <insert id="insert" parameterType="com.wl.data.user.User">
    insert into mul_user (username, gender, age)
    values (#{username,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR},
      #{age,jdbcType=BIGINT})
  </insert>

  <select id="getByName" parameterType="java.lang.String" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List"></include>
    from mul_user
    where username=#{username,jdbcType=VARCHAR}
  </select>
</mapper>
// service
public interface UserService {
    String insert(User user);

    User getByName(String username);
}
// service實現類
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public String insert(User user) {
        int result = userMapper.insert(user);
        if (result == 1) {
            return "success";
        }
        return "fail";
    }

    @Override
    public User getByName(String username) {
        return userMapper.getByName(username);
    }
}
@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/user/addUser")
    @ResponseBody
    public String addUser(User user) {
        return userService.insert(user);
    }

    @GetMapping("/user/getUserByName")
    @ResponseBody
    public User getUserByName(String username) {
        return userService.getByName(username);
    }

}

數據庫建表
在這裏插入圖片描述啓動服務,新增user http://localhost:8080/user/addUser + 插入數據(應該用post,爲方便瀏覽器測試,新增也是使用的GetMapping,get請求)
在這裏插入圖片描述表中插入了數據
在這裏插入圖片描述調用查詢 http://localhost:8080/user/getUserByName?username=doudou在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章