搭建SSM框架并实现增删查改功
- 前言
-
- 一、概述
- 二、搭建一个SSM的过程
- 三、配置相关文件
- 四、在Java下创建测试类
- 五、在webapp下创建html页面
要一直做勤快的人,加油前言 使用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使用命令要注意,系统安装了Maven,并配置好了环境变量!(这个方法我没用过,网上看的,扩展一下自己)
-DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
2.导入项目(命名创建),添加依赖
导入项目是IDE中,或者直接在IDE创建,一般默认有【src/main/java】,手动创建【src/test/resources】、【src/test/java】文件夹。
注意导入maven项目和导入javaWeb项目有点不太一样。
数据请求过程如下:
1.客户端通过ajax发送请求;
2.控制层controller接收请求;
3.获取mysql数据,转为Json格式并返回给客户端;
4.客户端接收数据后显示。
项目结构如下:
文章图片
然后直接在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
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
五、在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/项目名/页面路径 进行测试,页面将展示数据库中查询的信息。
推荐阅读
- Java|SpringBoot入门项目-基于JPA的App日记后台系统之数据库的创建与JPA的CRUD(二)
- 源码|第13期在线音乐网站前后分离springboot整合vue
- 源码|第11期学生住宿管理系统+程序设计文档
- 框架|用eclipse开发工具,maven进行包管理,整合SSH框架
- JAVA|spring事务失效的原因
- Spring|BeanFactory和ApplicationContext有什么区别
- JAVA资料|3年外包终上岸,我只能说这类公司能不去就不去
- vue.js|学生信息管理 vue+Element UI+springboot 前后端分离
- SpringCloud|SpringCloud之Eureka注册中心与Robbin负载均衡