美文网首页
SSM单体架构项目 (上)

SSM单体架构项目 (上)

作者: 极速魔法 | 来源:发表于2020-09-30 19:55 被阅读0次

课程管理模块

Maven

间接依赖(依赖传递)

依赖冲突

依赖传递导致的:同一个工程 依赖传递 了不同版本的相同jar包

依赖调解

  • 第一声明者优先原则:先声明的为准
  • 路径近者优先原则:直接依赖 > 间接依赖
  • 排除依赖
    /pom.xml/
<dependency>
    ...
    <exclusions>
        <exclusion>
            <groupId>xxx</groupId>
            <artifactId>xxx<artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 锁定版本
    /pom.xml/
<properties>
    <!-- spring.version自定义标签,抽取共同的版本号-->
    <spring.version>5.1.8RELEASE</spring.version
</properties>
<!-- 锁定 jar版本,没有引入jar包 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>xxx</groupId>
                <artifactId>xxx<artifactId>
                <!--获得properties声明的 版本号 -->
                <version>${spring.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

Maven聚合工程(分模块)

拆分方法

  • 业务模块拆分
  • 按照层拆分。持久层,业务层(servic),表现层

Maven工程继承

子工程继承父工程,可以使用父工程的依赖
父工程 打包方式 <packaging>pom</packaging>
子工程 pom.xml 中 <parent></parent>

Maven 工程聚合

父工程 pom.xml中<modules>标签 将其他工程聚合一起

依赖关系建立原则:当前项目要用到哪个项目资源,当前项目依赖要用到资源的项目(直接依赖 和间接依赖)

Dao 层 Spring整合 mybastis

  • 引入jdbc.properties
  • 数据源配置
  • sqlSessionFactory
  • mapper映射扫描

Service 层

  • 开启Service IOC注解扫描
  • 引入 applicationContext-dao.xml <import resource=“classpath: applicationContext-dao.xml”></import>

Web层

/springmvc.xml/

  • 注解扫描 <context:component-scan base-package="com.lagou.controller"></context:component-scan>
  • 注解增强
  • 视图解析器
  • 静态资源放行

/applicationContext.xml/

  • 引入:applicationContext_service.xml

/web.xml/

  • 中文乱码过滤器
  • 前端控制器
  • 启动监听器 ContextListener
  • 跨域过滤器

多条件查询响应

创建实体类 ResponseResult(success,state,message,content)封装响应结果

CourseVO(View object)

表现层对象,接收前端参数

CourseController

ResponseResult findCourseByCnodition(@ResquestBody CourseVo courseVo);
前端提交参数是post json格式,不能直接转换为courseVo,@ResquestBody 前端参数封装到 courseVo中

图片上传

  • 判断上传文件是否为空
  • 获取项目部署路径
  • 获取原文件名
  • 生成新文件名
  • 文件上传
  • 返回响应
    upload文件夹添加从tomact webapp目录中添加到 IDEA tomcat configuration deployment中,否则提示无法访问

新增课程

// 封装课程信息
BeanUtils.copyProperties(course,courseVo);

// 补全课程信息
course.setCreateTime(date);
course.setUpdateTime(date);

//保存课程
courseMapper.saveCourse(course);

// 获取插入数据的id
course.getId();

需求分析步骤

Controller

  1. 根据接口文档,设置Controller接收参数,调用Service
  2. 返回响应

Service

  1. 接收Controller传递的参数
  2. 封装对象,补全信息
  3. 调用mapper

Dao

通过传递来的参数,编写接口方法和mapper

更新和添加

更新和添加放到一个API 接口中,根据传入的参数有无id 区分

  • 添加操作
  • 回显操作,更新的准备
  • 更新操作

分页查询

后台 准备的参数

  • 总条数
  • 每页显示的条数
  • 总页数
  • 当前页
  • 分页数据

mybatis分页插件

  1. 导入依赖
  2. 配置文件中配置pageHelper
  3. 调用数据库方法前调用PageHelper.startPage(当前页,每页显示条数)

/PromotionAdMapper.xml/

<mapper namespace="com.lagou.dao.PromotionAdMapper">

<resultMap id="ad_space" type="com.lagou.domain.PromotionAd">

<id property="id" column="id"></id>

<result property="name" column="name"/>
<result property="spaceId" column="spaceId"/>
...
<result property="img" column="img"/>

<association property="promotionSpace"

select="com.lagou.dao.PromotionSpaceMapper.findPromotionSpaceById"

column="spaceId" javaType="com.lagou.domain.PromotionSpace"></association>

</resultMap>

/applicationContext-dao.xml/

<!--2.sqlSessionFactory-->

<bean id="sqlSessionFactory"

class="org.mybatis.spring.SqlSessionFactoryBean">

    <property name="dataSource" ref="dataSource"></property>

    <property name="typeAliasesPackage" value="com.lagou.domain"/>

    <property name="plugins">
        <array>
        <bean class="com.github.pagehelper.PageHelper">
        <property name="properties">
            <value>helperDialect=mysql</value> 
        </property>
        </bean>
        </array>
 </property>

<!--引入加载mybatis核心配置文件-->

<property name="configLocation" value="classpath:sqlMapConfig.xml">

</property> 
</bean>

/PromotionAdService.java/

public PageInfo findAllPromotionAddByPage() {
    PageHelper.startPage(currentPage,pageSize);
    // 分页查询结果
    List<PromotionAd> allPromotionAdPage

    PageInfo<PromotionAd> pageInfo = new PageInfo<>(allPromotionAdPage);
    return pageInfo;
}

权限控制

权限概念

权利(能做的)和限制(不能做的)
认证:验证用户名和密码是否正确
授权:用户所能访问的资源进行控制

权限控制原理

  • ACL(Access Control Lists)
    给用户直接分配权限

  • RBAC(Role-Based Access Control)
    给用户分配角色,角色对应权限
    用户和角色多对多,角色和权限 多对多

权限系统表

用户表,角色表,权限表,用户角色中间表,角色权限中间表

权限系统表

查询父子菜单

嵌套查询

  1. 顶层菜单 pid = -1,查询出顶层菜单
  2. 顶层菜单id 作为子菜单的 pid 查询出子菜单
<!-- 一对多: 查找子孙菜单 -->

<select id="findSubMenuListByPid" resultMap="MenuResult">

select * from menu where parent_id = #{pid} </select>

<!--根据pid 查询所有子分类集合-->
<resultMap id="MenuResult" type="com.lagou.domain.Menu">

<id column="id" property="id"></id>

<result column="href" property="href"></result>

<result column="icon" property="icon"></result>

<result column="name" property="name"></result>

<result column="parent_id" property="parentId"></result>

<result column="description" property="description"></result> <result column="orderNum" property="order_num"></result>

<result column="shown" property="shown"></result>

<result column="created_time" property="createdTime"></result>

<result column="updated_time" property="updatedTime"></result>

<result column="created_by" property="createdBy"></result>

<result column="updated_by" property="updatedBy"></result>

<collection property="subMenuList" ofType="com.lagou.domain.Menu"

select="findSubMenuListByPid" column="id" ></collection>

</resultMap>

为 角色分配菜单

向中间表 role_menu 添加关联关系,先把之前角色的菜单清空,再添加

用户登录

MD5

Message Digest Algorithm 5 信息摘要算法
32位的16进制字符串,加密过程不可逆

登录流程

dao层
select * from user where phone=#{phone}

service层

  • 查询手机号对应的用户是否存在
  • 进而判断加密的密码是否正确 user != null && Md5.verfiy(xxx)

Controller层

  • 判断service层返回的用户是否为null,等于直接返回响应
  • 登录验证通过,向session中存储用户id,access_token(令牌信息)
  • accesson_token userid 转换成json响应格式

动态获取菜单

用户登录成功,获取该用户所具有的权限,展示菜单

  • 用户关联角色,角色关联菜单
  • 角色关联资源

UserController

  1. 获取请求头 token
  2. 获取服务端session中的token
  3. 比较token是否一致
    1. 不一致,响应错误信息
    2. 一致,取出session中的userid

UserService

  1. 根据用户 id,查询拥有的角色
  2. 获取角色id,保存到 list 集合
  3. 根据角色id 查询父菜单信息
  4. 查询父菜单的子菜单
  5. 获取资源信息
  6. 封装数据

UserDao

  1. 根据用户 id,查询拥有的所有角色
  2. 根据角色id 查询父菜单信息
  3. 查询父菜单的子菜单
  4. 获取资源信息

Git

版本控制类型

  • 集中式版本控制工具,版本控制依赖中央服务器,所有操作要联网
  • 分布式版本控制工具,本地仓库实现版本控制,协同开发使用git远程仓库
    SVN Git 区别:
    git存在本地仓库,本地仓库就可以实现版本控制

Git 工作流程

代码冲突

多个人对同一个文件同一行进行了修改操作

Git工作流程

基本概念

  • 本地仓库
    .git隐藏文件夹,存储所有版本代码

  • 工作区
    和.git同级目录文件 编写的代码,工作区不与任何仓库分支进行关联

  • 暂存区
    .git中index 文件,从工作区经过add(添加)后与某一个仓库分支进行关联

#查看文件状态
git status  -s

# 单行侠士提交记录
git log --pretty=online

#版本回退
git resest --hard 'commit_id'

# 回到未来的提交(相对于回退版本)
git reflog
git resest --hard 'commit_id'

#删除本地仓库文件
git rm xxx 
git commit -m ’xxx‘

# 本地仓库检出到工作区
git checkout xxx

分支管理

#查看分支
git branch

# 详细查看本地分支
git branch -v

# 查看包括远程仓库在内的分支信息
git branch -av

#创建分支
git branch dev

#分支切换
git checkout dev

#分支合并
git checkout master
git merge dev

#删除分支
git branch -d dev

远程仓库

#生成公钥,私钥
ssh-keygen -t rsa

# 查看远程仓库
git remote -v

#添加远程仓库,origin 远程仓库名称,可以随意取名remote_git_repo 远程仓库地址
git remote add origin remote_git_repo

# 第一次使用时,带上 -u 参数 ,本地master推送到远程新的 master 分支的同时,还会把本地的 master 分支和远程的 master 分支关联起来。  
git push -u origin master

# 仅获取远程仓库的更新内容,不会自动合并
git fetch

# 获取远程仓库的更新内容,自动合并
git pull

# 拉取远程仓库
git pull 远程仓库名称 分支名称

#断开本地仓库和远程仓库链接
git remote rm origin

相关文章

  • SSM单体架构项目 (上)

    课程管理模块 Maven 间接依赖(依赖传递) 依赖冲突 依赖传递导致的:同一个工程 依赖传递 了不同版本的相同j...

  • SSM单体架构项目 (下)

    Vue 组件 组件导入 组件传参 props 组件传参,父组件向子组件传参 分页 引入分页组件

  • Dubbo进阶学习

    一、从单体到微服务架构演变 1.1单体架构 所有的应用程序都部署在一个单体的项目上。 优点 小项目开发快 成本低 ...

  • ssm-admin脚手架

    ssm-admin ssm-admin是基于ssm 前端采用vue-cli组件的快速开发脚手架单体服务。(该项目仅...

  • 从微服务出发,聊一聊软件架构

    架构发展大致是从单体架构到SOA(面向服务架构), 再到微服务这样一个过程 就单体架构来讲, 项目耦合性强, 项目...

  • SpringCloud前置知识+RabbitMQ

    一、微服务架构介绍 1.单体架构 ​ 单体架构也被称为单体应用,它是将所有的功能模块全部耦合在一个项目...

  • SpringCloud前置知识+RabbitMQ

    一、微服务架构介绍 1.单体架构 ​ 单体架构也被称为单体应用,它是将所有的功能模块全部耦合在一个项目中 1.1 ...

  • Spring Cloud—一、微服务架构

    目前微服务是非常火的架构或者说概念,也是在构建大型互联网项目时采用得架构方式。 1.1、单体架构 单体架构,是指将...

  • 单体架构和微服务系统架构的优缺点

    单体架构 所谓的单体架构就是把所有的业务模块编写在一个项目中,最终会打包成一个war包,然后进行部署 单体架构的优...

  • 微服务架构的优缺点和拆分

    单体式的架构更适合轻量级的简单应用,微服务架构适合大型、大团队、敏捷迭代型项目。后台架构的演变:单体结构(巨无霸)...

网友评论

      本文标题:SSM单体架构项目 (上)

      本文链接:https://www.haomeiwen.com/subject/lfdpuktx.html