SSM框架详解:结构创建与注解应用

Alt

文章目录

    • 1. 引言
    • 2. SSM框架项目结构创建
      • 2.1 目录结构
      • 2.2 说明
    • 3. 注解的应用
      • 3.1 `@Controller`
      • 3.2 `@Service`
      • 3.3 `@Repository`
      • 3.4 `@Autowired`
      • 3.5 `@RequestMapping`
      • 3.6 `@Select`、`@Insert`等
    • 4. 结语

🎈个人主页:程序员 小侯
🎐CSDN新晋作者
🎉欢迎 👍点赞✍评论⭐收藏
✨收录专栏:Java框架
✨文章内容:创建与注解
🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗

1. 引言

SSM框架(Spring + SpringMVC + MyBatis)是一种广泛应用于JavaWeb开发的技术栈。其中,Spring负责管理应用程序的对象(IoC),SpringMVC负责处理用户请求和返回响应,MyBatis用于简化数据库操作。在SSM框架中,结构创建和注解的应用是关键的开发实践,本文将深入探讨这两个方面。
在这里插入图片描述

2. SSM框架项目结构创建

2.1 目录结构

一个良好的项目结构有助于提高代码的可维护性和可扩展性。下面是一个典型的SSM框架项目结构:

|-- src
|   |-- main
|   |   |-- java
|   |   |   |-- com
|   |   |   |   |-- example
|   |   |   |   |   |-- controller  // 控制层
|   |   |   |   |   |-- dao         // 数据访问层
|   |   |   |   |   |-- service     // 业务逻辑层
|   |   |   |   |   |-- entity      // 实体类
|   |   |-- resources
|   |   |   |-- mybatis             // MyBatis映射文件
|   |   |   |-- spring              // Spring配置文件
|   |   |   |-- springmvc           // SpringMVC配置文件
|   |-- webapp
|   |   |-- WEB-INF
|   |   |   |-- views               // 视图层
|   |   |   |-- web.xml             // Web配置文件
|-- pom.xml                        // Maven配置文件

在这里插入图片描述

2.2 说明

  • controller:控制层,接收用户请求并调用业务逻辑层处理。
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/getUserById")public String getUserById(Model model, @RequestParam("id") int id) {User user = userService.getUserById(id);model.addAttribute("user", user);return "userDetail";}// 其他请求处理方法
}
  • dao:数据访问层,与数据库交互,执行SQL语句。
@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User getUserById(@Param("id") int id);@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")void addUser(User user);// 其他SQL语句映射方法
}
  • service:业务逻辑层,处理业务逻辑,调用数据访问层。
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(int id) {return userMapper.getUserById(id);}public void addUser(User user) {userMapper.addUser(user);}// 其他业务逻辑方法
}
  • entity:实体类,与数据库表一一对应,用于封装数据。
public class User {private int id;private String name;private int age;// 省略getter和setter
}
  • mybatis:存放MyBatis的映射文件,配置SQL语句和实体类的映射关系。
<!-- UserMapper.xml -->
<mapper namespace="com.example.dao.UserMapper"><select id="getUserById" resultType="com.example.entity.User">SELECT * FROM user WHERE id = #{id}</select><insert id="addUser" parameterType="com.example.entity.User">INSERT INTO user(name, age) VALUES(#{name}, #{age})</insert><!-- 其他SQL语句映射 -->
</mapper>
  • spring:Spring框架的配置文件,包括数据源配置、事务管理等。
<!-- applicationContext.xml -->
<context:component-scan base-package="com.example" />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><!-- 数据源配置 -->
</bean>
<!-- 其他Spring配置 -->
  • springmvc:SpringMVC框架的配置文件,包括视图解析器、拦截器等。
<!-- springmvc-servlet.xml -->
<context:component-scan base-package="com.example" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 视图解析器配置 -->
</bean>
<!-- 其他SpringMVC配置 -->

3. 注解的应用

SSM框架广泛使用注解简化配置,提高开发效率。以下是一些常用注解的应用:

3.1 @Controller

用于标识一个类为SpringMVC的Controller,负责处理用户请求。

@Controller
@RequestMapping("/user")
public class UserController {// 请求处理方法
}

3.2 @Service

用于标识一个类为Spring的服务层组件,通常用于定义业务逻辑。

@Service
public class UserService {// 业务逻辑方法
}

