SpringBoot多模块项目搭建
工程结构和依赖关系一、创建工程模块二、配置依赖父项目pomdata子模块pomdao子模块pomservice子模块pomweb子模块pom项目打包
三、整合MyBatis四、写一个新增、查找的demo
工程结构和依赖关系
工程结构: springboot-multi 子模块:data(实体类) 子模块:dao(持久层,与数据库交互) 子模块:service(业务层,处理业务逻辑) 子模块:web(controller,页面交互,启动类入口) 依赖关系:
模块模块依赖data-daodataservicedata、daowebdata、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 项目结构如下![在这里插入图片描述](https://img-blog.csdnimg.cn/20200607045439534.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmxpbjc3,size_16,color_FFFFFF,t_70)
二、配置依赖
父项目需要修改打包方式为pom,build的内容需要替换,具体的配置:
父项目pom
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.3.0.RELEASE
com.wl
multimodule
0.0.1-SNAPSHOT
pom
multimodule
Demo project for Spring Boot
1.8
UTF-8
UTF-8
data
dao
service
web
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.projectlombok
lombok
true
compile
org.apache.maven.plugins
maven-compiler-plugin
${java.version}
${java.version}
org.apache.maven.plugins
maven-surefire-plugin
true
data子模块pom
4.0.0
com.wl
multimodule
0.0.1-SNAPSHOT
com.wl
data
0.0.1-SNAPSHOT
data
Demo project for Spring Boot
dao子模块pom
4.0.0
com.wl
multimodule
0.0.1-SNAPSHOT
com.wl
dao
0.0.1-SNAPSHOT
dao
Demo project for Spring Boot
com.wl
data
0.0.1-SNAPSHOT
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.2
mysql
mysql-connector-java
runtime
service子模块pom
4.0.0
com.wl
multimodule
0.0.1-SNAPSHOT
com.wl
service
0.0.1-SNAPSHOT
service
Demo project for Spring Boot
com.wl
data
0.0.1-SNAPSHOT
com.wl
dao
0.0.1-SNAPSHOT
web子模块pom
4.0.0
com.wl
multimodule
0.0.1-SNAPSHOT
com.wl
web
0.0.1-SNAPSHOT
web
Demo project for Spring Boot
com.wl
data
0.0.1-SNAPSHOT
com.wl
dao
0.0.1-SNAPSHOT
com.wl
service
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter-web
项目打包
然后package打包,第一次不需要clean,以后每次打包先clean一下。按照流程走,打包是没有问题的 到这里项目搭建和打包已经是可以了,后面是整合mybatis和一个demo ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200607045925130.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmxpbjc3,size_16,color_FFFFFF,t_70)
三、整合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内容如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200607050830715.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmxpbjc3,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200607050837264.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmxpbjc3,size_16,color_FFFFFF,t_70)
// 实体类
@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文件
id, username, gender, age
insert into mul_user (username, gender, age)
values (#{username,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR},
#{age,jdbcType=BIGINT})
select
from mul_user
where username=#{username,jdbcType=VARCHAR}
// 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![在这里插入图片描述](https://img-blog.csdnimg.cn/20200607051709191.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmxpbjc3,size_16,color_FFFFFF,t_70)
|