SSM整合:原始方式
01:SSM整合:原始方式
02:SSM整合:Spring整合Mybatis
文章目录
- 1. 原始方式
- 1.1 准备工作
- 1.1 导入相关的Maven依赖
- 1.2 编写实体类
- 1.3 编写Mapper接口
- 1.4 编写Service接口
- 1.5 编写Service接口实现
- 1.6 编写Controller
- 1.7 编写页面
- 1.8 编写相应配置文件
- 1.9 启动项目进行测试
1. 原始方式
1.1 准备工作
执行下列sql,创建数据库表
create database ssm;
use ssm;
create table account (
id int primary key auto_increment,name varchar (100) ,
money double (7,2)
);INSERT INTO `account` VALUES (1, 'tom', 5000.00);
INSERT INTO `account` VALUES (2, 'jack', 5000.00);
创建项目
1.1 导入相关的Maven依赖
pom.xml
<dependencies><!--spring相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.5.RELEASE</version></dependency><!-- aop织入依赖包--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.7</version></dependency><!-- spring-jdbc依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.5.RELEASE</version></dependency><!-- spring测试依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.5.RELEASE</version></dependency><!-- springmvc依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.0.5.RELEASE</version></dependency><!--servlet依赖--><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><!-- jsp依赖--><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version></dependency><!-- jstl表达式--><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!--mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!-- mybatis-整合spring依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><!-- mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version></dependency><!-- c3p0连接池--><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency><!-- 单元测试依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies>
1.2 编写实体类
1.3 编写Mapper接口
1.4 编写Service接口
1.5 编写Service接口实现
准备工作:
package com.tian.utils;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class MybatisUtils {// SqlSessionFactory-->sessionprivate static SqlSessionFactory sqlSessionFactory;static {try {// 第一步: 使用Mybatis获取SqlSessionFactory对象String resource = "sqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。// SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。public static SqlSession getSqlSession() {// true 配置自动提交事务return sqlSessionFactory.openSession(true);}
}
正式开始:
package com.tian.utils;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class MybatisUtils {// SqlSessionFactory-->sessionprivate static SqlSessionFactory sqlSessionFactory;static {try {// 第一步: 使用Mybatis获取SqlSessionFactory对象String resource = "sqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。// SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。public static SqlSession getSqlSession() {// true 配置自动提交事务return sqlSessionFactory.openSession(true);}
}
package com.tian.service.impl;import com.tian.domain.Account;
import com.tian.mapper.AccountMapper;
import com.tian.service.AccountService;
import com.tian.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Service;import java.util.List;@Service("accountService")
public class AccountServiceImpl implements AccountService {@Overridepublic void save(Account account) {SqlSession sqlSession = MybatisUtils.getSqlSession();AccountMapper accountMapper = sqlSession.getMapper(AccountMapper.class);accountMapper.save(account);}@Overridepublic List<Account> findAll() {SqlSession sqlSession = MybatisUtils.getSqlSession();AccountMapper accountMapper = sqlSession.getMapper(AccountMapper.class);return accountMapper.findAll();}
}
1.6 编写Controller
package com.tian.controller;import com.tian.domain.Account;
import com.tian.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;import java.util.List;@Controller
@RequestMapping("/account")
public class AccountController {@Autowiredprivate AccountService accountService;@RequestMapping(value = "/save", produces = "text/html;charset=UTF-8")@ResponseBodypublic String save(Account account) {accountService.save(account);return "保存成功";}//查询@RequestMapping("/findAll")public ModelAndView findAll() {List<Account> accountList = accountService.findAll();ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("accountList", accountList);modelAndView.setViewName("accountList");return modelAndView;}
}
1.7 编写页面
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
</body><a href="${pageContext.request.contextPath}/account/findAll">展示所有数据</a>
<br>
<a href="${pageContext.request.contextPath}/save.jsp">新增数据
</a>
</html>
save.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><h1>添加账户信息表单</h1><form name="accountForm" action="${pageContext.request.contextPath}/account/save" method="post">账户名称:<input type="text" name="name"><br>账户金额:<input type="text" name="money"><br><input type="submit" value="保存"><br></form>
</body>
</html>
accountList.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Title</title>
</head>
<body><h1>展示账户数据列表</h1><table border="1"><tr><th>账户id</th><th>账户名称</th><th>账户金额</th></tr><c:forEach items="${accountList}" var="account"><tr><td>${account.id}</td><td>${account.name}</td><td>${account.money}</td></tr></c:forEach></table>
</body>
</html>
1.8 编写相应配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tian.mapper.AccountMapper"><insert id="save" parameterType="account">insert into ssm.accountvalues (#{id}, #{name}, #{money})</insert><select id="findAll" resultType="account">select *from ssm.account</select>
</mapper>
applicationContext.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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"><!--组件扫描 扫描service和mapper--><context:component-scan base-package="com.tian"><!--排除controller的扫描--><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan>
</beans>
jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=317525
log4j.properties
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=debug, stdout
spring-mvc.xml
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"><!--组件扫描 主要扫描controller--><context:component-scan base-package="com.tian.controller"/><!--配置mvc注解驱动--><mvc:annotation-driven/><!--内部资源视图解析器--><bean id="resourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean><!--开发静态资源访问权限--><mvc:default-servlet-handler/>
</beans>
sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--加载properties文件--><properties resource="jdbc.properties"/><!--定义别名--><typeAliases><!--<typeAlias type="com.itheima.domain.Account" alias="account"></typeAlias>--><package name="com.tian.domain"/></typeAliases><!--环境--><environments default="dev"><environment id="dev"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--加载映射--><mappers><mapper resource="mapper/AccountMapper.xml"/></mappers>
</configuration>
补充说明(可以直接配置包扫描,类型于下面这样):
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_2_5.xsd"id="WebApp_ID" version="2.5"><!--spring 监听器--><!-- ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext(spring核心配置文件)的配置信息。--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 --><!-- 注册DispatcherServlet--><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 --><init-param><!-- contextConfigLocation为固定值 已经在DispatcherServlet中定义好了--><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><!--作为框架的核心组件,在启动过程中有大量的初始化操作要做而这些操作放在第一次请求时才执行会严重影响访问速度因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时 --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><!--设置springMVC的核心控制器所能处理的请求的请求路径/所匹配的请求可以是/login或.html或.js或.css方式的请求路径但是/不能匹配.jsp请求路径的请求/* 可以匹配所有请求 包括jsp--><url-pattern>/</url-pattern></servlet-mapping><!--配置全局过滤的filter 解决请求乱码问题--><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>
1.9 启动项目进行测试
SSM整合:原始方式相关推荐
- SSM整合之纯注解方式,注解实现事务,异常,与拦截器
SSM整合之纯注解方式Spring,SpringMVC,Mybatis 使用纯注解的方式,整合ssm, sql语句与数据表 在上一篇SSM整合之XML方式中有, 创建maven项目(代码中注释为详细解 ...
- SSM整合之XML方式,与配置事务,拦截器,异常处理,PageHelper分页插件整合
SSM整合之XML方式 将主流的三大框架整合一起使用 spring:将需要的bean交给IOC管理 SpringMVC:解决表现层 MyBatis:解决持久层 创建maven项目(配置文件与代码中注释 ...
- 常用的SSM整合方式
常用的SSM整合方式 看见网上这么多的整合方法,实在是眼花缭乱,看不过来,有些资料仅仅是整合某个部分,或者是整合的方式太过简陋,在实际开发中根本不会使用.接下来我页也来写一篇我平时写项目用的整合方式, ...
- SSM框架学习文档以及SSM整合(附Github地址=含SSM学习时的实例代码)
SSM框架学习 软件架构: 基于流行SSM框架:Spring+SpringMVC+Mybatis 项目配置: 使用Maven进行项目jar导入 使用Git进行版本控制,并将每次编写的代码上传到Gi ...
- (续)SSM整合之springmvc笔记(@RequestMapping注解)(P124-130)
目录 @RequestMapping注解 一.准备工作 1 新建spring_mvc_demo com.atguigu 2. 导入依赖 3 .添加web模板 4 . 在web.xml里面进行进行 ...
- 超十万字_超详细SSM整合实践_手动实现权限管理
SSM整合_基础配置 SSM框架中包含Spring,SpringMVC,Mybatis.而Spring与SpringMVC都是Spring Framework的模块,无需整合.只需将Mybatis与S ...
- SSM整合shiro权限框架
一.SSM整合shiro框架 1.步骤 1.添加shiro框架需要的jar包,包括shiro-core.shiro-web.shiro-spring的关系依赖 <!-- shiro jar包依赖 ...
- 快速入门SSM整合配置建立第一个SSM项目模板
场景 对于新手来说,学过Spring.SpringMVC.Mybatis,但是将其整合起来搭建项目就 比较困难. 环境 Eclipse+Mysql5.7+jdk8,没有搭建Maven项目,入门已经将需 ...
- java框架ssm整合_SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...
最新文章
- ECJTUACM16 Winter vacation training #5 题解源码
- BZOJ4127Abs——树链剖分+线段树
- [react-router] React-Router怎么获取历史对象?
- 如何写一个数据库中间件以及需要准备的知识储备
- python math库函数源码_11. math库函数
- 为什么说在国内考CISP比CISSP要好?
- MyCat分布式数据库集群架构工作笔记0015---高可用_负载均衡_Mycat双主双从读写分离
- Stm32:半主机模式
- android gsm编程,Android新手入门 FAQ
- 盘点大数据分析AI工具的常用算法
- The type of the expression must be an array type but it resolved to ListObj
- torch.Tensor
- 华为服务器智能机柜,华为网络柜 室内一体柜 华为服务器机柜
- 七牛服务器提供的压缩图片的方法
- 著名设计师的标志(Logo)设计观 1
- 分布式监控工具zabbix 配置安装
- 字节跳动2020秋招研发笔试题
- u盘无响应+开启什么服务器,服务没有及时响应启动或控制请求怎么办?如何解决系统服务没有及时响应启动...
- 固定资产管理流程和技巧
- WJ的操作系统知识点总结
热门文章
- python数据分析----matplotlib、numpy
- 【记录】网页获取微信授权
- 微信小程序商机_微信小程序可能有哪些创业机会?
- 【Android校招】六家大厂一起发难
- vue 天气插件 —— 创建标准版天气插件的使用——基础积累
- 刷题笔记(十四)--二叉树:层序遍历和DFS,BFS
- mac打开盖子与合上后外接显示器颜色不一样
- linux wifi驱动分析,REL8192EU wifi linux驱动安装详解
- 计算机高职400到430大学,高职考会计专业各高校的录取分数是多少?
- 智安网络|弹性网络与网络安全:保卫数字世界的关键联结