mysql|搭建SSM框架并实现增删查改功能


搭建SSM框架并实现增删查改功

  • 前言
    • 一、概述
    • 二、搭建一个SSM的过程
    • 三、配置相关文件
    • 四、在Java下创建测试类
    • 五、在webapp下创建html页面
【mysql|搭建SSM框架并实现增删查改功能】
要一直做勤快的人,加油
前言 使用eclipse+tomcat7+mysq+maven实现SSM框架下的增删查改功能,把自己的知识整理一下,方便以后查阅。
一、概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在近几年的开发中运用的更加广泛。
1.Spring作为一个分层的轻量级开源框架,解决了项目中的耦合问题。
两个核心:IOC(控制反转)和AOP(面向切面编程)。
同时,在也是我们在项目中我们经常使用的。
2.SpringMVC是Spring实现的一个Web层,相当于Struts的框架,但是比Struts更加灵活和强大!
3.Mybatis是 一个动态SQL语句的持久层的框架,它对JDBC的操作数据库的过程进行封装,使开发者只需关注SQL本身。在使用上相比Hibernate更加灵活,可以控制sql的编写,使用 XML或注解进行相关的配置!
这里简单介绍一下,更多信息请上百度搜索。
二、搭建一个SSM的过程 1.使用Maven管理项目
使用Maven在Eclipse中创建一个webapp的项目 ,具体的创建过程不做演示,如有不会创建的创建项目创建maven项目
也可以使用Maven命令进行创建,在Dos窗口进入指定的目录,执行下面命令
mvn archetype:create -DgroupId=org.ssm.dufy -DartifactId=ssm-demo
-DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
使用命令要注意,系统安装了Maven,并配置好了环境变量!(这个方法我没用过,网上看的,扩展一下自己)
2.导入项目(命名创建),添加依赖
导入项目是IDE中,或者直接在IDE创建,一般默认有【src/main/java】,手动创建【src/test/resources】、【src/test/java】文件夹。
注意导入maven项目和导入javaWeb项目有点不太一样。
数据请求过程如下:
1.客户端通过ajax发送请求;
2.控制层controller接收请求;
3.获取mysql数据,转为Json格式并返回给客户端;
4.客户端接收数据后显示。
项目结构如下:
mysql|搭建SSM框架并实现增删查改功能
文章图片

然后直接在pom.xml中配置包的依赖
4.0.0 com.wcx SSMR0308 1.0 war UTF-8 2.5.0 .version>4.3.16.RELEASE 1.9.1 3.4.6 org.springframework spring-core ${spring.version} org.springframework spring-aop ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-webmvc ${spring.version} org.springframework spring-jdbc ${spring.version} org.springframework spring-tx ${spring.version} aopalliance aopalliance 1.0 org.aspectj aspectjweaver ${aop.version} org.aspectj aspectjrt ${aop.version} org.mybatis mybatis ${mybatis.version} mysql mysql-connector-java 8.0.13 >runtime commons-dbcp commons-dbcp 1.4 org.mybatis mybatis-spring 1.3.2 javax.servlet jstl 1.2 redis.clients jedis 2.9.0 org.mybatis mybatis 3.2.8 org.mybatis mybatis-spring 1.2.2 mysql mysql-connector-java 5.1.6 com.alibaba druid 1.0.12 javax.servlet servlet-api 3.0-alpha-1 >provided javax.servlet jstl 1.2 org.codehaus.jackson jackson-mapper-asl 1.9.13 com.fasterxml.jackson.core jackson-annotations ${jackson.version} com.fasterxml.jackson.core jackson-core ${jackson.version} com.fasterxml.jackson.core jackson-databind ${jackson.version}

三、配置相关文件 在resources文件下创建相关文件
1.配置jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull&characterEncoding=utf-8 jdbc.username=root jdbc.password=root

2.配置ApplicationContent.xml文件
这个文件就是用来完成spring和mybatis的整合的。这里面也没多少行配置,主要的就是自动扫描,自动注入,配置数据库。

3.配置Springmvc.xml文件

4.配置web.xml文件
SSM_CRUD1130 login.html contextConfigLocation classpath:ApplicationContent.xml org.springframework.web.context.ContextLoaderListener org.springframework.web.util.Log4jConfigListener > -name>Springmvc -class>org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:Springmvc.xml -mapping> -name>Springmvc /

5.创建UserMapper.xml文件
="login" parameterType="map" resultType="map"> select * from user where name=#{name} and password=#{password} ="SelectName" parameterType="map" resultType="map"> ="SelectByName" parameterType="map" resultType="map"> select * from user where name=#{name} insert into user(name,password,lock_flag,failure_num,login_time) values(#{name},#{password},'0',0,'0000-00-00 00:00:00') ="SelectAll" parameterType="map" resultType="map"> select * from books ="SelectByBNAME" parameterType="map" resultType="map"> select * from books where BNAME like "%"#{find_BNAME}"%" delete from books where BON=#{BON} update books set BNAME=#{BNAME},AUTHOR=#{AUTHOR},PRICE=#{PRICE},QUANITITY=#{QUANITITY} where BON=#{BON} insert into books(BON,BNAME,AUTHOR,PRICE,QUANITITY) values(#{BON},#{BNAME},#{AUTHOR},#{PRICE},#{QUANITITY})