3.3 @Repository

用于标识一个类为Spring的数据访问层组件,通常用于与数据库交互。

@Repository
public interface UserMapper {// 数据访问方法
}

3.4 @Autowired

用于自动装配Spring容器中的bean。

@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;// ...
}

3.5 @RequestMapping

用于映射请求路径,指定处理请求的方法。

@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/getUserById")public String getUserById(Model model, @RequestParam("id") int id) {// 处理请求的方法}// ...
}

3.6 @Select@Insert

用于映射MyBatis的SQL语句,与XML配置文件相对应。

@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User getUserById(@Param("id") int id);@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")void addUser(User user);// ...
}

4. 结语

通过良好的项目结构和注解的应用,SSM框架能够更好地发挥其优势,简化配置,提高开发效率。在实际项目中,可以根据具体需求进一步优化项目结构和灵活使用注解,以更好地满足业务需求。希望本文对于理解SSM框架的项目结构和注解的应用有所帮助。

后记 👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹

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

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

相关文章

专业级音频处理 Logic Pro X 中文 for Mac

Logic Pro X是一款专业音频制作和音乐创作软件。它是Mac电脑上最受欢迎和广泛使用的音频工作站&#xff08;DAW&#xff09;。Logic Pro X提供了丰富的功能和工具&#xff0c;适用于音乐制作、录音、编辑、混音和音频处理等方面。以下是Logic Pro X软件的一些主要特点和功能&am…

怎么取消苹果订阅自动续费?分享3个可行方法!

在日常生活中&#xff0c;我们经常会使用到各种应用程序或服务&#xff0c;其中很多都提供了订阅自动续费的功能。然而&#xff0c;有时候用户可能会忘记取消订阅&#xff0c;从而导致不必要的扣费&#xff0c;给用户带来麻烦和困扰。 那么&#xff0c;对于使用苹果手机的小伙…

【JUC】十八、happens-before先行发生原则

文章目录 1、先行发生原则happens-before2、happens-before总原则3、8条happens-before规则4、案例 1、先行发生原则happens-before 在Java中&#xff0c;Happends-Before本质上是规定了一种可见性&#xff0c; A Happends-Before B&#xff0c;则A发生过的事情对B来说是可见的…

Discuz论坛自动采集发布软件

随着网络时代的不断发展&#xff0c;Discuz论坛作为一个具有广泛用户基础的开源论坛系统&#xff0c;其采集全网文章的技术也日益受到关注。在这篇文章中&#xff0c;我们将专心分享通过输入关键词实现Discuz论坛的全网文章采集&#xff0c;同时探讨采集过程中伪原创的发布方法…

.net-去重的几种情况

文章目录 前言1. int 类型的list 去重2. string类型的 list 去重3. T泛型 List去重4. 使用HashSet List去重5. 创建静态扩展方法 总结 前言 .net 去重的几种情况 1. int 类型的list 去重 // List<int> List<int> myList new List<int>(){ 100 , 200 ,100…

Selenium定位元素的方法css和xpath的区别!

selenium是一种自动化测试工具&#xff0c;它可以通过不同的定位方式来识别网页上的元素&#xff0c;如id、name、class、tag、link text、partial link text、css和xpath。 css和xpath是两种常用的定位方式&#xff0c;它们都可以通过元素的属性或者层级关系来定位元素&#…

Win10任务栏卡死?三个技巧,让你轻松应对!

windows 10作为广受欢迎的操作系统&#xff0c;为用户提供了强大的功能和友好的用户界面。然而&#xff0c;有时用户可能会面临任务栏卡死的问题&#xff0c;这不仅影响使用体验&#xff0c;还可能导致一系列其他问题。本文将深入介绍win10任务栏卡死的原因&#xff0c;并提供三…

【Linux】-信号-(信号的产生,保存,处理,以及os是怎么读取硬件的输入,硬件异常和coredump,定时器的原理简单的用户态和内核态的详细介绍)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

外贸B2B网站独立站建站(零基础全流程)

1.第一步是要先去买个域名&#xff1a; 一般做外贸的购买.com 后缀的国际域名就好&#xff0c;域名可以在阿里云&#xff0c;腾讯云等大的平台上购买&#xff0c;方法很简单&#xff08;但是在确定购买新的域名最好要分析下这个域名有没有被黑过&#xff0c;要不然后期对这个网…

