SSM整合案例
使用IDEA整合SSM
spring核心配置文件:beans_core.xml/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd "> <!-- 开启spring的注解模式 1 -->
<context:annotation-config/>
<!-- 扫描具体的注解包 1 -->
<context:component-scan base-package="com.ujiuye.*"></context:component-scan>
<!-- 读取外部的数据库连接条件文件 2 -->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClassName}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean> <!-- spring 整合mybatis 使用的工具类 2 -->
<bean name="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"/>
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"/>
</bean> <!-- 扫描 mapper接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ujiuye.mapper"/>
</bean> <!-- 引入spring提供的事务管理 -->
<bean name="manager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> <tx:advice id="myDriver" transaction-manager="manager">
<tx:attributes>
<!--增-->
<tx:method name="save*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<tx:method name="add*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<tx:method name="insert*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<!--删-->
<tx:method name="delete*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<!--改-->
<tx:method name="update*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<!--查-->
<tx:method name="get*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
<tx:method name="find*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
</tx:attributes> </tx:advice> <!-- 那种类型 -->
<aop:config>
<aop:pointcut id="pc" expression="execution(* com.ujiuye.service.*.*(..))"></aop:pointcut>
<aop:advisor advice-ref="myDriver" pointcut-ref="pc"/>
</aop:config> </beans>
配置文件理解:
1.为什么已经扫描具体的注解包了 还需要开启spring的注解模式?是不是重复了。
这个问题其实不写下面这句也不会有任何问题,但是官方介意先开启spring注解模式
<!-- 开启spring的注解模式 -->
<context:annotation-config/>
2.SqlSessionFactoryBean是整合mybatis的一个很重要的类,他的具体功能。
一、数据库的连接(mybatis毕竟是一个持久层框架)
二、扫描mybatis核心配置文件
三、mybatis逆向生成的mapper.xml文件(或者是自己写的mapper.xml文件)。
如果mapper.xml文件和mapper接口放在同一个文件夹中则不需要此操作,但是介意将配置文件放在同一个配置文件夹中管理(Mybatis反向工程位置)
需要注意的是这个文件夹不是普通的文件夹,需要将文件夹变成Resources资源文件夹如下图

四、事务管理

