SSM整合实现增删改查操作【保姆式教学】

编程入门 行业动态 更新时间:2024-10-03 10:48:19

SSM整合实现增删改查操作【<a href=https://www.elefans.com/category/jswz/34/1763615.html style=保姆式教学】"/>

SSM整合实现增删改查操作【保姆式教学】

SSM整合实现增删改查操作【保姆式教学】

  • 准备工作
    • 环境准备
    • 数据库准备
  • 开始干活
    • 新建个Maven项目ssmtest,加上Web支持
    • 添加依赖
    • 完整的pom.xml
    • 创建entity、dao、service、controller包
    • 实体类编写
      • 添加lombook
    • 持久层接口编写
    • 业务层接口编写
    • 业务层实现类编写
    • 表现层编写
    • 整合步骤
      • 保证 Spring 框架在 web 工程中独立运行
        • 第一步:编写 spring 配置文件并导入约束
        • 第二步:使用注解配置业务层
        • 第三步:导入log4j.properties配置文件
        • 第四步:测试 spring 能否独立运行
      • 保证 SpringMVC 在 web 工程中独立运行
        • 第一步:编写 SpringMVC 的配置文件
        • 第二步:在 web.xml 中配置核心控制器(DispatcherServlet)
        • 第三步:编写 Controller 和 jsp 页面
        • 第四步:部署tomcat服务器
        • 第五步:启动服务器,进行测试
      • Spring 整合 SpringMVC 的框架
        • 第一步:配置监听器实现启动服务创建容器
        • 第二步:在controller中注入service对象,调用service对象的方法进行测试
      • 保证 MyBatis 框架在 web 工程中独立运行
        • 第一步:在web项目中编写SqlMapConfig.xml的配置文件,编写核心配置文件
        • 第二步:在IUserDao接口的方法上添加注解,编写SQL语句
        • 第三步:编写测试的方法
      • Spring 整合 MyBatis 框架
        • 第一步:把SqlMapConfig.xml配置文件中的内容配置到applicationContext.xml配置文件中
        • 第三步:在IUserDao接口中添加@Repository注解
        • 第四步:在UserServiceImpl中注入dao对象
        • 第五步:修改 UserController 代码
        • 第五步:修改 user_list.jsp 代码,实现显示账户信息
        • 第六步:测试查询
        • 第七步:测试保存
    • 增删改查(前后端分离)
      • 查找
  • 前端vue项目
    • 创建个空的vue项目
    • 关闭代码格式化校验工具
    • 安装相关的工具
    • 目录结构
      • 编写main.js
      • 编写App.vue
      • 编写router文件夹下的index.js
      • 编写公共部分的menu.vue
      • 编写views下的index.vue
      • 编写views下的user下的index.vue
    • 效果展示

准备工作

环境准备

  • IDEA
  • MySQL 5.7.31
  • Tomcat 8.5.64
  • Maven 3.6.3

这是我的环境,版本别差太大就没问题。

数据库准备


