基礎準備
1.環境搭建:
本文是建立在我上一篇博客的基礎上進行的:
Java - maven+ibatis+spring mvc環境搭建<點擊跳轉>
2.技能準備:
Maven - 第三方依賴庫管理(類似cocopods)<點擊跳轉>
SpringMVC - jave web項目的框架<點擊跳轉>(非常好用,誰用誰知道)
- 環境配置參考博客:Java-Eclipse使用maven搭建spring mvc
- SpringMVC入門程序:Java - SpringMVC基礎入門,創建一個HelloWorld程序
mysql數據庫入門程序:Eclipse鏈接mysql搭建教程
JQuery的基礎:快速入門
JQuery+Ajax:Jquery+Ajax提交表單與SpringMVC交互傳值
—增刪改查的效果圖如題下,我做了這個demo,讓我感覺我對j2ee有了一些瞭解!
**3.源碼預覽<認真看一些註釋>:
M-V-C對應代碼預覽
**
Model –實體對象
package com.demo.entity;
public class User {
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;
}
}
View – user.jsp頁面
—-刪除按鈕 是form表單提交到控制器
—-修改按鈕 是ajax+jquery提交到控制器
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- jstl標籤庫 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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>Insert title here</title>
</head>
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(function(){
//更新事件
$('.btn').click(function(){
var btn = $(this);
var td = btn.parent();//父級 -->找到td標籤 td對應列
var tr = td.parent();//父級 -->找到tr標籤 tr對應行
//class 用 .
var u_id = tr.find(".id").val();
//id 用 #
var userName = tr.find("#userName").val();//tr 行裏面找對應的列 根據id或者class來找
var pwd = tr.find(".password").val();
//alert("獲取到:id = "+u_id+" name :"+userName +" PWD "+pwd);
var data = {
"id" : u_id,
"userName" : userName,
"password" : pwd,
};
$.ajax({
type : "GET",
url : "update",
data : data,
dataType : "json",
contentType : 'application/x-www-form-urlencoded; charset=UTF-8',
success : function(value) {
//提交成功 - 邏輯錯誤要在這裏面判別
alert(value.message); //message 對應Controller裏面的update方法返回的Map的key
},
error : function(json) {
alert("這是提交過程中的一些錯誤(參數獲取錯誤,提交方式get。post與後臺不匹配等),不包括邏輯錯誤");
}
})
});
})
</script>
<body>
<h3>SpringMVC+ibatis demo</h3>
<div>所有用戶:</div>
<form name="input" method="post">
<table border="0.5">
<tr>
<th>id</th>
<th>賬號</th>
<th>密碼</th>
<th></th>
<th></th>
</tr>
<!-- SpringMVC後臺傳值 前臺遍歷展示 user對應User對象-->
<c:forEach var="user" items="${users}"><!-- 頭部有導入 jstl標籤庫 -->
<tr>
<td><input class = "id" name="id" type="text" value=${user.id }></td>
<td><input id = "userName" name="userName" type="text" value=${user.userName }></td>
<td><input class="password" name="password" type="text" value=${user.password }></td>
<td><input value="刪除" type="submit"></td>
<td><input class="btn" type = "button" value = "修改"/></td>
</tr>
</c:forEach>
</table>
</form>
<div>=============================================</div>
添加新用戶:
<!-- 會對應到Controller裏面的insert方法 userName ,password 對應成(SpringMVC框架)User 屬性名要一一樣-->
<form action="insert" method="post" dir="ltr">
賬號:<input name="userName" type="text"><br> 密碼:<input
name="password" type="text" value="123456"><br> <input
value="添加" type="submit"><br>
</form>
</body>
</html>
控制器:UserController.java
—–增刪改查的邏輯處理
package com.demo.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
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.ResponseBody;
import com.demo.entity.User;
import com.demo.service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/login")
public String login(User user, HttpServletRequest request) {
User resultUser = userService.login(user);
if (resultUser == null) {
request.setAttribute("user", user);
request.setAttribute("errorMsg", "用戶名或密碼錯誤!");
return "index";
} else {
HttpSession session = request.getSession();
session.setAttribute("currentUser", resultUser);
return "redirect:/user/users";
}
}
@RequestMapping("/users")
public String query(Map<String, Object> map) {
List<User> resultUser = (List<User>) userService.query();
map.put("users", resultUser);
return "users";
}
@RequestMapping("/insert")
public String insert(User user) {
System.out.print("data" + user.getUserName() + user.getPassword());
Boolean resultBoolean = userService.insertUser(user);
return "redirect:/user/users";
}
@RequestMapping("/delete")
public String deleteUser(User user) {
System.out.print("賬號:" + user.getUserName() + "密碼:"
+ user.getPassword());
Boolean resultBoolean = userService.deleteUser(user);
return "redirect:/user/users";
}
@RequestMapping(value = "/update", method = RequestMethod.GET)
// 跟ajax的提交方式要一致
@ResponseBody
// 此處不能省略 還要有jackjson依賴庫 否則ajax無法解析返回值
public Map<String, String> updateUser(User user) {
System.out.print("id:" + user.getId() + "賬號:" + user.getUserName()
+ "密碼:" + user.getPassword());
Boolean resultBoolean = userService.updateUser(user);
Map<String, String> map = new HashMap<String, String>();
String result = resultBoolean == true ? "success" : "fail";
map.put("result", result);
map.put("message", "操作成功");
return map;
}
}
控制器裏面的數據庫操作都是交給Service層來處理!
1.Service層
service是業務層( interface類 + 實現類)- 我的理解是對接Controller與數據層Dao的橋樑 跟中介一樣,都是在調用Dao方法,初學者沒感覺它牛逼在哪裏,可能是在邏輯分離上有突出貢獻吧,
2.Dao層
Dao是數據訪問層 interface類<依賴注入,下面一點會提到>,說的土一點就是用來獲取數據的!跟ios的網絡請求一樣 去到處去拿數據,那我們這裏是跟ibatis<點擊看詳細>配合
ibatis是數據持久層框架 跟數據庫的表做映射 通過配置sql語句映射成一個Model對象, 以前類似的還有Hibernate,但是別人建議我用ibatis或者mybatis!
Dao層接口代碼
package com.demo.dao;
import java.util.List;
import com.demo.entity.User;
public interface UserDao {
public User login(User user);
public List<?> queryUsers();
public Boolean insertUser(User user);
public Boolean deleteUser(User user);
public Boolean updateUser(User user);
}
3.ibatis的配置文件預覽:
*ibatis的配置文件裏面的id 都是跟Dao接口層裏面的方法名字是對應!!!因爲這個id配置裏面相當於Dao接口的具體實現方法《依賴注入》
ibatis的配置文件裏面要對應到Dao
<?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.demo.dao.UserDao">
<resultMap type="User" id="UserResult">
<result property="id" column="id"/>
<result property="userName" column="usermame"/>
<result property="password" column="password"/>
</resultMap>
<!-- id 都是對應 com.demo.dao.UserDao類的方法 與參數 -->
<select id="login" parameterType="User" resultMap="UserResult">
select * from User
where
username=#{userName}
and
password=#{password}
</select>
<select id="queryUsers" parameterType="User" resultMap="UserResult">
select * from User
</select>
<insert id="insertUser" parameterType="User" >
insert into User (username, password)
values (#{userName}, #{password})
</insert>
<delete id="deleteUser" parameterType="User" >
delete from User
where
id = #{id};
</delete>
<update id="updateUser" parameterType="User" >
update User
set
username = #{userName},
password = #{password}
where
id = #{id};
</update>
</mapper>
仔細品味文章裏面的每個細節!屢一下關係思路,就大體能知道個來龍去脈了