学习 SSM框架 项目总结

news2024/9/21 2:33:04

通过指导老师发布的学习SSM框架项目,这次我深刻体会到了SSM整体项目之间的紧连关系。

以下是我自己学习过程中总结出来的经验。

SSM框架 配置

导入核心 spring 组件坐标

将spring相关组件坐标,导入到 pom 文件中

<!--spring、springMVC-->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.6.8</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

SSM框架XML配置

随后,将SSM框架配置的XML文件放置在resource资源目录下,

其中配置过程,最好 分层 解耦 的 配置,对应软件设计原则:高内聚低耦合。

  • 内聚:软件中各个功能模块内部的功能联系
  • 耦合:衡量软件中各个层/模块之间的依赖、关联的程度

通过,我首次配置,无数次报错的经历,学习到了相关配置的标签语句含义,如下:

dao 层(Mapper所在层)的相关配置

1、引入 数据库连接 相关变量 XML

    <!--引入jdbc.properties-->
    <bean id="placeholderConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="locations" value="classpath:jdbc.properties"/>
    </bean>

2、引入 数据源

<!--引入c3p0数据源-->
    <bean id="dataSource1" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!--注入属性-->
        <property name="driverClass" value="${jdbc.driverClass}"/>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
        <!--初始化连接池大小-->
        <property name="initialPoolSize" value="5"/>
        <!--设置最大连接数-->
        <property name="maxPoolSize" value="50"/>
        <!--设置最小连接数-->
        <property name="minPoolSize" value="10"/>
    </bean>

    <!--引入druid数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!--注入属性-->
        <property name="driverClassName" value="${jdbc.driverClass}"/>
        <property name="url" value="${jdbc.jdbcUrl}"/>
        <property name="username" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
        <!--初始化连接池大小-->
        <property name="initialSize" value="5"/>
        <!--设置最大连接数-->
        <property name="maxActive" value="20"/>
        <!--设置等待时间-->
        <property name="maxWait" value="5000"/>
    </bean>

3、声明 会话工厂 ,引用数据源, 并注入 mybatis-config.xml 配置文件

