项目结构

SSP项目架构

一、项目框架选择

历史框架

  1. SSH,也就是”Struts2 + Spring + Hibernate”,其中Struts2做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层。
  2. SSM,也就是”SpringMVC + Spring + MyBatis”,其中 SpringMVC 做控制器(controller),Spring 管理各层的组件,MyBatis 负责持久化层。

共同点:1.Spring依赖注入DI来管理各层的组件。2.使用面向切面编程AOP管理事物、日志、权限等。

不同点:1.Struts2 和 SpringMVC 控制器(controller)控制视图和模型的交互机制的不同,

Struts2是Action类级别,SpringMVC是方法级别,更容易实现RESTful风格。

目前使用的框架

SpringBoot + JOOQ

SpringBoot的优势:

  1. 没有繁重的配置文件
  2. 简化复杂的依赖管理
  3. 快速启动容器
  4. 自动化配置

当前项目结构如下:
这里写图片描述

如何快速的搭建一个SpringBoot项目

  1. SpringBoot初始化网站
  2. 选择需要的依赖关系 如 Web 、jooq、mybatis、redis
  3. 生成文件
  4. 使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值