SSM单体架构项目 (上)

2020-09-30  本文已影响0人  极速魔法

课程管理模块

Maven

间接依赖(依赖传递)

依赖冲突

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

依赖调解

<dependency>
    ...
    <exclusions>
        <exclusion>
            <groupId>xxx</groupId>
            <artifactId>xxx<artifactId>
        </exclusion>
    </exclusions>
</dependency>
<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聚合工程(分模块)

拆分方法

Maven工程继承

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

Maven 工程聚合

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

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

Dao 层 Spring整合 mybastis

Service 层

Web层

/springmvc.xml/

/applicationContext.xml/

/web.xml/

多条件查询响应

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

CourseVO(View object)

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

CourseController

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

图片上传

新增课程

// 封装课程信息
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;
}

权限控制

权限概念

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

权限控制原理

权限系统表

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

权限系统表

查询父子菜单

嵌套查询

  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层

Controller层

动态获取菜单

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

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 工作流程

代码冲突

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

Git工作流程

基本概念

#查看文件状态
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

上一篇 下一篇

猜你喜欢

热点阅读