springmvc配置文件 springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <!-- 扫描具体控制层注解 -->
<context:component-scan base-package="com.ujiuye.controller"/>
<!-- 开启springmvc的注解驱动模式 2 -->
<mvc:annotation-driven/>
<!-- 解决静态资源无法访问的问题 1 -->
<mvc:default-servlet-handler/>
<!-- 视图解析器 2 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean> </beans>
配置文件理解:
1、静态文件问题
产出原因:由于我们在web.xml文件中配置了servlet,并且<url-pattern>/</url-pattern>会拦截静态支援文件,因为优先级问题 /* > *.jsp >/ 造成静态资源被servlet拦截,将我们的静态文件当初一个请来处理,所以在cotroller根本处理不了,所以会报一个404找不到的错误。
解决方法:在springmvc.xml文件中配置 <mvc:default-servlet-handler/> 这个标签会将我们cotroller处理不了的丢给默认tomcat中一个默认的DefaultServlet来处理。
我们都知道tomcat自身本来就有一个web.xml文件,而我们也写了一个servlet,程序会采用就近原则选择我们写的servle来执行所以就将原来默认的servlet覆盖掉。所以就造成了静态资源访问不到的问题
下图是默认web.xml源码

2.视图解析器:
我们先来了解一个spring servlet执行流程

图片来源https://www.jianshu.com/p/0f981efdfbbd
一、用户发送一个请求spring的DispatchServlet(前置控制器)接收到请求后就会到RequestMappingHandlerMapping(处理映射器)中去寻找有没有符何条件的servlet就好像一张菜单。然后再返回到(前置控制器)中如果有,
二、DispatchServlet将拿到的结果到RequestMappingHandlerAdapter(处理器适配器)中寻找具体的那个servlet,返回一个ModelAndView 到(前置控制器)中,然后(前置控制器)在将ModelAndView给InternalResourceViewResolver(视图解析器),(视图解析器)进行处理将
三、将一个具体的视图返回到(前置控制器)中最后进行视图处理将结果返回给用户。(哇,很烦)。
接下来就会有人有疑问为什么。配置文件中没有看到
(处理映射器) (处理器适配器) 而只有 (视图解析器)
因为只要我们开启springmvc注解模式,就不需要配置这两个是配置了
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="logImpl" value="STDOUT_LOGGING" />
</settings> <typeAliases>
<package name="com.ujiuye.cus.bean"></package>
<package name="com.ujiuye.pro.bean"></package>
<package name="com.ujiuye.emp.bean"></package>
<package name="com.ujiuye.mdo.bean"></package>
</typeAliases> </configuration>
配置文件理解:
1、需要在mybatis中填写的内容,声明也不写也可以(因为最主要的配置已经在spring核心配置文件中配置了) 但是一定要有这个文件。如果有器大需要配置的:懒加载、缓存。。。就需要在这个文件中配置
作者:Pei-Qi 博客:https://www.cnblogs.com/hwxxbc/ github:https://github.com/Pei-Qi
本人是一个刚刚接触IT行业的新人,有什么不到位的地方还请原谅,如果写的有什么错误的地方希望能够指出,蟹蟹。。。。
SSM整合案例的更多相关文章
- 08 SSM整合案例(企业权限管理系统):07.订单操作
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.用户操作 09.权限控制 10.权限关联与控制 11.AOP日志 07.订单操作 SSM订单操作 ...
- 08 SSM整合案例(企业权限管理系统):05.SSM整合案例的基本介绍
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户和角色操作 10.权限关联 11.AOP日志 05.SSM整合案例的基本介绍 ...
- 08 SSM整合案例(企业权限管理系统):06.产品操作
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.用户操作 09.权限控制 10.权限关联与控制 11.AOP日志 06.产品操作 SSM 环境搭 ...
- 08 SSM整合案例(企业权限管理系统):09.用户和角色操作
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户和角色操作 10.权限关联 11.AOP日志 09.用户和角色操作 1. 用 ...
- 08 SSM整合案例(企业权限管理系统):08.权限控制
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 08.权限控制 SSM权限操作 ...
- 08 SSM整合案例(企业权限管理系统):10.权限关联与控制
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 10.权限关联与控制 1.用户 ...
- 08 SSM整合案例(企业权限管理系统):11.AOP日志
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户和角色操作 10.权限关联 11.AOP日志 11.AOP日志 1.数据库与 ...
- SSM整合案例:图书管理系统
目录 SSM整合案例:图书管理系统 1.搭建数据库环境 2.基本环境搭建 2.1.新建一个Maven项目,起名为:ssmbuild,添加web的支持 2.2.导入pom的相关依赖 2.3.Maven静 ...
- SSM整合案例--用户登录
实现用户登录案例,并进行非法拦截 实现当用户未登录时,无法跳转到出登录页面以外的任何页面,拦截用户仍在登陆页面:当用户登录成功即可跳转到其他页面 (1)导入依赖 <!-- https://mvn ...
随机推荐
- hashable与unhashable
不可哈希(unhashable):就是指其可变,如列表.字典等,都能原地进行修改. 可哈希(hashable):不可变,如字符串.元组那样,不能原地修改. 利用set()和{}建立集合时,要求集合中的 ...
- BFS:UVa1590-IP Networks (子网掩码相关知识)
IP Networks Alex is administrator of IP networks. His clients have a bunch of individual IP addresse ...
- 求数组中两两相加等于20的组合(Python实现)
题目 求数组中两两相加等于20的组合. 例:给定一个数组[1, 7, 17, 2, 6, 3, 14],这个数组中满足条件的有两对:17+3=20, 6+14=20. 解析 分为两个步骤: 先采用堆排 ...
- 求1+2+...+n 【微软面试100题 第十二题】
题目要求: 要求不能使用乘除法,for/while/if/else/switch/case等关键字以及条件判断语句(A?B:C). 参考资料:剑指offer第46题 题目分析: 方法1:利用类的静态成 ...
- day05_03 字符串格式化
pycharm小技巧,一般情况下都需要在代码前注释以下作者以及创建日期 但是如何让软件默认生成呢? 格式化输出 可以用占位符 %s string的缩写 #__author:Administra ...
- day04_08 while循环02
练习题: 1.输出九九乘法表 2.使用#号输出一个长方形,用户可以指定宽和高,如果长为3,高为4,则输出一个 横着有3个#号,竖着有4个#号 的长方形. 3.如何输出一个如下的直角三角形,用户指定输出 ...
- Leetcode 466.统计重复个数
统计重复个数 定义由 n 个连接的字符串 s 组成字符串 S,即 S = [s,n].例如,["abc", 3]="abcabcabc". 另一方面,如果我们可 ...
- 骨牌覆盖问题总结!hihoCoder/ NYOJ-1273宣传墙1151
本想着做一下第九届河南省省赛题,结果被这个类似骨牌覆盖的题卡住了,队友然我去hihoCoder上老老实实把骨牌覆盖一.二.三做完,这题就没什么问题了.虽然很不情愿,但还是去见识了一下. 骨牌覆盖问题 ...
- Xcode中断点的使用
注:本文由破船译自:albertopasca.本文由HoNooD在iosfeed站点上做了推荐. 这里先推荐两篇Xcode相关的文章: Xcode Code Snippets iOS调试 — 基本技巧 ...
- Codeforces 899D Shovel Sale
题目大意 给定正整数 $n$($2\le n\le 10^9$). 考虑无序整数对 $(x, y)$($1\le x,y\le n, x\ne y$). 求满足 「$x+y$ 结尾连续的 9 最多」的 ...