四、在Java下创建测试类 1.创建service接口
package com.wcx.service; import java.util.List; import java.util.Map; import org.springframework.web.bind.annotation.RequestParam; /** * @author xiang * @versioon 2019年11月30日 上午9:54:57 业务层接口模块 **/ public interface UserService { // 登录 相当于根据账号和密码查询 用map传值 public Map login(Map map); // 根据用户状态查询是否被锁定 public Map selectlock_flag(Map map); // 先查询一下账号是否存在,不存在则注册 显示用户名到页面 public Map SelectByName(Map map); // 注册 public int Reg(Map map); // 全查询 public List SelectAll(Map map); // 根据书名查询 public List SelectByBNAME(Map map); // 根据id删除 public int DeleteById(String BON); // 根据id修改 public int UpdateById(Map map); // 添加书籍信息 public int InsertData(Map map); }

2.创建service业务层实现类
package com.wcx.service.Imp; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.wcx.dao.UserDao; import com.wcx.service.UserService; /** * @author xiang * @versioon 2019年11月30日 上午9:55:48 业务层实现类模块 **/ @Service("userService") public class UserServiceImp implements UserService { @Autowired UserDao userDao; public UserServiceImp() { System.out.println("UserServiceImp构造方法。。。"); } // 登录的方法 @Override public Map login(Map map) { // TODO Auto-generated method stub return userDao.login(map); } // 根据用户状态查询是否被锁定 @Override public Map selectlock_flag(Map map) { return userDao.selectlock_flag(map); } // 登录后修改状态为0 @Override public int Updatelock_flag(Map map) { return userDao.Updatelock_flag(map); } // 根据name修改锁定时间 @Override public int Updatelock_time(Map map) { return userDao.Updatelock_time(map); } // 获取数据库被锁定的时间 @Override public Map selectlock_time(Map map) { return userDao.selectlock_time(map); } // 解锁定后修改状态为0 @Override public int Updatelock_flag1(Map map) { return userDao.Updatelock_flag1(map); } // 解锁定后修改时间为0 @Override public int Updatelock_time1(Map map) { return userDao.Updatelock_time1(map); } // 注册前的查询方法 显示用户名到页面 @Override public Map SelectByName(Map map) { return userDao.SelectByName(map); } // 注册的方法 @Override public int Reg(Map map) { return userDao.Reg(map); } // 全查询 @Override public List SelectAll(Map map) { return userDao.SelectAll(map); } **********此处省略重复步骤**********

3.创建controller控制器
package com.wcx.controller; import java.io.ByteArrayOutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.wcx.Utils.excel.AppFileUtils; import com.wcx.Utils.excel.ExportListExcelUtils; import com.wcx.Utils.excel.ExprotUtils; import com.wcx.bean.GetBean; import com.wcx.dao.RedisDao; import com.wcx.service.UserService; import net.sf.json.JSONArray; /** * @author xiang * @versioon 2019年11月30日 上午10:00:46 @Scope("prototype") 访问若在一人以上需设置成多列 * @RequestMapping return返回值是默认解析为跳转路径 * @ResponseBody 将java对象转为json格式的数据。若没有这个转化的话,在前台得到的是Object对象 *在@RequestMapping下添加@ResponseBody注解后不会解析成跳转地址,会解析成相应的json格式的对象、集合字符串或xml等直接返回给前台 *可通过ajax的success:function(data){} data直接获取 * @RequestParam 常用来处理简单类型的绑定 value 前端传过来的参数名 必传参数 **/ @Controller("userController") @Scope("prototype") // 若是有多人访问这个接口则需要使用,若只有一人则无需使用 @RequestMapping("xiang") // 加这个相当于又加了一层路径 /xiang/login public class UserController { @Autowired UserService userservice; // 定义一个变量用来记录登录的次数 private static int failure_num = 0; // 定义一个map接收传入session中的数据 public static Map map2 = new HashMap(); // 获取redis RedisDao redisDao = (RedisDao) GetBean.getApplicationContext().getBean("RedisDao"); public UserController() { System.out.println("UserController层构造方法。。。"); } // 显示用户名到页面 @RequestMapping(value = "https://www.it610.com/showname", method = RequestMethod.POST, produces = { "application/json; charset=UTF-8" }) @ResponseBody public String showname(HttpServletRequest request) { String name = (String) request.getSession().getAttribute("Name"); return name; } // 注册 @RequestMapping(value = "https://www.it610.com/reg", method =RequestMethod.POST) @ResponseBody public String reg(@RequestParam Map map) { // 调用service层的注册前的查询方法 Map selectByName = userservice.SelectByName(map); // 判断 if (selectByName != null) { return "reged"; } else { // 调用service层注册的方法 int reg = userservice.Reg(map); if (reg != 0) { return "success"; } else { return "false"; } } } /* * 如果需要传中文到前端, 必须在 RequestMapping 中配置produces属性,里面的值得看项目的前端需要的数据的类型。视情况而定。 */ // 全查询 数据回显到首页 @RequestMapping(value = "https://www.it610.com/selectAll", method = { RequestMethod.POST, RequestMethod.GET }, produces = { "application/json; charset=UTF-8" }) @ResponseBody public List selectAll(@RequestParam Map map) { // 调用service层的全查询方法 List list = userservice.SelectAll(map); // 把获取到的数据转换成json类型 JSONArray json = JSONArray.fromObject(list); String data = https://www.it610.com/article/json.toString(); // 将json对象转化为字符串 return list; } // 根据书名查询 数据回显到首页 @RequestMapping(value ="/selectByBNAME", method = { RequestMethod.POST, RequestMethod.GET }, produces = "text/html; charset=UTF-8") @ResponseBody public String selectByBNAME(@RequestParam Map map) { // 调用service层根据书名查询的方法 List list = userservice.SelectByBNAME(map); // 把获取到的数据转换成json类型 JSONArray json = JSONArray.fromObject(list); // 将json对象转化为字符串 String data = https://www.it610.com/article/json.toString(); return data; // 把获取的数据返回到页面中,不是用来做判断的依据,是数据 } } // 根据id删除 @RequestMapping(value ="/delete", method = { RequestMethod.POST, RequestMethod.GET }) @ResponseBody public String deleteById(@RequestParam String BON) { // 调用service层根据id删除的方法 int deleteById = userservice.DeleteById(BON); // 判断 if (deleteById != 0) { return "success"; } else { return "false"; } } // 根据id修改 @RequestMapping(value = "https://www.it610.com/update", method = { RequestMethod.POST, RequestMethod.GET }, produces = { "application/json; charset=UTF-8" }) @ResponseBody // 将返回的对象自动转为json格式的数据 public String updateById(@RequestParam Map map) { // 调用service层根据id修改的方法 int updateById = userservice.UpdateById(map); // 判断 if (updateById != 0) { return "success"; } else { return "false"; } } // 添加书籍信息 @RequestMapping(value = "https://www.it610.com/insertData", method = { RequestMethod.POST, RequestMethod.GET }) @ResponseBody public String insertData(@RequestParam Map, String> map) { int addData = https://www.it610.com/article/userservice.InsertData(map); if (addData != 0) { return"success"; } else { return "false"; } }

五、在webapp下创建html页面 1.创建index.html
="text/javascript" src="https://www.it610.com/js/jquery-3.4.1.js"> 首页
天天图书管理>
根据书名查询:
书籍编号 书籍名字 书籍作者 书籍价格 书籍销量 书籍操作

2.js部分
$(document).ready(function() { $.ajax({ url: "../xiang/selectAll", async: false,//同步 type: "post", data:$("#table1").serialize(), dataType: "json", success: function(data) { //alert(data); if(datahttps://www.it610.com/article/==="false"){ alert("获取数据失败"); }else { /*字符串转jsoneval函数就是实现list、dict、tuple与str之间的转化*/ for (var i = 0; i < data.length; i++) {//第一层循环获取到各个list var trHTML="" +data[i].BON+"" +data[i].BNAME+"" +data[i].AUTHOR+"" +data[i].PRICE+"" +data[i].QUANITITY+"+data[i].BON +"&"+data[i].BNAME +"&"+data[i].AUTHOR +"&"+data[i].PRICE +"&"+data[i].QUANITITY+"'>"; document.getElementById("dataALL").innerHTML+=trHTML; } } }); }); /*根据id删除*/ function delete1(BON){ alert("确定要删除?"); $.ajax({ async: false,//同步 url: "../xiang/delete?BON="+BON, type: "post", dataType: "text", success:function(data){ var id=BON; if(data.name==="删除失败"){ layer.msg('成功删除', {icon: 1,shade: [0.5,'#333333'],shadeClose:true},function(index){ location.href='https://www.it610.com/article/index.html'; layer.close(index); }); //location.href="https://www.it610.com/article/index.html"; }else { location.href="https://www.it610.com/article/index.html"; } } }); }

至此SSM框架下的CRUD结束,部署项目到tomcat上运行访问。
服务启动成功后输入地址http://localhost:8088/项目名/页面路径 进行测试,页面将展示数据库中查询的信息。

    推荐阅读