SSM框架集成(另有增删改查案例)
访问项目的路径
http://127.0.0.1/ssm/user/list
如果不想自己集成,下面是下载地址,包含了SSM基本框架及用户增删改查案例
点我下载
项目需要的sql语句
/*
SQLyog v10.2
MySQL - 5.7.19-log : Database - test
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `test`;
/*Table structure for table `user` */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
/*Data for the table `user` */
insert into `user`(`id`,`name`,`age`) values (2,'唐僧',128),(3,'王母娘娘',3000),(4,'朱八戒',300),(5,'沙悟竞',300),(6,'boy',5000),(7,'大鹏鸟',6000),(8,'玉皇大帝',2000);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
集成后成功图片
集成图片
分页查询页面
修改页面如下
项目目录结构
配置文件代码
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.user=root
jdbc.password=123456
log4j.properties
log4j.rootLogger = debug,console
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold = DEBUG
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern= %d{ISO8601} [%F:%L][%p]:%m%n
log4j.logger.org.springframework=off
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
spring-servlet.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task" xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 设置spring扫描范围 -->
<context:component-scan base-package="com.ccd" />
<!-- 使用注解方式的MVC -->
<mvc:annotation-driven />
<!-- 让spring前端控制器,对指定的静态资放行 ,让location下边的所有资源不走前端控制器 -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<!-- 配置内部资源视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 属性文件加载(定位)器 :数据库连接信息 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- DBCP数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- com.公司名.项目名.一级模块名.二级模块名(表名) -->
<!-- /**/ 任意层级任意名称 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="mapperLocations" value="classpath:com/ccd/**/dao/*Mapper.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- MapperScannerConfigurer 扫描dao接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ccd.**.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
</bean>
<!-- 配置spring事务管理器 :作用已知数源上 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 开启注解方式的事务 :并且让注解方式作用到配好的事务管理器上 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
UserAction.java
package com.ccd.study.sys.user.action;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ccd.study.sys.user.model.User;
import com.ccd.study.sys.user.model.UserCondtion;
import com.ccd.study.sys.user.service.IUserService;
@Controller
@RequestMapping("user")
public class UserAction {
@Autowired
private IUserService service;// 注入userservice接口
@RequestMapping("list")
// 方法参数中加Map<String,Object> map,用来替换 HttpServletRequest request
// @ModelAttribute("cond")//共享变量 相当于把参数变量扔到request
public String queryList(@ModelAttribute("cond") UserCondtion cond, Map<String, Object> map) {
List<User> list = service.queryList(cond);
map.put("userList", list);
// request.setAttribute("userList", list);
return "sys/user/list";
}
@RequestMapping("toinsert")
// 跳转到新增页面
public String toinsert() {
return "sys/user/insert";
}
@RequestMapping("insert")
// 新增-保存数据方法
public String insert(User user) {
service.insert(user);
return "redirect:list";
// 重定向到本类的@RequestMapping("list")
}
@RequestMapping("toupdate")
// 跳转到修改页面
public String toupdate(int id, Map<String, Object> map) {
map.put("user", service.findById(id));
return "sys/user/update";
}
@RequestMapping("update")
// 修改-保存数据方法
public String update(User user) {
service.update(user);
return "redirect:list";
}
@RequestMapping("todetail")
// 跳转到详细页面
public String todetail(int id, Map<String, Object> map) {
map.put("user", service.findById(id));
return "sys/user/detail";
}
@RequestMapping("delete")
// 删除数据
public String delete(int id) {
service.delete(id);
return "redirect:list";
}
}
IUserService.java
package com.ccd.study.sys.user.service;
import java.util.List;
import com.ccd.study.sys.user.model.User;
import com.ccd.study.sys.user.model.UserCondtion;
public interface IUserService {
int insert(User user);
int update(User user);
int delete(int id);
List<User> queryList(UserCondtion cond);
User findById(int id);
}
UserServiceImpl.java
package com.ccd.study.sys.user.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ccd.study.sys.user.dao.IUserDao;
import com.ccd.study.sys.user.model.User;
import com.ccd.study.sys.user.model.UserCondtion;
import com.ccd.study.sys.user.service.IUserService;
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao dao;// 注入userdao接口类
@Override
public int insert(User user) {
return dao.insert(user);
}
@Override
public int update(User user) {
return dao.update(user);
}
@Override
public int delete(int id) {
return dao.delete(id);
}
@Override
public List<User> queryList(UserCondtion cond) {
int rowCount = dao.queryCount(cond);// 到数据库去查询记录个数
int pageSize = cond.getPageSize();
cond.setRowCount(rowCount);
cond.setPageCount(rowCount % pageSize == 0 ? rowCount / pageSize : rowCount / pageSize + 1);// 计算总页数
cond.setStart((cond.getCurPage() - 1) * pageSize);// 起始行=(当前页-1)页大小
return dao.queryList(cond);
}
@Override
public User findById(int id) {
return dao.findById(id);
}
}
IUserDao.java
package com.ccd.study.sys.user.dao;
import java.util.List;
import com.ccd.study.sys.user.model.User;
import com.ccd.study.sys.user.model.UserCondtion;
public interface IUserDao {
int insert(User user);
int update(User user);
int delete(int id);
List<User> queryList(UserCondtion cond);
int queryCount(UserCondtion cond);
User findById(int id);
}
userMapper.xml
<?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.ccd.study.sys.user.dao.IUserDao">
<insert id="insert">
insert into user (name,age) values(#{name},#{age})
</insert>
<update id="update">
update user set name=#{name} , age =#{age} where
id=#{id}
</update>
<delete id="delete">
delete from user where id = #{id}
</delete>
<select id="findById" resultType="com.ccd.study.sys.user.model.User">
select id,name,age from user where id=#{id}
</select>
<select id="queryList" resultType="com.ccd.study.sys.user.model.User">
select id,name,age from user
<where>
<if test="id!=null">
and id=#{id}
</if>
<if test="age!=null">
and age=#{age}
</if>
<if test="name!=null and name!=''">
and name=#{name}
</if>
</where>
limit #{start},#{pageSize}
</select>
<select id="queryCount" resultType="int">
select count(id) from user
<where>
<if test="id!=null">
and id=#{id}
</if>
<if test="age!=null">
and age=#{age}
</if>
<if test="name!=null and name!=''">
and name=#{name}
</if>
</where>
</select>
</mapper>
User.java
package com.ccd.study.sys.user.model;
public class User {
private Integer id;
private Integer age;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", age=" + age + ", name=" + name + "]";
}
}
增删改查对应的页面
detail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%request.setAttribute("webPath", request.getContextPath());%>
<!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>update</title>
</head>
<body>
<form action="" name="form1" id="form1" method="post">
<table border="1px" >
<tr>
<td>主键</td><td>${user.id}</td>
</tr>
<tr>
<td>姓名</td><td>${user.name}</td>
</tr>
<tr>
<td>年龄</td><td>${user.age}</td>
</tr>
</table>
</form>
</body>
</html>
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%request.setAttribute("webPath", request.getContextPath());%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="${webPath}/resources/js/jquery-1.7.1.min.js" ></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>list</title>
</head>
<body>
<form action="" name="form1" id="form1" method="post">
<table border="1px" >
<tr>
<td>主键<input name="id" value="${cond.id}" /> </td>
<td>姓名<input name="name" value="${cond.name}" > </td>
<td>年龄<input name="age" value="${cond.age}" > </td>
<td><input type="button" value="查询" onclick="query()" > </td>
</tr>
</table>
<input type="button" value="新增" onclick="toInsert()" />
<table border="1px" >
<tr>
<td>主键</td>
<td>姓名</td>
<td>年龄</td>
<td>修改</td>
<td>删除</td>
<td>详细</td>
</tr>
<c:forEach items="${userList}" var="user" >
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td><input type="button" value="修改" onclick="toUpdate('${user.id}')" /></td>
<td><input type="button" value="删除" onclick="toDelete('${user.id}')" /></td>
<td><input type="button" value="详细" onclick="toDetail('${user.id}')" /></td>
</tr>
</c:forEach>
</table>
当前页:<input name="curPage" value="${cond.curPage}" /><br>
页大小:<input name="pageSize" value="${cond.pageSize}" /><br>
总页数:${cond.pageCount}<br>
总记录数:${cond.rowCount}<br>
</form>
</body>
<script type="text/javascript">
function toInsert(){//转到新增页
$("#form1").attr("action","${webPath}/user/toinsert");
$("#form1").submit();
}
function toUpdate(id){//转到修改页
$("#form1").attr("action","${webPath}/user/toupdate?id="+id);
$("#form1").submit();
}
function toDetail(id){//转到详情页
$("#form1").attr("action","${webPath}/user/todetail?id="+id);
$("#form1").submit();
}
function toDelete(id){//删除数据
$("#form1").attr("action","${webPath}/user/delete?id="+id);
$("#form1").submit();
}
function query(){//查询数据
$("#form1").attr("action","${webPath}/user/list");
$("#form1").submit();
}
</script>
</html>
update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%request.setAttribute("webPath", request.getContextPath());%>
<!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>update</title>
</head>
<body>
<form action="${webPath}/user/update" name="form1" id="form1" method="post">
<input name="id" value="${user.id}" />
<table border="1px" >
<tr>
<td>姓名</td><td><input name="name" value="${user.name}" > </td>
</tr>
<tr>
<td>年龄</td><td><input name="age" value="${user.age}" > </td>
</tr>
</table>
<input type="submit" value="保存" >
</form>
</body>
</html>