SSM框架整合

1.整合注意事项

1.1 查看不同MyBatis版本整合Spring时使用的适配包;

1.2 下载整合适配包

https://github.com/mybatis/spring/releases

1.3 官方整合示例,jpetstore

https://github.com/mybatis/jpetstore-6

2.整合思路、步骤

2.1 搭建环境

①创建一个动态的WEB工程

②导入SSM需要使用的jar包
③导入整合适配包
④导入其他技术的一些支持包 连接池 数据库驱动 日志…
(相关jar包提取地址链接:https://pan.baidu.com/s/1-Ea3ETnR59e_R943OPZ8YQ 提取码:31fo )
直接将以上jar包导入至你的web项目的WEB-INF下的lib内

2.2 Spring + Springmvc

​ ①在web.xml中配置: Springmvc的前端控制器、实例化Spring容器的监听器、字符编码过滤器 、REST过滤器

​ ②创建Spring的配置文件: applicationContext.xml:组件扫描、 连接池、 事务…

​ ③创建Springmvc的配置文件: springmvc.xml : 组件扫描、 视图解析器 、mvc:...

2.3 MyBatis

​ ①创建MyBatis的全局配置文件

​ ②编写实体类 Mapper接口 Mapper映射文件

2.4 Spring + MyBatis

​ ①MyBatis的 SqlSession的创建 .

​ ②MyBatis的 Mapper接口的代理实现类

2.5 测试: REST CRUD

①查询所有的员工信息,列表显示
②增删改

3.整合的配置

3.1 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"><!-- 字符编码过滤器  --><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><!-- 解决响应乱码 --><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 处理REST风格的过滤器  --><filter><filter-name>hiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>hiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- Spring监听器:监听ServletContext对象,在服务器启动阶段,ServletContext对象会被创建,监听器中的方法会被执行,创建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中央调度器 --><servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置SpringMVC读取配置文件的路径 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><!-- 服务器启动阶段实例化Servlet --><load-on-startup>1</load-on-startup></servlet> <servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

3.2 spring配置

<?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"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"><!-- 组件扫描  --><context:component-scan base-package="com.tencent.ssm"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- 读取外部配置文件  --><context:property-placeholder location="classpath:db.properties"/><!-- 数据源 连接池  --><bean  id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean><!-- Spring对事务的支持  --><bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 开启事务注解支持 --><tx:annotation-driven transaction-manager="dataSourceTransactionManager"/><!-- 配置SqlSessionFactoryBean  --><bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 指定mybatis主配置文件的路径 --><property name="configLocation" value="classpath:MyBatis-conf.xml"/><property name="dataSource" ref="dataSource"></property></bean><!-- 配置MapperScannerConfiger类,扫描接口所在的包,动态创建代理对象 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 指定接口所在的包  --><property name="basePackage" value="com.tencent.ssm.mapper"></property></bean>
</beans>

注:配置数据源(通过Druid连接池的方式)将数据库的信息单独的放在db.properties配置文件中

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

3.3 SpringMVC配置

<?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"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- 组件扫描 --><context:component-scan base-package="com.tencent.ssm" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- 视图解析器  --><bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean><!-- 对静态资源的处理  --><mvc:default-servlet-handler/><!-- 开启MVC注解的支持  --><mvc:annotation-driven/>
</beans>

3.4 MyBatis配置

①全局文件配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- Content Model : (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?) -->
<configuration><settings><!-- 将数据库下划线命名方式映射为java的驼峰命名法 --><setting name="mapUnderscoreToCamelCase" value="true"/></settings><!-- 取别名 --><typeAliases><package name="com.tencent.ssm.beans"/></typeAliases><!-- 引入SQL映射文件,Mapper映射文件resource : 引入类路径下的文件 url : 引入网络路径或者是磁盘路径下的文件class : 引入Mapper接口--><mappers><!-- 批量注册 --><package name = "com.tencent.ssm.mapper" /></mappers>
</configuration>

②映射文件配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.ssm.mapper.EmployeeMapper"><!-- public List<Employee> getAllEmps(); --><select id="getAllEmps" resultMap="myEmpsAndDept" >select e.id eid, e.last_name,e.email,e.gender, d.id did, d.dept_namefrom tbl_employee e ,tbl_dept d where e.d_id = d.id </select><resultMap type="com.atguigu.ssm.beans.Employee" id="myEmpsAndDept"><id column="eid" property="id"/><result column="last_name" property="lastName"/><result column="email" property="email"/><result column="gender" property="gender"/><association property="dept" javaType="com.atguigu.ssm.beans.Department"><id column="did" property="id"/><result column="dept_name" property="departmentName"/></association></resultMap>
</mapper>

3.5 Spring整合MyBatis配置(在application.xml中添加以下配置)

<!-- Spring 整合 Mybatis -->
<!-- 配置SqlSessionFactoryBean  -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 指定mybatis主配置文件的路径 --><property name="configLocation" value="classpath:MyBatis-conf.xml"/><!-- 指定数据源 --><property name="dataSource" ref="dataSource"></property>
</bean><!-- 配置MapperScannerConfiger类,扫描接口所在的包,动态创建代理对象 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 指定接口所在的包  --><property name="basePackage" value="com.tencent.ssm.mapper"></property>
</bean>

SSM整合配置完成后项目目录结构:

4.测试REST CRUD

4.1 显示所有员工

①首先在beans包下创建一个员工类Employee.java和部门类Departmengt.java

package com.tencent.ssm.beans;import java.io.Serializable;public class Employee implements Serializable{/*** */private static final long serialVersionUID = 1L;private Integer id;private String lastName;private Integer gender;private String descr;private Department dept;public Employee(Integer id, String lastName, Integer gender, String descr) {super();this.id = id;this.lastName = lastName;this.gender = gender;this.descr = descr;}public Employee() {super();}public Department getDept() {return dept;}public void setDept(Department dept) {this.dept = dept;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public Integer getGender() {return gender;}public void setGender(Integer gender) {this.gender = gender;}public String getDescr() {return descr;}public void setDescr(String descr) {this.descr = descr;}@Overridepublic String toString() {return "Employee [id=" + id + ", lastName=" + lastName + ", gender=" + gender + ", descr=" + descr + "]";}
}
package com.tencent.ssm.beans;import java.io.Serializable;
import java.util.List;public class Department implements Serializable{/*** */private static final long serialVersionUID = 1L;private Integer id;private String deptName;private List<Employee> emps;public List<Employee> getEmps() {return emps;}public void setEmps(List<Employee> emps) {this.emps = emps;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getDeptName() {return deptName;}public void setDeptName(String deptName) {this.deptName = deptName;}@Overridepublic String toString() {return "Department [id=" + id + ", deptName=" + deptName + "]";}
}

②创建Mapper(在Mapper包下创建EmployeeMapper接口,添加显示所有员工的方法)

package com.tencent.ssm.mapper;import java.util.List;public interface EmployeeMapper<Employee> {   /** 显示所有员工*/List<Employee> getAllEmps();
}

③在WebContent目录下创建一个入口页面index.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>ssm整合测试</title></head><body><div align="center"><h1>SSM整合测试</h1><br><br><a href="${pageContext.request.contextPath}/emps">单击显示所有员工</a></div></body>
</html>

④创建Controller来处理请求

package com.tencent.ssm.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import com.tencent.ssm.beans.Employee;
import com.tencent.ssm.service.EmployeeService;@Controller
public class EmployeeController {//调用Service以便查询数据@Autowiredprivate EmployeeService employeeService;/**查询显示所有员工*/@RequestMapping("/emps")//通过RequestMapping注解来接收传来的/emps请求public String listAllEmps(Model model) {List<Employee> emps = employeeService.getAllEmps();model.addAttribute("emps", emps);return "list";}
}

⑤创建Service接口以及接口实现类完成员工的查询

package com.tencent.ssm.service;import java.util.List;import com.tencent.ssm.beans.Employee;public interface EmployeeService {/** 查询所有员工*/List<Employee> getAllEmps();}

impl:

package com.tencent.ssm.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.tencent.ssm.beans.Employee;
import com.tencent.ssm.mapper.EmployeeMapper;
import com.tencent.ssm.service.EmployeeService;@Service
public class EmployeeServiceImpl implements EmployeeService{@Autowiredprivate EmployeeMapper<Employee> employeeMapper;@Overridepublic List<Employee> getAllEmps() {       return employeeMapper.getAllEmps();}
}

⑥在WEB-INF下创建list.jsp跳转页面(增删改还未实现)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>员工列表</title>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">//页面加载完成之后$(function(){//给删除的超链接注册一个单击事件    $(".delHref").click(function(){//提示用户是否删除if(!confirm("您确定要删除这条记录吗?")){return false;}//获取超链接中href属性的值var hrefValue = $(this).attr("href");//将href属性的值赋值给form表单的action属性$("#delForm").attr("action",hrefValue);//提交form表单$("#delForm").submit();//终止超链接的执行return false;});});</script>
</head>
<body><h1 align="center">员工列表</h1><table border="1" align="center" width="70%"><tr><th>ID</th><th>LastName</th><th>Gender</th><th>Descr</th><th>DepartmentName</th><th>Operation</th></tr><c:forEach items="${requestScope.emps}" var="emp"><tr align="center"><td>${emp.id}</td><td>${emp.lastName}</td><td>${emp.gender == 1?"男":"女"}</td><td>${emp.descr}</td><td>${emp.dept.deptName}</td><td><a href="${pageContext.request.contextPath}/emp/${emp.id}">Edit</a><a class="delHref" href="${pageContext.request.contextPath}/emp/${emp.id}">Delete</a></td>         </tr></c:forEach></table><form id="delForm" action="" method="post"><input type="hidden" name="_method" value="delete"></form><div align="center"><a href="${pageContext.request.contextPath}/emp" >添加员工</a></div>
</body>
</html>

⑦测试

4.2 增加员工

4.3 删除员工

4.4 修改员工

(注:以上包的命名以及数据库的数据创建纯属娱乐,大家以学习为主,整体项目在下面分享中,后三个功能正在完善)
链接:https://pan.baidu.com/s/1_-dLW-cLVAyVSt9tGrkELA
提取码:te9c

SSM框架整合+简单的增删改查的实现相关推荐

  1. 浅谈IDEA+Maven 整合SSM框架实现简单的增删改查

    SSM SSM(Spring+SpringMVC+MyBatis)框架集由Spring.MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容).常作为数据源较简单的web项 ...

  2. SSM整合--简单的增删改查--修改用户信息

    SSM整合--简单的增删改查 修改用户信息 修改用户信息 ## 根据id查找用户信息,显示在employ_update页面 ## 进行修改信息后,提交表单,保存数据### 1.根据id查询用户信息 h ...

  3. ssm框架restful风格实现增删改查

    1.什么是restful风格 大家在做Web开发的过程中,method常用的值是get和post. 可事实上,method值还可以是put和delete等等其他值. 既然method值如此丰富,那么就 ...

  4. ssm整合(简单的增删改查)

    1 创建maven web项目: 2 添加jar包(所有的依赖) <dependencies><dependency><groupId>junit</grou ...

  5. SSH整合 简单的增删改查

    Database 使用 Mysql , 建立User 表 CREATE TABLE `user` (`id` int(11) NOT NULL,`firstName` varchar(20) DEFA ...

  6. Springboot整合JDBC和DBUtils,实现简单的增删改查.

    Springboot整合JDBC和DBUtils,实现简单的增删改查. 一.pom.xml文件 <?xml version="1.0" encoding="UTF- ...

  7. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 1 Public static void main(String[] arg ...

  8. Flask框架——数据库操作命令(增删改查)

    目录 创建数据表 添加数据 插入单条数据 插入多条数据 查询数据 全部查询 精确查询 模糊查询 主键查询 排序 修改数据 删除数据 删除数据表 上篇文章我们学习了Flask框架--数据库配置及迁移同步 ...

  9. Hibernate简单实现增删改查

    Hibernate简单实现增删改查 2020.08.10 用了一下午时间入门了Hibernate给和我一样想学的小白分享一下 hibernate是一个对象关系映射框架 它对jdbc进行了封装只需要调用 ...

  10. SpringMVC_实现简单的增删改查

    实现简单的增删改查 1:创建User的javabean package com.doaoao.bean; public class User {private String name;private ...

最新文章

  1. 区块链课程笔记-第一课哈希算法在加密中的应用
  2. strdup() - 它在C中做了什么?
  3. 平台型OA=高性价比OA?
  4. java 内部类异常_Java笔记(三 内部类、异常、编程规范)
  5. linux 安装wdcp控制面板
  6. Response.Redirect(),Server.Transfer(),Server.Execute()的区别
  7. bat复制文件到指定目录同名_scp复制文件时排除指定文件
  8. 怎么在html中加入相对链接,html直接跳转超链接 html中怎么实现同一页面超级链接...
  9. hdu4616_Game_树形DP
  10. Spark2.2(三十九):如何根据appName监控spark任务,当任务不存在则启动(任务存在当超过多久没有活动状态则kill,等待下次启动)...
  11. 只需一个技巧,用手机轻松拍出震撼广角风景照
  12. Cisco Packet Tracer安装及简单使用教程(初学者笔记)
  13. google浏览器截取长图
  14. AI学习 Day09 面向对象基础(下)
  15. lg-1 x 怎么算_纯爱|电竞新文《队友太会撒娇了怎么办》《转会后我成了团宠》...
  16. 同一包(package)下,两个不同类的调用操作详解
  17. cmd中文输入和显示问题
  18. 数据分析、数据可视化中的常用图形
  19. FT2000+下40G网卡性能优化
  20. 转 ROS:解决Error:cannot launch node of type [map_server/map_server]: can't locate node [map_server]

热门文章

  1. 什么是信息安全管理体系
  2. 自学考c语言计算机二级会,2级c语言(全国c语言二级考试题库)
  3. DJ Mix Pads 2 - Remix Version for Mac(独特DJ混音创作软件)
  4. mame 最新版本以及fba 编译
  5. c语言标准库函数大全用法,C 标准库函数
  6. 仓储系统货位优化毕业论文【Flexsim仿真】
  7. IPv4地址中的保留和特殊用途地址
  8. rectangle函数与Rect函数的用法
  9. 接入阿里云云呼叫中心
  10. 【Spring学习03】Spring简单入门实例