SpringMVC笔记——SSM框架搭建简单实例

article/2025/9/19 1:29:09

简介

Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发的框架,对于新手来说也是比较容易学习入门的。虽说容易,但在框架搭建过程中仍然遇到了许多问题,因此用实例记录下来吧。

SSM


实例

第一步——导包

Spring框架包及其依赖包
MyBatis框架包及其依赖包
MyBatis-EhCache架包
C3P0架包
MySql数据库驱动包

项目架包如下:
Jar包

项目结构如下:
项目结构

第二步——整合Dao层(Spring+MyBatis)

sqlMapConfig.xml

<?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="cacheEnabled" value="true"/></settings>
</configuration>

因为MyBatis交给Spring管理,因此Mapper在Spring中配置,这里的配置只打开二级缓存

applicationContext-dao.xml

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver" /><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db_pwc" /><property name="user" value="pwc" /><property name="password" value="123456" /><property name="maxPoolSize" value="20" /><property name="minPoolSize" value="1" /><property name="initialPoolSize" value="3" /><property name="maxIdleTime" value="15" /></bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:sqlMapConfig.xml" /><property name="dataSource" ref="dataSource" /></bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="cn.pwc.dao.mapper" /><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /></bean></beans>

1.该配置自动扫描单例化采用代理方式的Mapper,单例化的Mapper的bean名为Mapper接口第一个字母为小写的名。
2.千万要注意sqlSessionFactory的bean中的configLocation属性,其value值务必记得加上classpath:前缀,不然无法加载MyBatis配置文件

第二步——整合Service层(Spring)

业务接口和业务实现

UserService.java

package cn.pwc.service;
import java.util.List;
import cn.pwc.pojo.User;public interface UserService {public void add(User user) throws Exception;public void delete(User user) throws Exception;public User getUserById(int id) throws Exception;public List<User> listUserByAge(int age) throws Exception;
}

UserServiceBean.java

package cn.pwc.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.pwc.dao.mapper.UserMapper;
import cn.pwc.pojo.User;
import cn.pwc.service.UserService;@Service @Transactional
public class UserServiceBean implements UserService{@Resource(name="userMapper")private UserMapper mapper;@Overridepublic void add(User user) throws Exception {mapper.insert(user);}@Overridepublic void delete(User user) throws Exception {mapper.deleteById(user.getId());}@Overridepublic User getUserById(int id) throws Exception {User user=null;user=mapper.findById(id);if(user==null){throw new Exception("User is not existed!");}return user;}@Overridepublic List<User> listUserByAge(int age) throws Exception {List<User> list=null;list=mapper.findByAge(age);if(list==null){throw new Exception("List is empty!");}return list;}
}

本实例采用自动扫描加载的方式,因此该业务bean需注解@Service
本实例交由Spring管理事务,因此该业务bean需注解@Transactional

applicationContext-service.xml

    <context:component-scan base-package="cn.pwc.service" />

第三步——添加事务管理

applicationContext-transaction.xml

    <bean id="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><tx:annotation-driven transaction-manager="txManager" />

第四步——整合视图层(SpringMVC)

springmvc.xml

    <context:component-scan base-package="cn.pwc.controller"/><mvc:annotation-driven /><bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/" /><property name="suffix" value=".jsp" /></bean>

采用mvc:annotation-driven标签自动装载视图控制器处理器解析器等

视图Controller(HelloController.java)

package cn.pwc.controller;import javax.annotation.Resource;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import cn.pwc.pojo.User;
import cn.pwc.service.UserService;@Controller
public class HelloController {@Resource(name="userServiceBean")private UserService service;@RequestMapping("/hello")public ModelAndView sayHello(){User user=null;User user2=null;User user3=null;try {user = service.getUserById(1);user2=service.getUserById(1);user3=service.getUserById(1);System.out.println("OK!");} catch (Exception e) {e.printStackTrace();}ModelAndView view=new ModelAndView("hello");view.addObject("user", user);return view;}
}