【OpenGL】Clion配置

OpenGL简介 OpenGL&#xff08;Open Graphics Library&#xff09;是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像&#xff08;二维的亦可&#xff09;&#xff0c;是一个功能强大&#xff0c;调用方便的底层图形库。OpenGL是行业领域中…

JVS低代码按钮组件触发逻辑,打破传统功能界限

在现代应用开发中&#xff0c;按钮组件的功能不仅仅局限于触发页面上的简单动作&#xff0c;它更可以成为连接前后端数据交互的桥梁。当按钮被点击时&#xff0c;其背后可能隐藏着复杂的逻辑远程调用过程&#xff0c;这些过程旨在从远程服务器获取数据&#xff0c;并将这些数据…

微信怎么设置自动回复

微信作为一款广受欢迎的社交媒体平台&#xff0c;其聊天功能是非常重要的。许多用户都希望能够快速、自动地回复消息 首先&#xff0c;点击设置&#xff0c;选择机器人下面的自动通过好友 点击新增规则&#xff0c;设置你自动通过好友的时间段&#xff0c;自动通过好友的微信工…

LeetCode Hot100 3.无重复字符的最长子串

题目&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 代码&#xff1a; class Solution {public int lengthOfLongestSubstring(String s) {char[] arr s.toCharArray(); // 转换成 char[] 加快效率&#xff08;忽略带来的空间…

文章解读与仿真程序复现思路——太阳能学报EI\CSCD\北大核心《基于电力CPS联合仿真的主配一体化电网负荷转供方法研究》

这个标题涉及到电力系统、CPS&#xff08;Cyber-Physical Systems&#xff0c;即网络化物理系统&#xff09;联合仿真&#xff0c;以及主配一体化电网负荷转供方法的研究。让我们逐步解读&#xff1a; 基于电力CPS联合仿真&#xff1a; 基于电力&#xff1a; 指的是该研究与电力…

python-nmap库使用教程(Nmap网络扫描器的Python接口)(功能:主机发现、端口扫描、操作系统识别等)

文章目录 Python-nmap库使用教程前置条件引入python-nmap创建Nmap扫描实例执行简单的主机发现&#xff08;nmap -sn&#xff09;示例&#xff0c;我有一台主机配置为不响应 ICMP 请求&#xff0c;但使用nmap -sn&#xff0c;仍然能够探测到设备&#xff1a; 端口扫描扫描特定端…

AIGC实战——生成对抗网络(Generative Adversarial Network)

AIGC实战——生成对抗网络 0. 前言1. 生成对抗网络1.1 生成对抗网络核心思想1.2 深度卷积生成对抗网络 2. 数据集分析3. 构建深度卷积生成对抗网络3.1 判别器3.2 生成器3.3 DCGAN 模型训练 4. GAN 训练技巧4.1 判别器强于生成器4.2 生成器强于判别器4.3 信息量不足4.4 超参数 小…

数据结构与算法之美学习笔记:29 | 堆的应用:如何快速获取到Top 10最热门的搜索关键词?

目录 前言堆的应用一&#xff1a;优先级队列堆的应用二&#xff1a;利用堆求 Top K堆的应用三&#xff1a;利用堆求中位数解答开篇内容小结 前言 本节课程思维导图&#xff1a; 搜索引擎的热门搜索排行榜功能你用过吗&#xff1f;搜索引擎每天会接收大量的用户搜索请求&#x…

HTML5+CSS3+JS小实例:数字滑动选择控件

实例:数字滑动选择控件 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&quo…

IPtables防火墙详解

一、IPtables介绍 iptables是unix/linux自带的一款开放源代码的完全自由的基于包过滤(对OSI模型的四层或者是四层以下进行过滤)的防火墙工具&#xff0c;它的功能十分强大&#xff0c;使用非常灵活&#xff0c;可以对流入和流出服务器的数据包进行很精细的控制。主要针对网络访…

最全最详细ChatGPT角色预设词教程,Prompt分享

使用指南 1、可直复制使用 2、可以前往已经添加好Prompt预设的AI系统测试使用&#xff08;可自定义添加使用&#xff09; 雅思写作考官 我希望你假定自己是雅思写作考官&#xff0c;根据雅思评判标准&#xff0c;按我给你的雅思考题和对应答案给我评分&#xff0c;并且按照雅…