SSP项目架构
一、项目框架选择
历史框架
- SSH,也就是”Struts2 + Spring + Hibernate”,其中Struts2做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层。
- SSM,也就是”SpringMVC + Spring + MyBatis”,其中 SpringMVC 做控制器(controller),Spring 管理各层的组件,MyBatis 负责持久化层。
共同点:1.Spring依赖注入DI来管理各层的组件。2.使用面向切面编程AOP管理事物、日志、权限等。
不同点:1.Struts2 和 SpringMVC 控制器(controller)控制视图和模型的交互机制的不同,
Struts2是Action类级别,SpringMVC是方法级别,更容易实现RESTful风格。
目前使用的框架
SpringBoot + JOOQ
SpringBoot的优势:
- 没有繁重的配置文件
- 简化复杂的依赖管理
- 快速启动容器
- 自动化配置
当前项目结构如下:
如何快速的搭建一个SpringBoot项目
- SpringBoot初始化网站
- 选择需要的依赖关系 如 Web 、jooq、mybatis、redis
- 生成文件
使用idea打开已经生成的文件
为什么使用JOOQ?- DSL(Domain Specific Language )风格,代码够简单和清晰。遇到不会写的sql可以充分利用IDEA代码提示功能轻松完成。
- 保留了传统ORM 的优点,简单操作性,安全性,类型安全等。不需要复杂的配置,并且可以利用Java 8 Stream API 做更加复杂的数据转换。
- 支持主流的RDMS和更多的特性,如self-joins,union,存储过程,复杂的子查询等等。
- 丰富的Fluent API和完善文档。
- runtime schema mapping 可以支持多个数据库schema访问。简单来说使用一个连接池可以访问N个DB schema,使用比较多的就是SaaS应用的多租户场景。
jooq官网
简单操作
大概格式如下,具体的操作懒得写
@Component
public class TestMapper(){
@Autowried
private DSLContext dsl;
/**查询所有字段**/
public List<TestRecord> list(TestRecord condition) {
Condition sqlCondition = generateCondition(condition);
return dsl.selectFrom(
TEST_USER
).where(sqlCondition)
.offset(condition.getOffset())
.limit(condition.getLimit())
.fetch(TestRecord.class);
}
//dsl selectCount(统计数量) selectFrom(查找所有字段) select(查找某些字段) delete(删除数据) update(更新数据) insert(插入数据)
//union使用
public list<profile> proList(TestRecord condition){
SelectHavingStep<Record3<String, String, String>>
peopleSql = dsl.Select(TEST_USER.id,
TEST_USER.name,
TEST_USER.password).groupBy(TEST_USER.id);
SelectHavingStep<Record3<String, String, String>>
IntpeopleSql = dsl.Select(TEST_i18N_USER.id,
TEST_i18N_USER.name,
TEST_i18N_USER.password).groupBy(TEST_i18N_USER.id);
if(null == condition.getIsInt){
resultSql = peopleSql.union(IntpeopleSql);
} else if (condition.getIsInt == 1){
resultSql = IntpeopleSql;
} else {
resultSql = peopleSql;
}
return resultPeopleSql.limit(condition.getLimit())
.offset(condition.getOffset())
.fetchInto(profile.class);
}
}
详细讲解及案例1
详细讲解及案例2