该Controller类需注解@Controller
视图控制方法需注解@RequestMapping,作为url请求处理方法

第五步——将所有配置装载到Spring容器中

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-*.xml</param-value></context-param><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

务必注意servlet-mapping中url-pattern属性值不能为/*
加载的配置文件路径必须有classpath:前缀


测试

测试

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

转载于:https://www.cnblogs.com/pwc1996/p/4839131.html


http://chatgpt.dhexx.cn/article/yMmraq40.shtml

相关文章

SSM框架整合+案例

SSM框架整合 1、环境要求2、数据库环境3、基本环境搭建3.1 创建项目3.2 Maven项目添加web支持3.3 配置pom.xml文件3.4 建立框架的基本结构和配置文件3.4.1 创建包3.4.2 添加配置文件3.4.3 database.properties文件3.4.4 mybatis-config.xml 文件3.4.5 applicationContext.xml 文…

C# SqlHelper类的使用

SqlHelper类 1.首先SqlHelper类是一个基于.NET Framework的数据库操作组件&#xff0c;包含了数据库的操作方法。可以简化在C#中使用ADO.NET连接数据库时每次都要编写连接、打开、执行SQL语句的代码&#xff0c;它将每次连接都要写的代码封装成方法&#xff0c;把要执行的SQL语…

SqlHelper类(C#)

大神可以绕道了... 目的&#xff1a;搜集SqlHelper类 自己写的一个SQLHelper类&#xff0c;如下&#xff1a; 编辑App.config节点&#xff0c;添加<connectionStrings>节点&#xff0c;并根据实际填上相应的参数 <?xml version"1.0" encoding"utf…

SQLHelper

前言 小编在最近的学习过程中用到了SQLHelper&#xff0c;说起来&#xff0c;小编也是有点懒&#xff0c;虽然是用到了&#xff0c;但是也没有用明白&#xff0c;开始的时候也没有好好的研究&#xff0c;直到后来报错了&#xff0c;才下定决心好好好学习了解一下这个东西。下面…

sqlhelper 的使用 (C#)超级详细的入门教程

sql helper 的使用 &#xff08;C#&#xff09;小白教程 提到CRUD&#xff0c;很多刚入门的小白总是来一条写一条连接&#xff0c;先建立连接connection 打开连接 open 来查询query 最后别忘了关闭连接 close 。 要是一次写多个操作&#xff0c;那一遍一遍写下来肯定麻木了。…

Python中的BIF

什么是BIF呢&#xff1f; BIF是built-in functions的缩写&#xff0c;顾名思义&#xff0c;就是内建函数。Python中提供了大量的BIF&#xff0c;这就意味着代码量可以大大减少。 如果要查看Python中的内建函数&#xff0c;就可以使用命令&#xff1a;dir(__builtins__) 注意…

一、bif

缩进是python的灵魂&#xff0c;缩进可以使python的代码整洁&#xff0c;有层次。 python是脚本语言&#xff0c;就是为了简单方便以辅助科学运算&#xff0c;因此python有许多bif&#xff0c;build in function 全部都是小写的就是bif。 转义字符是一个字符&#xff0c;在内存…

FineBI

还是数据可视化工具Tableau、FineBI? 不禁联想起在微软系统出现之前&#xff0c;程序员的电脑系统还是用的linux&#xff0c;只能通过各种复杂的指令来实现字符的简单可视化&#xff1b;而当win系统普及于世后&#xff0c;计算机从此突破了技术人群的限制&#xff0c;交互方式…

Python学习笔记2(小甲鱼)—— 内置函数BIF

&#xfeff;&#xfeff; 这里有一个让人“亮瞎眼”的“游戏”开始python的学习。首先我们编写一段代码&#xff0c;来实现这个游戏。编写操作可参考前面的《Python学习笔记1——搭建环境与“Hello World”》这篇文章&#xff0c;网址&#xff1a;http://blog.csdn.net/tongbi…

BSDiff算法

https://blog.csdn.net/add_ada/article/details/51232889 BSDiff是一个差量更新算法&#xff0c;它在服务器端运行BSDiff算法产生patch包&#xff0c;在客户端运行BSPatch算法&#xff0c;将旧文件和patch包合成新文件。 差量更新算法的核心思想 尽可能多的利用old文件中已有…

MFBI

MFBI MFBI: Multi-Frequency Band Indicator 之前在写” Carrier frequency 和 EARFCN的关系”, 提到过MFBI. 简单的讲就是不同band间对应的frequency 的范围之间有overlapping, 一个frequency 可能对应多个band. 比如2595MHz 即属于band38 又属于band41. 关于那些band间存…

Python的内置函数(BIF)与变量的使用

Python的内置函数&#xff08;BIF&#xff09;与变量的使用 1、内置函数 使用dir()可查看所有的内置函数 dir(__builtins__)使用help()可查看内置函数的功能&#xff0c;例如&#xff1a; help(UserWarning)2、input函数 作用是在控制台输入数据&#xff0c;返回的是字符串…

Python内置函数(BIF)查询(附中文详解说明)

我们知道&#xff0c;Python 解释器内置了一些常量和函数&#xff0c;叫做内置常量&#xff08;Built-in Constants&#xff09;和内置函数&#xff08;Built-in Functions&#xff09;&#xff0c;来实现各种不同的特定功能&#xff0c;在我的另外一篇博客中 第8章&#xff1a…

【BF算法】

BF 算法 BF 算法精讲 在学习到字符串的匹配问题时&#xff0c;了解到了BF算法和KMP算法。 对比这两个算法&#xff0c;先了解BF算法&#xff1b; 字符串匹配问题&#xff0c;比如说&#xff1a;有一个主串 “abbbcdef” &#xff0c; 子串 “bbc”&#xff0c;该问题就是在主…

BIF

python3的内置函数

Python中常见BIF及使用方法

前提说明&#xff1a; BIF&#xff1a;(built-in functions)内置函数 目的&#xff1a;为了方便程序员快速的编写程序 1.查看Python内置函数命令&#xff1a; dir(__builtins__) print(dir(__builtins__))结果如下&#xff1a; 2.help查看使用方法 如&#xff1a; hel…

认识BIF

1.打开IDLE窗口&#xff0c;file新建一个窗口&#xff0c;输入以下代码&#xff1a; 点击file&#xff0c;save保存&#xff0c;接着点击run&#xff0c;或者F5执行 Python对于缩进的命令很敏感&#xff0c;如果这样改就会错误 else后面的冒号可以智能进行缩进&#xff0c;回车…

python中的几个概念:BIF,函数,方法,模块,包,库

一、BIF&#xff08;built in founctions&#xff0c;内置函数&#xff09;&#xff1a;python自带函数&#xff0c;直接调用即可&#xff0c;python3自带函数如下&#xff1a; 二、函数&#xff08;function&#xff09;&#xff1a;就是方法&#xff0c;使用def 定义 三、模…

SQL优化面试专题

介绍&#xff1a; 无论您是创建Web应用程序的开发人员&#xff0c;还是参与Web测试的DBA或测试人员&#xff0c;SQL方面的技巧在数据库编程和数据库验证中都非常重要。因此&#xff0c;我们整理了QL性能优化方面的面试问题。 SQL性能优化是一项艰巨的任务&#xff0c;并且是处…

有哪些SQL优化的手段?

文章目录 1.1 SQL的性能分析1.1.1 通过 show status 命令了解各种 SQL 的执行频率1.1.2 慢查询日志1.1.3 profile分析1.1.4 通过 EXPLAIN 分析低效 SQL 的执行计划 1.2 常用的SQL语句优化 1.1 SQL的性能分析 当面对一个有 SQL 性能问题的数据库时&#xff0c;我们应该首先进行系…