<!--声明sessionFactory 并注入mybatis.cfg.xml-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--加载mybatis的配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--注入mapper.xml-->
        <property name="mapperLocations">
            <array>
                <value>classpath:mapper/*/*Mapper.xml</value>
            </array>
        </property>
    </bean>

4、扫描 Mapper 接口 所在的包,同时注入 会话工厂

 <!--扫描mapper接口-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--注入mapper接口所在的包-->
        <property name="basePackage" value="com.angindem.bus.mapper,com.angindem.sys.mapper,com.angindem.stat.mapper"/>
        <!--注入sqlSessionFactory-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

Service层的相关配置

1、使用 <context:component-scan base-package="path"/> 语句扫描并自动注册对应bean类

<!--扫描服务层-->
    <context:component-scan base-package="com.angindem.sys.service.impl"/>
    <context:component-scan base-package="com.angindem.bus.service.impl"/>
    <context:component-scan base-package="com.angindem.stat.service.impl"/>

2、声明 数据库的事务管理器 bean类

<!--声明事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

 <!--声明事务的传播性,spring中的通知-->
    <tx:advice id="advise">
        <tx:attributes>
            <!--以add save  update delete change  reset 这些开头的方法我们都设置事务-->
            <tx:method name="add*"/>
            <tx:method name="save*"/>
            <tx:method name="update*"/>
            <tx:method name="delete*"/>
            <tx:method name="change*"/>
            <tx:method name="reset*"/>
            <tx:method name="get*" read-only="true"/>
            <tx:method name="load*" read-only="true"/>
            <tx:method name="*" read-only="true"/>
        </tx:attributes>
    </tx:advice>

3、编写 AOP 切面声明

<!--编写AOP-->
    <aop:config>
        <!--声明切点-->
        <aop:pointcut id="pc1" expression="execution(* com.angindem.sys.service.impl.*.*(..))"/>
        <aop:pointcut id="pc2" expression="execution(* com.angindem.bus.service.impl.*.*(..))"/>
        <aop:pointcut id="pc3" expression="execution(* com.angindem.stat.service.impl.*.*(..))"/>
        <!--编写通知,织入切点-->
        <aop:advisor advice-ref="advise" pointcut-ref="pc1"/>
        <aop:advisor advice-ref="advise" pointcut-ref="pc2"/>
        <aop:advisor advice-ref="advise" pointcut-ref="pc3"/>
    </aop:config>

Context (IOC容器)的配置

1、创建 Spring时进行包扫描并自动注册

<!--告知spring在创建容器的时候进行包扫描-->
    <context:component-scan base-package="com.angindem.sys,com.angindem.bus,com.angindem.stat"/>

2、加载 dao 和 service 的配置

    <!--加载dao的配置文件和service的配置文件-->
    <import resource="classpath:application-dao.xml"/>
    <import resource="application-service.xml"/>

springmvc 的相关配置

1、扫描并自动注册 Controller

    <!--扫描controller-->
    <context:component-scan base-package="com.angindem.sys.controller"/>
    <context:component-scan base-package="com.angindem.bus.controller"/>
    <context:component-scan base-package="com.angindem.stat.controller"/>

2、配置 映射器和适配器(允许你使用 Spring MVC 的各种注解来简化你的控制器代码,它能够处理使用 @RequestMapping 或其他相关注解的方法)

<!--配置映射器和适配器-->
    <mvc:annotation-driven />

3、配置springmvc中 解析 JSP 的视图解析器

<!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>

4、配置静态资源文件的放行,例如CSS等

<!--配置静态文件放行-->
    <mvc:default-servlet-handler/>

5、声明文件上传配置 的bean类

<!--配置文件上传-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--设置文件的编码-->
        <property name="defaultEncoding" value="utf-8"/>
        <!--配置文件上传支持的大小-->
        <property name="maxUploadSize" value="20971520"/>
    </bean>

最后mybatis-config相关配置,结合自己的需求,从官网中自行配置即可。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!--配置驼峰命名-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--配置别名-->
    <typeAliases>
        <package name="com.angindem.domain"/>
    </typeAliases>

    <!--mybatis的分页组件-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"/>
    </plugins>

</configuration>

编写习惯风格

项目整体结构

通过不同的功能进行分包,对相同类别合并,做到 高内聚低耦合,各个功能模块内部的功能联系清晰不混乱。

编写实体类

通过编写自身的实体类,其中创建 VO 对象并继承实体类,在 VO对象中创建分页视图所需的变量。

分页组件的使用

通过分页组件,获得分页查询效果。

Page<Object> page = PageHelper.startPage(menuVo.getPage(), menuVo.getLimit());

这行代码使用 PageHelper 类来启动分页查询。PageHelper 是 MyBatis 分页插件的一个工具类,它通过拦截 SQL 语句来实现物理分页。这里调用 startPage 方法来设置分页参数,其中 menuVo.getPage() 是当前页码,menuVo.getLimit() 是每页显示的记录数。

List<Menu> menus = menuMapper.queryAllMenu(menuVo);

这行代码调用 menuMapperqueryAllMenu 方法来查询所有的菜单数据。menuMapper 是一个 MyBatis 的 Mapper 接口,用于数据库操作。queryAllMenu 方法根据传入的 MenuVo 对象进行查询,返回一个 Menu 类型的列表。

return new DataGridView(page.getTotal(),menus);

这行代码创建了一个新的 DataGridView 对象,并将其返回。DataGridView 是一个自定义的响应类,用于封装分页数据。构造函数接收两个参数:page.getTotal()(总记录数)和 menus(当前页的数据列表)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集成电路学习:什么是RTOS实时操作系统

RTOS&#xff1a;实时操作系统 RTOS&#xff0c;全称Real Time Operating System&#xff0c;即实时操作系统&#xff0c;是一种专为满足实时控制需求而设计的操作系统。它能够在外部事件或数据产生时&#xff0c;以足够快的速度进行处理&#xff0c;并在规定的时间内控制生产过…

UE5.3 新学到的一些性能测试合计(曼巴学习笔记)

一.简单命令行 stat FPS stat unit //增加GPU渲染时间和变量 stat unitgraph //追加了图表显示 二.查看GPU的消耗。调试GPU渲染用的高级命令 可以记录这一刻各个部分的占用情况,只能看当前的 1.在编辑器下&#xff0c;ctrlShift, 。 2.输入命令行&#xff0c;pr…

硬件-经典的TL431三端稳压管

文章目录 一&#xff1a;TL431三端稳压管1.1 器件说明1.2 电路分析1.3 把TL431设计成一个可调电压源的电路1.4 常用型号1.5 阅读手册1.6 2.5V 电压基准应用电路道友&#xff1a;努力的意义&#xff0c;不在于一定会让你取得多大的成就&#xff0c;只是让你在平凡的日子里&#…

虚幻5|知识点(1)寻找查看旋转,击打敌人后朝向主角

举例说明&#xff0c;我们想让角色一直朝着摄像头&#xff0c;我们控制角色任意位置&#xff0c;都能自行旋转都能朝向摄像头 下面是敌人一直朝向角色&#xff0c;无论主角走向哪个位置&#xff0c;敌人都能朝向主角 start是获取敌人的位置向量大小&#xff0c;Target是获取主…

【复杂系统系列(中级)】复杂系统科学的层级与不确定性方程【代码模拟】

【通俗理解】复杂系统科学的层级与不确定性方程 关键词提炼 #复杂系统科学 #层级结构 #不确定性 #上行因果 #下行因果 #初值敏感 #混沌现象 第一节&#xff1a;层级与不确定性方程的类比与核心概念【尽可能通俗】 1.1 层级与不确定性方程的类比 复杂系统科学的层级与不确定…

游戏玩家新宠:高性能远程控制解决方案

如果你出差一些存在公司电脑上的数据急需用到&#xff0c;这时候有一个远程控制工具就非常方便了。如果你担心一些远程控制软件的安全问题&#xff0c;那就从正规渠道下载&#xff0c;比如向日葵远程控制官网下载就可以得到它官方的软件。我今天给你分享一些安全可靠的远程控制…

基于STELLA系统动态模拟技术及在农业、生态环境等科学领域中的实践应用

STELLA是一种用户友好的计算机软件。通过绘画出一个系统的形象图形&#xff0c;并给这个系统提供数学公式和输入数据&#xff0c;从而建立模型。依据专业兴趣&#xff0c;STELLA可以用来建立各种各样的农业、生态、环境等方面的系统动态模型&#xff0c;为科研、教学、管理服务…

基于C++实现一个房贷计算小程序(含代码)

房贷计算程序&#xff0c;主要实现以下功能&#xff1a; 用户友好的界面&#xff1a;使用文本菜单来引导用户选择功能。支持不同还款频率&#xff1a;例如每季度还款、每半年还款等。支持贷款提前还款&#xff1a;计算提前还款对总支付利息的影响。详细的还款计划表&#xff1…

(二)ASP.NET Core WebAPI项目的启动地址设置

上一篇介绍了ASP.NET Core WebAPI项目创建&#xff0c;可参考&#xff1a; 1.webAPI的访问地址 1) 启动时&#xff0c;选择CoreWebAPI(项目名称)运行项目 可以看到打开浏览器后的地址是&#xff1a;applicationUrl"\"launchUrl 2) 启动时&#xff0c;选择IIS Expre…

C++mutable

文章目录 Claude 讲解基本用法mutable的常见用途注意事项 ChatGpt 讲解1. 基本概念2. 使用示例解释&#xff1a; 3. 适用场景4. 注意事项 lambda 讲解基本语法示例捕获方式使用场景 mutable 和 labmda 一起使用代码&#xff1a;代码分析&#xff1a;输出结果&#xff1a; 在C编…

(详细文档!)JavaSwing图书管理系统+mysql数据库

目 录 1.项目概述及需求分析................................ 1 2.系统设计......................................... 1 2.1程序总体设计......................................... 1 2.2数据库设计........................................... 2 2.3公共模块设计...…

论文学习(一):基于遥感技术的凉山州森林火险预测方法研究

文章目录 摘要部分一、绪论二、研究区历史火情分析2.1凉山州森林火灾年际变化特征2.2凉山州森林火灾月际变化特征2.3凉山州森林火灾空间分布特征2.4森林火灾等级与起火原因分析 三、数据与方法3.1数据来源3.2数据预处理3.3研究方法3.3.1逻辑回归&#xff1a;最大似然估计3.3.2决…

iOS——持久化

iOS的数据存储机制 沙盒机制 应用沙盒文件夹包含了&#xff1a; Application(应用程序包)&#xff1a;包含了所有的资源文件和和可执行文件&#xff0c;上架前经过数字签名&#xff0c;上架后不可修改。 Documents&#xff1a;文档目录&#xff0c;要保存程序生成的数据&…

华为OD机试 - 最大相连男生数 - 矩阵(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

[数据集][目标检测]水面垃圾检测数据集VOC+YOLO格式2027张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2027 标注数量(xml文件个数)&#xff1a;2027 标注数量(txt文件个数)&#xff1a;2027 标注…

信创实践(3):基于x2openEuler将CentOS升级成openEuler,享受其带来的创新和安全特性

引言&#xff1a; 在当前的 IT 行业中&#xff0c;创新和安全性是两大关键趋势。随着 CentOS 停止维护&#xff0c;许多用户正在寻找替代方案&#xff0c;以保持其系统的更新和安全。openEuler 作为一个强大的开源操作系统&#xff0c;成为了理想的迁移目标。本教程将指导您如…

大语言模型的上下文窗口(Context Windows):对人工智能应用的影响

大语言模型&#xff08;LLMs&#xff09;极大地提升了人工智能在理解和生成类人文本方面的能力。其中一个影响其效用的基本方面是它们的 “上下文窗口”—— 这个概念直接影响着这些模型接收和生成语言的有效性。我将深入探讨上下文窗口是什么、它们对人工智能应用的影响以及组…

【通俗理解】Baseline在竞赛中的意义——性能比较的标准尺

【通俗理解】Baseline在竞赛中的意义——性能比较的标准尺 关键词提炼 #Baseline #竞赛标准 #算法性能 #性能比较 #改进评估 #魔改基础 #优势彰显 第一节&#xff1a;Baseline的类比与核心概念【尽可能通俗】 1.1 Baseline的类比 Baseline在竞赛中就像是一场跑步比赛的起跑…

【IEEE独立出版 | 最终截稿时间:2024年9月9日23:59】第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024)

【IEEE独立出版 | 最终截稿时间&#xff1a;2024年9月9日23:59】 第三届人工智能、物联网和云计算技术国际会议&#xff08;AIoTC 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence, Internet of Things and Cloud Computing Technology 202…

轻松驾驭开学季,智慧校园综合解决方案!

智慧校园是指运用先进的信息技术手段和智能化系统&#xff0c;对学校内部各种教育资源、管理流程和服务进行数字化、网络化、智能化的整合与优化&#xff0c;提供高效便捷的教育教学和管理服务环境的校园。 智慧校园建设从哪些方面入手呢&#xff1f; 1.智慧食堂管理系统 基于…