搭建ssm框架:https://blog.csdn.net/Carl_changxin/article/details/81664331
1、先看ssm搭建好的目录结构
2、分别介绍这些包的作用
(1)controller,service,dao三个包的作用是将系统分层,更容易管理。
(2)controller的作用是处理浏览器请求,但真正处理请求都需要依赖service,dao层。
(3)service层称为业务层,如几个单一的增删改查组合成一个复杂的业务,需要给该层设定事务。
(4)dao数据访问层,作用是和数据库打交道,取数据或存数据。
(5)dao中的每一个接口都要在mapper包下有一个与之对应的xml文件,在这个xml编辑sql语句。
(6)model包下是各种实体类,这些实体类封装着数据,在各个层次中传递。
(7)举例:从浏览器提交数据,到数据库保存数据的过程是怎样的呢?先说明过程,后面有代码
1、浏览器提交的数据,不论是get方式,还是post方式,都会被controller层中某个类中的某个方法的形参所接收,一般可以设置这个形参是某个实体类的对象,通过这个对象就能接收到浏览器提交的数据,前提是浏览器提交的参数名要与对象的属性名一致。
如:登录的时候,提交的是账号,密码两个参数,就可以用实体类User的一个对象接收。
2、接收到参数以后,需要对参数进行各种处理,就要在controller层的这个方法中,去调用service层相应的业务。
如:登录的业务层有2步,先判断能否从数据库中查询到对应的数据(账号,密码均要正确),再返回true或false
3、业务层中需要对数据进行验证或其它操作,就要调用dao层中的增删改查的方法,而dao层提供只是接口,mapper包下的与接口对应的xml文件会被加载,执行sql语句。
如:登录的dao层中,创建一个userDao接口,有find方法,在userMapper.xml文件中就会配置该查询方法的对应的sql语句。
3、CRUD实例
(1)页面:
index.html逻辑代码:
<script type="text/javascript">
var page=1;
var rows=10;
var pages=0;
$(function(){
freshPage($);
});
function freshPage($){
$.getJSON("user/list.do",{page:page,rows:rows},function(data){
pages = data.pages;
$("#ddd").html("");
$.each(data.data,function(i,e){
$("#ddd").append("<tr><td>"+(i+1)+"</td><td style='display:none'>"+e.id+"</td><td>"+e.userName+"</td><td>"+e.passWord+"</td><td><span class='glyphicon glyphicon-pencil' aria-hidden='true' data-toggle='modal' data-target='#updateUser' onclick='editInfo(this)'></span> <span class='glyphicon glyphicon-trash' onclick='delUser(this)'></span></td></tr>");
})
})
}
function saveUser(){
var userName = $("input[name=userName]").val();
var passWord = $("input[name=passWord]").val();
$.ajax({
url:"user/save.do",
type:"post",
data:{userName:userName,passWord:passWord},
dataType:"json",
success:function(d){
$('#addUser').modal('hide');
if(d.code==200){
//刷新表格
freshPage($);
}
}
})
}
function delUser(that){
var id = $(that).parent().parent().children().eq(1).text();
$.ajax({
url:"user/del.do",
type:"post",
data:{id:id},
dataType:"json",
success:function(d){
if(d.code==200){
//刷新表格
freshPage($);
}
}
})
}
function updateUser(that){
var userName = $("input[name=newUserName]").val();
var passWord = $("input[name=newPassWord]").val();
var id=$("input[name=user_id]").val();
$.ajax({
url:"user/update.do",
type:"post",
data:{userName:userName,passWord:passWord,id:id},
dataType:"json",
success:function(d){
$('#updateUser').modal('hide');
if(d.code==200){
//刷新表格
freshPage($);
}
}
})
}
//触发模态框的同时调用此方法
function addInfo(that) {
//先清空模态框中的输入框内容
$('#addUserName').val("");
$('#addPassWord').val("");
$('#update').modal('show');
}
//触发模态框的同时调用此方法
function editInfo(that) {
//获取表格中的一行数据
var id=$(that).parent().parent().children().eq(1).text()
var userName = $(that).parent().parent().children().eq(2).text()
var passWord = $(that).parent().parent().children().eq(3).text()
//向模态框中传值
$('#user_id').val(id);
$('#userName').val(userName);
$('#passWord').val(passWord);
$('#update').modal('show');
}
//上一页
function prePage(){
if(page == 1){
alert("已经是第一页了");
}else{
page = page - 1;
freshPage($);
}
}
//下一页
function nextPage(){
if(page ==pages){
alert("已经是最后一页了");
}else{
page = page + 1;
freshPage($);
}
}
</script>
(2)再看后台代码:
User实体类:
package model;
import java.io.Serializable;
/**
*由于对象 是保存在内存中的,要保存到数据库中就需要实现Serializable接口
*/
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private Integer id;
private String userName;
private String passWord;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
UserController.java:
package controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import model.User;
import service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/list")
@ResponseBody
public Map<String,Object> list(Integer page,Integer rows) {
return userService.findUser(page,rows);
}
@RequestMapping("/save")
@ResponseBody
public Map<String,Object> save(User user) {
int res = userService.saveUser(user);
Map<String,Object> map = new HashMap<String,Object>();
if(res == 1) {
map.put("code",200);
}else{
map.put("code", 500);
}
return map;
}
@RequestMapping("/del")
@ResponseBody
public Map<String,Object> del(Integer id) {
int res = userService.delUserById(id);
Map<String,Object> map = new HashMap<String,Object>();
if(res == 1) {
map.put("code",200);
}else{
map.put("code", 500);
}
return map;
}
@RequestMapping("/update")
@ResponseBody
public Map<String,Object> update(User user) {
int res = userService.updateUser(user);
Map<String,Object> map = new HashMap<String,Object>();
if(res == 1) {
map.put("code",200);
}else{
map.put("code", 500);
}
return map;
}
}
UserService.java和UserServiceImpl.java:
package service;
import java.util.Map;
import model.User;
public interface UserService {
public int saveUser(User user);
public int delUserById(Integer id);
public int updateUser(User user);
public Map<String, Object> findUser(Integer page,Integer rows);
}
package service.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import dao.UserDao;
import model.User;
import service.UserService;
@Service("userService") //注意这里的别名是为了之后若要重写UserServiceImpl类而相互区分的标记
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public int saveUser(User user) {
return userDao.saveUser(user);
}
@Override
public int delUserById(Integer id) {
return userDao.delUserById(id);
}
@Override
public int updateUser(User user) {
return userDao.updateUser(user);
}
@Override
public Map<String, Object> findUser(Integer page,Integer rows) {
Integer startIndex = (page-1)*rows;
List<User> users = userDao.findUser(startIndex, rows);
Integer total = userDao.findTotal();
Integer pages = (total+rows-1)/rows;
Map<String, Object> map = new HashMap<String, Object>();
map.put("data", users);
map.put("pages", pages);
return map;
}
}
userDao.java和userMapper.xml:
package dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import model.User;
public interface UserDao {
public int saveUser(User user);
public int delUserById(Integer id);
public int updateUser(User user);
public List<User> findUser(@Param("startIndex") Integer startIndex, @Param("rows") Integer rows);
public Integer findTotal();
}
<?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="dao.UserDao">
<insert id="saveUser" parameterType="User">
insert into t_user (user_name,pass_word) value (#{userName},#{passWord})
</insert>
<delete id="delUserById" parameterType="int">
delete from t_user where id=#{id}
</delete>
<update id="updateUser" parameterType="User">
update t_user set user_name=#{userName} ,pass_word=#{passWord} where id=#{id}
</update>
<!--当数据库的列名和实体类的属性名不相同时,要配置resultMap -->
<resultMap type="User" id="UserMap">
<id column="id" property="id"/>
<result column="user_name" property="userName"/>
<result column="pass_word" property="passWord"/>
</resultMap>
<!--分页查询 -->
<select id="findUser" resultMap="UserMap">
select * from t_user limit #{startIndex} ,#{rows}
</select>
<select id="findTotal" resultType="int">
select count(1) from t_user
</select>
</mapper>