作者:小傅哥
博客:https://bugstack.cn
沉淀、分享、成长,让自己和他人都能有所收获!
在实际的业务开发中按照不同的场景需要,会有不同的业务架构也就同时会有不同的技术框架来支撑。那么这个专题想把一些常用的框架整理下,方便平时使用的同时也做一些技术沉淀。那么本章节会先搭建一个比较适合个人项目或者一些小公司开发项目的单体架构模型。服务功能展示页面如下;
整体的工程模型采用DDD四层架构,相对于MVC模式来讲。嗯!相当于家里三居换四居了!
itstack-demo-frame-ssm
└── src
├── main
│ ├── java
│ │ └── org.itstack.demo
│ │ ├── application
│ │ │ └── UserService.java
│ │ ├── domain
│ │ │ ├── model
│ │ │ │ ├── aggregates
│ │ │ │ │ └── UserInfoCollect.java
│ │ │ │ ├── req
│ │ │ │ │ └── UserReq.java
│ │ │ │ └── vo
│ │ │ │ └── UserInfo.java
│ │ │ ├── repository
│ │ │ │ └── IUserRepository.java
│ │ │ └── service
│ │ │ └── UserServiceImpl.java
│ │ ├── infrastructure
│ │ │ ├── common
│ │ │ │ ├── EasyResult.java
│ │ │ │ └── PageRequest.java
│ │ │ ├── dao
│ │ │ │ └── IUserDao.java
│ │ │ ├── po
│ │ │ │ └── User.java
│ │ │ └── repository
│ │ │ └── UserRepository.java
│ │ └── interfaces
│ │ └── UserController.java
│ ├── resources
│ │ ├── mapper
│ │ ├── props
│ │ ├── spring
│ │ ├── logback.xml
│ │ ├── mybatis-config.xml
│ │ └── spring-config.xml
│ └── webapp
│ ├── page
│ ├── res
│ ├── WEB-INF
│ ├── index.html
│ └── res_layui.html
└── test
└── java
└── org.itstack.demo.test
└── ApiTest.java
应用层是比较薄的一层,不做具体逻辑开发。本工程里只包括服务的定义,具体逻辑有领域层实现。如果需要扩展可以做一些应用服务编排。
application/UserService.java & 定义接口
public interface UserService {
UserInfoCollect queryUserInfoList(UserReq req);
}
领域层是整个工程的核心服务层,这里负责处理具体的核心功能,完成领域服务。domain下可以有多个领域,每个领域里包括;聚合、请求对象、业务对象、仓储、服务。
domain/model/aggregates/UserInfoCollect.java & 定义聚合查询结果
public class UserInfoCollect {
private Long count;
private List userInfoList;
public UserInfoCollect() {
}
public UserInfoCollect(Long count, List userInfoList) {
this.count = count;
this.userInfoList = userInfoList;
}
public Long getCount() {
return count;
}
public void setCount(Long count) {
this.count = count;
}
public List getUserInfoList() {
return userInfoList;
}
public void setUserInfoList(List userInfoList) {
this.userInfoList = userInfoList;
}
}
domain/repository/IUserRepository.java & 定义仓储服务
public interface IUserRepository {
UserInfoCollect queryUserInfoList(UserReq req);
}
domain/service/UserServiceImpl.java & 对业务层功能进行实现
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource(name = "userRepository")
private IUserRepository userRepository;
@Override
public UserInfoCollect queryUserInfoList(UserReq req) {
return userRepository.queryUserInfoList(req);
}
}
infrastructure/dao/IUserDao.java & 数据库操作
public interface IUserDao {
List queryUserInfoList(UserReq req);
Long queryUserInfoCount(UserReq req);
}
infrastructure/repository/UserRepository.java & 仓储功能实现如果有redis可以进行包装使用
@Repository("userRepository")
public class UserRepository implements IUserRepository {
@Resource
private IUserDao userDao;
@Override
public UserInfoCollect queryUserInfoList(UserReq req) {
Long count = userDao.queryUserInfoCount(req);
List userList = userDao.queryUserInfoList(req);
List userInfoList = new ArrayList<>();
userList.forEach(user -> {
UserInfo userInfo = new UserInfo();
userInfo.setUserId(user.getId());
userInfo.setName(user.getName());
userInfo.setAge(user.getAge());
userInfo.setAddress(user.getAddress());
userInfo.setEntryTime(user.getEntryTime());
userInfo.setStatus(user.getStatus());
userInfoList.add(userInfo);
});
return new UserInfoCollect(count, userInfoList);
}
}
interfaces/UserController.java & 提供接口服务
@Controller
@RequestMapping("/api/user/")
public class UserController {
private Logger logger = LoggerFactory.getLogger(UserController.class);
@Resource
private UserService userService;
@RequestMapping(path = "queryUserInfoList", method = RequestMethod.GET)
@ResponseBody
public EasyResult queryUserInfoList(String json, String page, String limit) {
try {
logger.info("查询用户信息列表开始。json:{}", json);
UserReq req = JSON.parseObject(json, UserReq.class);
if (null == req) req = new UserReq();
req.setPage(page, limit);
UserInfoCollect userInfoCollect = userService.queryUserInfoList(req);
logger.info("查询用户信息列表完成。userInfoCollect:{}", JSON.toJSONString(userInfoCollect));
return EasyResult.buildEasyResultSuccess(userInfoCollect.getCount(), userInfoCollect.getUserInfoList());
} catch (Exception e) {
logger.error("查询用户信息列表失败。json:{}", json, e);
return EasyResult.buildEasyResultError(e);
}
}
}
这里包括了Spring、SpringMvc、mybatis、以及日志信息的配置;
mapper/User_Mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
props/jdbc.properties & 数据库链接信息
db.jdbc.driverClassName=com.mysql.jdbc.Driver
db.jdbc.url=jdbc:mysql://127.0.0.1:3306/itstack?createDatabaseIfNotExist=true&characterEncoding=utf-8&useUnicode=true
db.jdbc.username=root
db.jdbc.password=123456
spring/spring-config-datasource.xml & dbcp2数据源配置以及扫描Mapper等
<?xml version="1.0" encoding="UTF-8"?>
resources/mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
resources/spring-config.xml
<?xml version="1.0" encoding="UTF-8"?>
classpath:props/*.properties
DROP TABLE user;
CREATE TABLE user ( id bigint(11) NOT NULL AUTO_INCREMENT, name varchar(32), age int(4), address varchar(128), entryTime datetime, remark varchar(64), createTime datetime, updateTime datetime, status int(4) DEFAULT '0', PRIMARY KEY (id), INDEX idx_name (name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into user (id, name, age, address, entryTime, remark, createTime, updateTime, status) values (1, '水水', 18, '吉林省榆树市黑林镇尹家村5组', '2019-12-22 00:00:00', '无', '2019-12-22 00:00:00', '2019-12-22 00:00:00', 0);
insert into user (id, name, age, address, entryTime, remark, createTime, updateTime, status) values (2, '豆豆', 18, '辽宁省大连市清河湾司马道407路', '2019-12-22 00:00:00', '无', '2019-12-22 00:00:00', '2019-12-22 00:00:00', 1);
insert into user (id, name, age, address, entryTime, remark, createTime, updateTime, status) values (3, '花花', 19, '辽宁省大连市清河湾司马道407路', '2019-12-22 00:00:00', '无', '2019-12-22 00:00:00', '2019-12-22 00:00:00', 0);
页面更新:2024-04-02
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号