CREATE DATABASE `ssmtest`;USE `ssmtest`;DROP TABLE IF EXISTS `user`;CREATE TABLE `user`(`userid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '用户ID',`username` VARCHAR(100) NOT NULL COMMENT '用户名',`password` VARCHAR(100) NOT NULL COMMENT '用户密码',`value` INT(10) NOT NULL DEFAULT 1 COMMENT '状态,1正常',KEY `userid`(`userid`)) ENGINE=INNODB DEFAULT CHARSET=utf8;INSERT INTO `user`(`userid`,`username`,`password`,`value`)VALUES
(1,'keafmd','666',1),
(2,'keafod','888',1);

开始干活

新建个Maven项目ssmtest,加上Web支持




创建完成的效果:

添加依赖

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><mavenpiler.source>1.8</mavenpiler.source><mavenpiler.target>1.8</mavenpiler.target><!--统一的版本管理--><spring.version>5.2.7.RELEASE</spring.version><slf4j.version>1.7.6</slf4j.version><log4j.version>1.2.12</log4j.version><mysql.version>5.1.49</mysql.version><mybatis.version>3.4.5</mybatis.version>
</properties><dependencies><!-- spring --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.5</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!--Junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>compile</scope></dependency><!--数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- 数据库连接池 --><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.1</version><type>jar</type><scope>compile</scope></dependency><!--Servlet - JSP --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!--Mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.2</version></dependency><!-- log  --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency></dependencies>

完整的pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns=".0.0" xmlns:xsi=""xsi:schemaLocation=".0.0 .0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.keafmd</groupId><artifactId>ssmtest</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>ssmtest Maven Webapp</name><!-- FIXME change it to the project's website --><url>;/url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><mavenpiler.source>1.8</mavenpiler.source><mavenpiler.target>1.8</mavenpiler.target><!--统一的版本管理--><spring.version>5.2.7.RELEASE</spring.version><slf4j.version>1.7.6</slf4j.version><log4j.version>1.2.12</log4j.version><mysql.version>5.1.49</mysql.version><mybatis.version>3.4.5</mybatis.version></properties><dependencies><!-- spring --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.5</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!--Junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>compile</scope></dependency><!--数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- 数据库连接池 --><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.1</version><type>jar</type><scope>compile</scope></dependency><!--Servlet - JSP --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!--Mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.2</version></dependency><!-- log  --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency></dependencies><build><finalName>ssmtest</finalName><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see .html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></pluginManagement></build>
</project>

创建entity、dao、service、controller包

实体类编写

添加lombook


User:

package com.keafmd.entity;import lombok.Data;import java.io.Serializable;/*** Keafmd** @ClassName: User* @Description: 用户实体类* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:11* @Blog: /*/
@Data
public class User implements Serializable {private Integer userId;private String userName;private String password;}

持久层接口编写

IUserDao :

package com.keafmd.dao;import com.keafmd.entity.User;import java.util.List;/*** Keafmd** @ClassName: IUserDao* @Description: 用户dao接口* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:20* @Blog: /*/
public interface IUserDao {//查询所有public List<User> findAll();//保存用户public void saveUser(User user);
}

业务层接口编写

IUserService:

package com.keafmd.service;import com.keafmd.entity.User;import java.util.List;/*** Keafmd** @ClassName: IUserService* @Description: user业务层接口* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:23* @Blog: /*/
public interface IUserService {//查询所有public List<User> findAll();//保存用户public void saveUser(User user);}

业务层实现类编写

UserServiceImpl :

package com.keafmd.service.impl;import com.keafmd.entity.User;
import com.keafmd.service.IUserService;import java.util.List;/*** Keafmd** @ClassName: UserService* @Description: user业务层实现类* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:25* @Blog: /*/
public class UserServiceImpl implements IUserService {@Overridepublic List<User> findAll() {System.out.println("user业务层实现类--findAll");return null;}@Overridepublic void saveUser(User user) {System.out.println("user业务层实现类--saveUser");}
}

表现层编写

UserController :

package com.keafmd.controller;/*** Keafmd** @ClassName: UserController* @Description: user控制层* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:28* @Blog: /*/
public class UserController {
}

整合步骤

保证 Spring 框架在 web 工程中独立运行

第一步:编写 spring 配置文件并导入约束

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xmlns:context=""xmlns:aop="" xmlns:tx=""xsi:schemaLocation="://www.springframework/schema/beans/spring-beans.xsd://www.springframework/schema/context/spring-context.xsd://www.springframework/schema/aop/spring-aop.xsd://www.springframework/schema/tx/spring-tx.xsd"><!-- 开启注解扫描,要扫描的是service和dao层的注解,要忽略web层注解,因为web层让SpringMVC框架去管理 --><context:component-scan base-package="com.keafmd"><!-- 配置要忽略的注解 --><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan></beans>
第二步:使用注解配置业务层

在 UserServiceImpl 方法上加上 @Service("userService").

package com.keafmd.service.impl;import com.keafmd.entity.User;
import com.keafmd.service.IUserService;
import org.springframework.stereotype.Service;import java.util.List;/*** Keafmd** @ClassName: UserService* @Description: user业务层实现类* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:25* @Blog: /*/
@Service("userService")
public class UserServiceImpl implements IUserService {@Overridepublic List<User> findAll() {System.out.println("user业务层实现类--findAll");return null;}@Overridepublic void saveUser(User user) {System.out.println("user业务层实现类--saveUser");}
}
第三步:导入log4j.properties配置文件
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=info, CONSOLE, LOGFILE# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.apache.axis.enterprise=FATAL, CONSOLE# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
第四步:测试 spring 能否独立运行

测试代码:

package com.keafmd;import com.keafmd.service.IUserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Keafmd** @ClassName: TestSpring* @Description: 测试 spring 能否独立运行* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:38* @Blog: /*/
public class TestSpring {@Testpublic void test1(){//加载配置文件ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");//获取对象IUserService userService = (IUserService)ac.getBean("userService");//调用方法userService.findAll();}
}

测试效果:

保证 SpringMVC 在 web 工程中独立运行

第一步:编写 SpringMVC 的配置文件

springmvc.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:mvc=""xmlns:context=""xmlns:xsi=""xsi:schemaLocation=" ://www.springframework/schema/beans/spring-beans.xsd://www.springframework/schema/mvc/spring-mvc.xsd://www.springframework/schema/context/spring-context.xsd"><!-- 开启注解扫描,扫描controller的注解,别的不扫描 --><context:component-scan base-package="com.keafmd"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- 配置视图解析器 --><bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- JSP文件所在的目录 --><property name="prefix" value="/WEB-INF/pages/"/><!-- 文件的后缀名 --><property name="suffix" value=".jsp"/></bean><!-- 过滤静态资源,设置静态资源不过滤 --><mvc:resources location="/css/" mapping="/css/**"/><mvc:resources location="/images/" mapping="/images/**"/><mvc:resources location="/js/" mapping="/js/**"/><!-- 开启对SpringMVC注解的支持 --><mvc:annotation-driven/></beans>
第二步:在 web.xml 中配置核心控制器(DispatcherServlet)

web.xml:

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"".dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!-- 配置前端控制器:服务器启动必须加载,需要加载springmvc.xml配置文件 --><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置初始化参数,加载springmvc.xml配置文件 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 启动服务器,创建该servlet --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--解决中文乱码的过滤器--><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>
第三步:编写 Controller 和 jsp 页面

UserController :

package com.keafmd.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/*** Keafmd** @ClassName: UserController* @Description: user控制层* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:28* @Blog: /*/
@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/findAll")public String findAll(){System.out.println("表现层--查询所有用户");return "user_list";}
}

index.jsp:

<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/4/19Time: 9:52To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><a href="user/findAll">查询所有用户</a></body>
</html>

user_list.jsp:

<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/4/19Time: 9:55To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><h1>查询所有用户</h1></body>
</html>
第四步:部署tomcat服务器






-Dfile.encoding=utf-8

第五步:启动服务器,进行测试


点击后的效果:

Spring 整合 SpringMVC 的框架

第一步:配置监听器实现启动服务创建容器
<!-- 配置 spring 提供的监听器,用于启动服务时加载容器 。该监听器只能加载 WEB-INF 目录中名称为 applicationContext.xml 的配置文件 -->
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 手动指定 spring 配置文件位置 -->
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value>
</context-param>

完整的web.xml:

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"".dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!-- 配置前端控制器:服务器启动必须加载,需要加载springmvc.xml配置文件 --><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置初始化参数,加载springmvc.xml配置文件 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 启动服务器,创建该servlet --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 配置 spring 提供的监听器,用于启动服务时加载容器 。该监听器只能加载 WEB-INF 目录中名称为 applicationContext.xml 的配置文件 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 手动指定 spring 配置文件位置 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!--解决中文乱码的过滤器--><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>
第二步:在controller中注入service对象,调用service对象的方法进行测试

UserController :

package com.keafmd.controller;import com.keafmd.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/*** Keafmd** @ClassName: UserController* @Description: user控制层* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:28* @Blog: /*/
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate IUserService userService;@RequestMapping("/findAll")public String findAll(){System.out.println("表现层--查询所有用户");//调用service的方法userService.findAll();return "user_list";}
}

重启Tomcat点击查询所有用户,控制台输出效果如下:

保证 MyBatis 框架在 web 工程中独立运行

第一步:在web项目中编写SqlMapConfig.xml的配置文件,编写核心配置文件

SqlMapConfig.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis//DTD Config 3.0//EN"".dtd">
<configuration><!-- 配置连接数据库的信息 --><properties resource="jdbcConfig.properties"></properties><!-- 配置mybatis的环境 --><environments default="mysql"><environment id="mysql"><!-- 配置事务管理 --><transactionManager type="JDBC"></transactionManager><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 class="com.keafmd.dao.IAccountDao"/><mapper class="com.keafmd.dao.IUserDao"/>--><package name="com.keafmd.dao"/></mappers>
</configuration>

jdbcConfig.properties:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmtest
jdbc.username=root
jdbc.password=18044229
第二步:在IUserDao接口的方法上添加注解,编写SQL语句

IUserDao :

package com.keafmd.dao;import com.keafmd.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;import java.util.List;/*** Keafmd** @ClassName: IUserDao* @Description: 用户dao接口* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:20* @Blog: /*/
public interface IUserDao {//查询所有@Select("select * from user")public List<User> findAll();//保存用户@Insert("insert into user(username,password) values(#{userName},#{password})")public void saveUser(User user);
}
第三步:编写测试的方法

TestMybatis :

package com.keafmd;import com.keafmd.dao.IUserDao;
import com.keafmd.entity.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.InputStream;
import java.util.List;/*** Keafmd** @ClassName: TestMybatis* @Description:* @author: 牛哄哄的柯南* @Date: 2021-04-19 10:20* @Blog: /*/
public class TestMybatis {private InputStream in;private SqlSessionFactory factory;private SqlSession session;private IUserDao userDao;@Beforepublic void init() throws Exception{//加载配置文件in = Resources.getResourceAsStream("SqlMapConfig.xml");//创建SqlSessionFactory对象factory = new SqlSessionFactoryBuilder().build(in);//创建SqlSession对象session = factory.openSession();//获取到代理对象userDao = session.getMapper(IUserDao.class);}@Afterpublic void destory() throws Exception{sessionmit();session.close();in.close();}/*** 查询所有*/@Testpublic void run1(){List<User> users = userDao.findAll();for (User user : users) {System.out.println(user);}}/*** 测试保存*/@Testpublic void saveUser(){User user = new User();user.setUserName("毛利小五郎");user.setPassword("999");userDao.saveUser(user);}}

测试效果:


Spring 整合 MyBatis 框架

把 mybatis 配置文件(SqlMapConfig.xml)中内容配置到 spring 配置文件中同时,把 mybatis 配置文件的内容清掉。

第一步:把SqlMapConfig.xml配置文件中的内容配置到applicationContext.xml配置文件中

把以下内容添加到applicationContext.xml配置文件中:

<!--Spring整合Mybatisl框架-->
<!-- 配置C3P0的连接池对象 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql:///ssmtest"/><property name="user" value="root"/><property name="password" value="18044229"/>
</bean>
<!-- 配置SqlSession的工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置扫描dao的包 -->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.keafmd.dao"/>
</bean><!--SqlMapConfig.xml和jdbcConfig.properties可以删除了-->

再添加上配置Spring框架声明式事务管理:

<!--配置Spring框架声明式事务管理-->
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置事务的通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="find*" propagation="SUPPORTS" read-only="true"/><tx:method name="*" isolation="DEFAULT"/></tx:attributes>
</tx:advice>
<!-- 配置AOP增强 -->
<aop:config><!--<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.keafmd.service.impl.*.*(..))"/>--><!-- 配置切入点表达式 --><aop:pointcut expression="execution(* com.keafmd.service.impl.*.*(..))" id="pt1"/><!-- 建立通知和切入点表达式的关系 --><aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/>
</aop:config>

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xmlns:context=""xmlns:aop="" xmlns:tx=""xsi:schemaLocation="://www.springframework/schema/beans/spring-beans.xsd://www.springframework/schema/context/spring-context.xsd://www.springframework/schema/aop/spring-aop.xsd://www.springframework/schema/tx/spring-tx.xsd"><!-- 开启注解扫描,要扫描的是service和dao层的注解,要忽略web层注解,因为web层让SpringMVC框架去管理 --><context:component-scan base-package="com.keafmd"><!-- 配置要忽略的注解 --><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!--Spring整合Mybatisl框架--><!-- 配置C3P0的连接池对象 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql:///ssmtest?characterEncoding=utf8"/><property name="user" value="root"/><property name="password" value="root"/></bean><!-- 配置SqlSession的工厂 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/></bean><!-- 配置扫描dao的包 --><bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.keafmd.dao"/></bean><!--SqlMapConfig.xml和jdbcConfig.properties可以删除了--><!--配置Spring框架声明式事务管理--><!--配置事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 配置事务的通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="find*" propagation="SUPPORTS" read-only="true"/><tx:method name="*" isolation="DEFAULT"/></tx:attributes></tx:advice><!-- 配置AOP增强 --><aop:config><!--<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.keafmd.service.impl.*.*(..))"/>--><!-- 配置切入点表达式 --><aop:pointcut expression="execution(* com.keafmd.service.impl.*.*(..))" id="pt1"/><!-- 建立通知和切入点表达式的关系 --><aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/></aop:config></beans>
第三步:在IUserDao接口中添加@Repository注解
package com.keafmd.dao;import com.keafmd.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;import java.util.List;/*** Keafmd** @ClassName: IUserDao* @Description: 用户dao接口* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:20* @Blog: /*/
@Repository
public interface IUserDao {//查询所有@Select("select * from user")public List<User> findAll();//保存用户@Insert("insert into user(username,password) values(#{userName},#{password})")public void saveUser(User user);
}
第四步:在UserServiceImpl中注入dao对象
package com.keafmd.service.impl;import com.keafmd.dao.IUserDao;
import com.keafmd.entity.User;
import com.keafmd.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** Keafmd** @ClassName: UserService* @Description: user业务层实现类* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:25* @Blog: /*/
@Service("userService")
public class UserServiceImpl implements IUserService {@AutowiredIUserDao userDao;@Overridepublic List<User> findAll() {System.out.println("user业务层实现类--findAll");return userDao.findAll();}@Overridepublic void saveUser(User user) {System.out.println("user业务层实现类--saveUser");userDao.saveUser(user);}
}
第五步:修改 UserController 代码
package com.keafmd.controller;import com.keafmd.entity.User;
import com.keafmd.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;/*** Keafmd** @ClassName: UserController* @Description: user控制层* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:28* @Blog: /*/
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate IUserService userService;@RequestMapping("/findAll")public String findAll(Model model){System.out.println("表现层--查询所有用户");//调用service的方法List<User> userList = userService.findAll();model.addAttribute("userList",userList);return "user_list";}@RequestMapping("/save")public void save(User user , HttpServletRequest request, HttpServletResponse response) throws IOException {userService.saveUser(user);response.sendRedirect(request.getContextPath()+"/user/findAll");return;}
}
第五步:修改 user_list.jsp 代码,实现显示账户信息
<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/4/19Time: 9:55To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@taglib prefix="c" uri="" %>
<html>
<head><title>Title</title>
</head>
<body><h1>查询所有用户</h1><%--    ${userList}--%><c:forEach items="${userList}" var="user">${user.userName}${user.password}</c:forEach></body>
</html>
第六步:测试查询

效果:

第七步:测试保存

修改index.jsp代码,添加测试保存的代码:

<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/4/19Time: 9:52To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><a href="user/findAll">查询所有用户</a><h1>测试保存</h1><form action="user/save" method="post">账户名:<input type="text" name="userName" /><br/>密码:<input type="text" name="password" /><br/><input type="submit" value="保存"></form></body>
</html>

修改 UserController 代码,添加save方法:

package com.keafmd.controller;import com.keafmd.entity.User;
import com.keafmd.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;/*** Keafmd** @ClassName: UserController* @Description: user控制层* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:28* @Blog: /*/
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate IUserService userService;@RequestMapping("/findAll")public String findAll(Model model){System.out.println("表现层--查询所有用户");//调用service的方法List<User> userList = userService.findAll();model.addAttribute("userList",userList);return "user_list";}@RequestMapping("/save")public void save(User user , HttpServletRequest request, HttpServletResponse response) throws IOException {userService.saveUser(user);response.sendRedirect(request.getContextPath()+"/user/findAll");return;}
}

测试效果:

增删改查(前后端分离)

查找

实际开发中,多为前后端分离,所以我们需要修改我们的表现层代码,同时需要添加上jackson的依赖。

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.11.0</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.0</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.11.0</version>
</dependency>

UserController:

package com.keafmd.controller;import com.keafmdmon.CommonResult;
import com.keafmd.entity.User;
import com.keafmd.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;/*** Keafmd** @ClassName: UserController* @Description: user控制层* @author: 牛哄哄的柯南* @Date: 2021-04-19 9:28* @Blog: /*/
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate IUserService userService;// http://127.0.0.1:8080/ssmtest/user/findAll@RequestMapping("/findAll")@ResponseBodypublic List<User> findAll(){System.out.println("表现层--查询所有用户");//调用service的方法List<User> userList = userService.findAll();
//        model.addAttribute("userList",userList);//        return "user_list";return userList;}@RequestMapping("/save")public void save(User user , HttpServletRequest request, HttpServletResponse response) throws IOException {userService.saveUser(user);response.sendRedirect(request.getContextPath()+"/user/findAll");return;}
}

访问: http://127.0.0.1:8080/ssmtest/user/findAll

前端vue项目

这里我们需要有相关的环境,这里不细说了。

创建个空的vue项目

找个文件夹进入命令行,输入:vue create ssmtest

关闭代码格式化校验工具

在项目的根目录(与package.json同级)中,添加名称为vue.config.js的文件,就能自动被vue-cli加载。

module.exports = {lintOnSave:false, //关闭代码格式化校验工具devServer:{port: 80 //修改启动端口}
}

安装相关的工具

1、安装vue-router

npm install vue-router

2、安装 element-ui插件

npm i element-ui -S

3、安装axios

npm install axios

目录结构

编写main.js

在这里引入各种组件,写上router。

import Vue from 'vue'
import App from './App.vue'import router from '@/router'import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';Vue.use(ElementUI);Vue.config.productionTip = falsenew Vue({render: h => h(App),router
}).$mount('#app')

编写App.vue

在div中写入<router-view></router-view>,用路由控制界面。

<template><div id="app"><router-view></router-view></div>
</template><script>
// import First from './components/First.vue'export default {name: 'App',components: {// First}
}
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

编写router文件夹下的index.js

在这里使用router配置各种路径

import Vue from 'vue'
import Router from 'vue-router'Vue.use(Router)
// import A from '@/components/A'
// import B from '@/components/B'export default new Router({mode: 'history',routes: [{path: '/',name: 'Index',component: () => import('@/views'),children: [{path: '/user',name: 'User',component: () => import('@/views/user')}]}// ,// {// 	path: '/user',// 	name: 'User',// 	component: () => import('@/views/user')// }// {//   path: '/aaa',//   name: 'A',//   component: A// },// {//   path: '/bbb',//   name: 'B',//   component: B// }]
})

编写公共部分的menu.vue

注意:在 el-menu 标签里注入router。

<template><el-menu router ><el-submenu index="1"><template slot="title"><span>管理</span></template><el-menu-item-group><el-menu-item index="/user"> <i class="el-icon-location"></i>用户管理</el-menu-item><!-- <el-menu-item index="/menu"> <i class="el-icon-location"></i>菜单管理</el-menu-item> --></el-menu-item-group></el-submenu><!-- <el-submenu index="2"><template slot="title"><span>ElementUI组件</span></template><el-menu-item-group><el-menu-item index="/table"> <i class="el-icon-location"></i>表格组件</el-menu-item></el-menu-item-group></el-submenu> --></el-menu></template><script>export default {name: 'Menu'}
</script><style>
</style>

编写views下的index.vue

<template><el-container class="wrap"><el-header class="header"><el-row><el-col :span="20">信息系统</el-col><el-col :span="4"><el-dropdown><span class="el-dropdown-link">keafmd<i class="el-icon-arrow-down el-icon--right"></i></span><el-dropdown-menu slot="dropdown"><el-dropdown-item command="Personal">个人设置</el-dropdown-item><el-dropdown-item command="Logout">退出</el-dropdown-item></el-dropdown-menu></el-dropdown></el-col></el-row></el-header><el-container><el-aside width="200px" class="aside"><Menu></Menu></el-aside><el-main><!-- <User></User> --><router-view></router-view></el-main></el-container></el-container></template><script>// import User from './user/index.vue'import Menu from '@/components/menu'export default {name: 'Index',components: {Menu// User},data() {return {}},methods: {},created() {}}
</script><style scoped>.wrap {height: 100vh;}.header {border-bottom: 1px solid aqua;}.aside {border-right: 1px solid aqua;}
</style>

编写views下的user下的index.vue

<template><div><el-table :data="tableData.filter(data => !search || data.name.toLowerCase().includes(search.toLowerCase()))"style="width: 100%"><el-table-column label="userName" prop="userName"></el-table-column><el-table-column label="Password" prop="password"></el-table-column><el-table-column align="right"><template slot="header" slot-scope="scope"><el-input v-model="search" size="mini" placeholder="输入关键字搜索" /></template><template slot-scope="scope"><el-button size="mini" @click="handleEdit(scope.$index, scope.row)">Edit</el-button><el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">Delete</el-button></template></el-table-column></el-table></div>
</template><script>import axios from 'axios';axios.defaults.baseURL = 'http://127.0.0.1:8080/ssmtest';export default {name: 'User',components: {},data() {return {tableData: [],search: ''}},methods: {getData() {axios.get('/user/findAll').then((res) => {this.tableData = res.data}).catch(function(error) {console.log(error);});},handleEdit(index, row) {console.log(index, row);},handleDelete(index, row) {console.log(index, row);}},created() {this.getData();}}
</script><style>
</style>

效果展示

查询效果:

看完如果对你有帮助,感谢点赞支持!
如果你是电脑端,看到右下角的 “一键三连” 了吗,没错点它[哈哈]


加油!

共同努力!

Keafmd

更多推荐

SSM整合实现增删改查操作【保姆式教学】

本文发布于:2024-02-28 06:56:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1768653.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:保姆   式教学   操作   SSM

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!