04.Maven聚合工程的搭建
Posted 潮汐先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了04.Maven聚合工程的搭建相关的知识,希望对你有一定的参考价值。
Maven聚合工程的搭建
前言
今天简要讲一下maven聚合工程的搭建。我们将文章01.springboot集成mybatis与jsp中所写的代码进行拆分,改造成一个聚合工程来进行演示操作
准备工作
为了演示的方便我们将之前的项目规整一下,放到同一个项目空间去,如下图
搭建步骤
按照计划,我们首先要新建一个父项目demo_parent管理依赖,然后根据之前的项目,我们拆分出demo_commons、demo_model、demo_web三个Module
demo_commons
:主要存放实体类相关代码和一些工具类
demo_model
:主要存放业务相关代码,比如Dao、Service以及mapper等
demo_web
:这个就和视图有关了,主要存放Controller以及jsp页面
demo_parent
由于我们之前我们已经新建了一个Empty Project作为一个工作空间,所以我们这里的父项目demo_parent
其实是一个Module
父项目主要用来管理依赖,所以除了pom.xml文件,其余的一律删除,具体的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.christy</groupId>
<artifactId>demo_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--properties标签 自定义属性-->
<properties>
<mybatis.springboot.version>2.1.4</mybatis.springboot.version>
<mysql.version>5.1.40</mysql.version>
<druid.version>1.2.5</druid.version>
<jstl.version>1.2</jstl.version>
<java.version>1.8</java.version>
</properties>
<!--继承springboot父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<!--维护依赖版本号 注意:并不会导入依赖-->
<dependencyManagement>
<dependencies>
<!--mybatis-springboot-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.springboot.version}</version>
</dependency>
<!--引入数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!--引入mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
demo_commons
1.新建module
父项目创建好以后,我们新建module,填写信息如下
父项目记得选择demo_parent,将demo_commons放在父项目的目录下面,最后点击finish即可
2.新建User.java
上面们说了demo_commons作为公共模块主要放一些工具类和实体类,我们这里就只有一个实体类User.java
,代码如下:
package com.christy.entity;
/**
* @Author Christy
* @Date 2021/5/20 11:42
**/
public class User {
private Integer id;
private String name;
private Integer age;
private Double salary;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\\'' +
", age=" + age +
", salary=" + salary +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public User() {
}
public User(Integer id, String name, Integer age, Double salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
}
demo_model
1.新建module
2.修改pom.xml
上面我们说过demo_module主要放业务相关的代码,诸如Dao,Service和Mapper等,并且依赖于demo_commons中的实体类,所以我们的model模块的依赖应该像下面这样
<?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">
<parent>
<artifactId>demo_parent</artifactId>
<groupId>org.christy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.christy</groupId>
<artifactId>demo_model</artifactId>
<dependencies>
<!--引入commons-->
<dependency>
<groupId>com.christy</groupId>
<artifactId>demo_commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--引入web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入mybatis和springboot整合-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--引入数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!--引入mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
3.新建Dao和Service(impl)
这里我们直接将springboot_mybatis_jsp项目中的代码拿过来用就行了
package com.christy.dao;
import com.christy.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @Author Christy
* @Date 2021/5/13 9:27
**/
@Mapper
public interface UserDao {
/**
* 查询所有
* @author Christy
* @date 2021/5/13 9:38
* @param
* @return java.util.List<com.christy.model.entity.User>
*/
List<User> findAll();
/**
* 添加用户信息
* @author Christy
* @date 2021/5/13 9:38
* @param user
* @return
*/
void save(User user);
/**
* 根据id查询用户
* @author Christy
* @date 2021/5/13 9:39
* @param id
* @return com.christy.model.entity.User
*/
User findById(Integer id);
/**
* 修改用户信息
* @author Christy
* @date 2021/5/13 9:39
* @param user
* @return void
*/
void update(User user);
/**
* 根据id删除用户
* @author Christy
* @date 2021/5/13 9:39
* @param id
* @return void
*/
void deleteById(Integer id);
}
package com.christy.service;
import com.christy.entity.User;
import java.util.List;
/**
* @Author Christy
* @Date 2021/5/13 9:40
**/
public interface UserService {
/**
* 查询所有用户
* @author Christy
* @date 2021/5/13 9:41
* @param
* @return java.util.List<com.christy.model.entity.User>
*/
List<User> findAll();
/**
* 保存用户信息
* @author Christy
* @date 2021/5/13 9:42
* @param user
* @return void
*/
void save(User user);
/**
* 根据id查询用户
* @author Christy
* @date 2021/5/13 9:42
* @param id
* @return com.christy.model.entity.User
*/
User findById(Integer id);
/**
* 修改用户信息
* @author Christy
* @date 2021/5/13 9:42
* @param user
* @return void
*/
void update(User user);
/**
* 根据id删除用户
* @author Christy
* @date 2021/5/13 9:42
* @param id
* @return void
*/
void deleteById(Integer id);
}
package com.christy.service.impl;
import com.christy.dao.UserDao;
import com.christy.entity.User;
import com.christy.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @Component注解 在工厂中创建对象
* @Controller @Service @Repository都继承自@Component注解,
* 该三个注解将三层Controller,Service,Dao区别开来,其余地方如需要创建对象需要用Component
*
* @Transactional
* 修饰范围:
* 类:代表类中所有方法加入事务
* 方法: 代表当前方法加入事务
* propagation: 事务的传播属性 是指发生在多个业务层之间的事务传递
* 默认值:REQUIRED 需要事务,如果外部存在事务则融入事务,没有则开启事务
* REQUIRED_NEW:需要新事物 外部存在事务则事务挂起,自己创建新的事务 内部事务运行结束外部事物恢复(该传播属性常用于记录业务操作日志)
* SUPPORTS:支持事务,外部存在事务则融入事务,没有也不开启
* 那么问题来了,查询方法上有必要加@Transactional(propagation = Propagation.SUPPORTS)?
* 答:有必要。
* 举例:A.save(){ B.find*(){ C.update() }},这是个典型的A调用B,B调用C。对于A和C都是需要事务的,事务的传播属性都是默认值REQUIRED,
* 如果此时B没有加事务,则A的事务无法传递到C,此时C的传播属性因为是默认的REQUIRED,所以C会开启一个新的事务。这时A和C分别处于不同的事务中
*
* @author Christy
* @date 2021/5/13 10:04
**/
@Service // 通知springboot扫描该注解 用来在工厂中创建对象
@Transactional // 控制事务 修饰范围: 类 方法
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
@Transactional(propagation = Propagation.SUPPORTS) // propagation: 事务的传播属性
public List<User> findAll() {
return userDao.findAll();
}
@Override
public void save(User user) {
userDao.save(user);
}
@Override
public User findById(Integer id) {
return userDao.findById(id);
}
@Override
public void update(User user) {
userDao.update(user);
}
@Override
public void deleteById(Integer id) {
userDao.deleteById(id);
}
}
4.新建mapper
<?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.christy.dao.UserDao">
<!--findAll-->
<select id="findAll" resultType="com.christy.entity.User">
select id,name,age,salary from t_user
</select>
<!--save 采用数据库自动生成(useGeneratedKeys="true")并返回主键的值(keyProperty保存主键的属性名)-->
<insert id="save" parameterType="com.christy.entity.User" useGeneratedKeys="true" keyProperty="id" >
insert into t_user values(#{id},#{name},#{age},#{salary})
</insert>
<!--findById-->
<select id="findById" parameterType="Integer" resultType="com.christy.entity.User">
select id,name,age,salary from t_user where id = #{id}
</select>
<!--update-->
<update id="update" parameterType="com.christy.entity.User">
update t_user
set
name=#{name},
age=#{age},
salary=#{salary}
where id = #{id}
</update>
<!--deleteById-->
<select id="deleteById" parameterType="Integer" >
delete from t_user where id = #{id}
</select>
</mapper>
上面的工作做完之后就是下面这个熊样子,不报错就可以了
demo_web
1.新建module
2.新建application.properties
server.port=8899
# 开启jso的自动编译
server.servlet.jsp.init-parameters.development=true
# 配置视图解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
# 编写mybatis相关配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/christy?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
# 创建这个目录一定要使用 "/"
mybatis.mapper-locations=classpath:com/christy/mapper/*.xml
# 指定别名
mybatis.type-aliases-package=com.christy.entity
# 开启日志 日志级别: off > error > warn > info > debug > all 级别越高日志越少
# springboot默认日志级别info
logging.level.com.christy=debug
3.修改pom.xml
demo_web同样要依赖demo_commons模块,除此之外该需要通过该模块访问jsp页面,所以要加上jstl
和tomcat
解析jsp的jar包jasper,完整的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">
<parent>
<artifactId>demo_parent</artifactId>
<groupId>com.christy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>demo_web</artifactId>
<dependencies>
<!--依赖model-->
<dependency>
<groupId>com.christy</groupId>
<artifactId>demo_model</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--tomcat解析jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
</dependencies>
</project>
4.新建Controller
我们直接将springboot_mybatis_jsp项目中的UserController拿过来用
<以上是关于04.Maven聚合工程的搭建的主要内容,如果未能解决你的问题,请参考以下文章