Java - SpringMVC+iBatis maven工程項目增刪改查實例入門+源碼

基礎準備

1.環境搭建:
本文是建立在我上一篇博客的基礎上進行的:
Java - maven+ibatis+spring mvc環境搭建<點擊跳轉>

2.技能準備:
Maven - 第三方依賴庫管理(類似cocopods)<點擊跳轉>

SpringMVC - jave web項目的框架<點擊跳轉>(非常好用,誰用誰知道)

  1. 環境配置參考博客:Java-Eclipse使用maven搭建spring mvc
  2. SpringMVC入門程序:Java - SpringMVC基礎入門,創建一個HelloWorld程序

mysql數據庫入門程序Eclipse鏈接mysql搭建教程

JQuery的基礎:快速入門

JQuery+AjaxJquery+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> 

仔細品味文章裏面的每個細節!屢一下關係思路,就大體能知道個來龍去脈了

源碼下載

點擊下載

發佈了135 篇原創文章 · 獲贊 31 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章