1. 程式人生 > >SSM之Mybatis查詢以及批量操作

SSM之Mybatis查詢以及批量操作

這篇文章是在我的SpringMVC前後端資料互動基礎上把資料庫環節打通,主要涉及mybatis的查詢(傳多個引數),批量刪除,新增,修改,資料庫是MySQL,註釋很詳細,直接看程式碼即可:

JSP

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>


<title>mybatis測試頁面</title>

<script type="text/javascript"
	src="${pageContext.request.contextPath}/static/jquery/jquery-1.9.1.min.js"></script>
<script
	src="${pageContext.request.contextPath}/static/bootstrap-3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet"
	href="${pageContext.request.contextPath}/static/bootstrap-3.3.5/css/bootstrap-theme.css"></link>
<link rel="stylesheet"
	href="${pageContext.request.contextPath}/static/bootstrap-3.3.5/css/bootstrap.css"
	type="text/css"></link>
<link rel="stylesheet"
	href="${pageContext.request.contextPath}/static/bootstrap-3.3.5/css/bootstrap.min.css"
	type="text/css"></link>
<script type="text/javascript">
	$(document).ready(function() {
		// 
	});
</script>

</head>

<body>
	<br />
	<button type="button" onclick="test()">傳送按鈕</button>
	<p></p>
	<p>-----------1.條件(模糊)查詢,2.一對一,一對多,多對多查詢,2.批量刪除,批量修改,批量新增,4.分頁查詢------------
	<p>
	<p>--------------------------------------------------------------------------------------------------------------------------------------------------</p>
	<p>查詢結果集------:</p>
	<p id="data"></p>
	<p>---批量刪除---</p>
	<div>
		<!-- 複選框,批量刪除demo演示-->
		<label class="checkbox-inline"> <input type="checkbox" name="deleteCheckBox"
			id="inlineCheckbox1" value="11"> 選項 1
		</label> <label class="checkbox-inline"> <input type="CheckBox" name="deleteCheckBox"
			id="inlineCheckbox2" value="22"> 選項 2
		</label> <label class="checkbox-inline"> <input type="CheckBox" name="deleteCheckBox"
			id="inlineCheckbox3" value="33"> 選項 3
	</div>

	<!-- 建立表指令碼 -->
	<!--CREATE TABLE users (
  id int(5) NOT NULL auto_increment,
  name varchar(20)NOT NULL,
  PRIMARY KEY  (`id`)
)charset utf8 collate utf8_general_ci;  -->
	<script>
		function test() {

			//單個引數查詢
			/* 	$.ajax({
					type : 'post',
					url : "${pageContext.request.contextPath}/mybatis/queryByAge",
					data:{age:"28"},
					dataType : "json",
					success : function(data) {	
						console.log(data);
						//JSON.stringify(data)
						$("#data").text(JSON.stringify(data));
					},
					error : function() {
						alert("查詢失敗");
					}
				}); */

			//多個引數查詢
			//1.用註解
			/* 	$.ajax({
					type : 'post',
					url : "${pageContext.request.contextPath}/mybatis/queryEmp",
					data:{queryAge:"28",queryNme:"李大嘴",deptno:"20"},
					dataType : "json",
					success : function(data) {	
						console.log(data);
						$("#data").text(JSON.stringify(data));
					},
					error : function() {
						alert("查詢失敗");
					}
				}); */

			//2.用map
			/* $.ajax({
				type : 'post',
				url : "${pageContext.request.contextPath}/mybatis/queryEmpWithMapParam",
				data:{queryAge:"28",queryNme:"李大嘴",deptno:"20"},
				dataType : "json",
				success : function(data) {	
					console.log(data);
					$("#data").text(JSON.stringify(data));
				},
				error : function() {
					alert("查詢失敗");
				}
			});
			 */
			//插入資料,主鍵自增
			/* var jsonObj = {
				"empAge" : "111",
				"empName" : "卡麗熙",
				"deptNo" : "12138"
			};
			$.ajax({
				type : 'post',
				url : '${pageContext.request.contextPath }/mybatis/addEmp',
				contentType : 'application/json;charset=utf-8',//指定為json型別,這個屬性是配合註解@RequestBody使用的
				//資料格式是json串
				data : JSON.stringify(jsonObj),
				dataType : "json",
				success : function(data) {//返回json結果
					console.log(data)//插入成功列印數字 1 
					alert("成功");
				}
			}); */
			
			//批量刪除資料
			/* var checkBoxArray=[];
			$("input[name='deleteCheckBox']:checked").each(function () {
				checkBoxArray.push(this.value)
            });
			$.ajax({
				type : 'post',
				url : '${pageContext.request.contextPath }/mybatis/deleteBatch',
				traditional : true,//注意,必須要有個設定否則傳遞陣列報400錯誤。預設為false深度序列化,在此改為true
				data : {
					"array" : checkBoxArray
				},
				success : function(data) {//返回json結果
					console.log(data)//插入成功列印數字 1 
					alert("批量刪除成功");
				},
				error : function() {
					alert("查詢失敗");
				}
			}); */
			
			
			//批量新增
			/* var empObjList=[];
            var emp1={
    				"empAge" : "1111",
    				"empName" : "布蘭",
    				"deptNo" : "1"
    			};
            var emp2={
    				"empAge" : "2222",
    				"empName" : "艾麗婭",
    				"deptNo" : "2"
    			};
            var emp3={
    				"empAge" : "3333",
    				"empName" : "羅伯",
    				"deptNo" : "3"
    			} 
            empObjList.push(emp1);
            empObjList.push(emp2);
            empObjList.push(emp3);
			$
					.ajax({
						type : 'post',
						url : '${pageContext.request.contextPath }/mybatis/addEmpByBatch',
						contentType : 'application/json;charset=utf-8',//指定為json型別
						//資料格式是json串,多個物件用[]包裝
						data : JSON.stringify(empObjList),
						success : function(data) {
							console.log(data); 
							alert("批量新增成功");
						},
						error : function() {
							alert("失敗");
						}
					}); */
					
			//批量修改
			var empObjList=[];
            var emp1={
    				"empAge" : "15",
    				"empName" : "布蘭update",
    				"deptNo" : "1"
    			};
            var emp2={
    				"empAge" : "19",
    				"empName" : "艾麗婭update",
    				"deptNo" : "2"
    			};
            var emp3={
    				"empAge" : "26",
    				"empName" : "羅伯update",
    				"deptNo" : "3"
    			} 
            empObjList.push(emp1);
            empObjList.push(emp2);
            empObjList.push(emp3);
			$
					.ajax({
						type : 'post',
						url : '${pageContext.request.contextPath }/mybatis/updateEmpByBatch',
						contentType : 'application/json;charset=utf-8',//指定為json型別
						//資料格式是json串,多個物件用[]包裝
						data : JSON.stringify(empObjList),
						success : function(data) {
							console.log(data.toString()); 
							alert("批量修改成功");
						},
						error : function() {
							alert("失敗");
						}
					});
		}
	</script>
</body>
</html>

controller
package com.wonders.controller;

import java.util.ArrayList;
import java.util.HashMap;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.wonders.entity.Emp;
import com.wonders.entity.User;
import com.wonders.service.EmpService;
import com.wonders.service.UserService;
/**
 * AJAX+mybatis+mysql各種情況下查詢
 * 傳陣列批量
 * 多個引數封裝 (map @param)
 * @author Administrator
 *
 */
@Controller
@RequestMapping("/mybatis")
public class MyBatisController {
	@Autowired
	private EmpService empService;
	//http://127.0.0.1:8080/ssmmaven/mybatis/showView
	@RequestMapping("/showView")  
    public ModelAndView showView(){    
		ModelAndView mv = new ModelAndView(); 
	    mv.setViewName("mybatis");
        return mv;  
    }
	///////////////////////////////////////////////////////////////////////////
	/**
	 * 單個引數查詢
	 * @param age
	 * @return
	 */
	@RequestMapping("/queryByAge")
	public @ResponseBody List<Emp> queryByAge(String age){
		return empService.selectEmpByAge(age);
	}
	////////////////////////////////////////////////////////////////////////////////
	/**
	 * 多個引數查詢
	 * 1.註解
	 */
	@RequestMapping("/queryEmp")//
	public @ResponseBody Emp queryEmp(String queryAge, String queryNme,Integer deptno){
		Emp emp=empService.selectEmp(queryAge, queryNme, deptno);
		System.out.println("controller:"+emp);
		return emp;
	}
	/**
	 * 2.多個引數用map封裝
	 */
	@RequestMapping("/queryEmpWithMapParam")//
	public @ResponseBody Emp queryEmpWithMapParam(String queryAge, String queryNme,Integer deptno){
		Map<String,Object> map=new HashMap<String,Object>();
		map.put("age", queryAge);
		map.put("name", queryNme);
		map.put("deptno", deptno);
		Emp emp=empService.queryEmpWithMapParam(map);
		System.out.println("controller:"+emp);
		return emp;
	}
	/**
	 * 插入資料 主鍵自增,更新操作同理
	 */
	@RequestMapping("/addEmp")//
	public @ResponseBody Integer addEmp(@RequestBody Emp emp){
		
		return empService.addEmp(emp);
	}	
	/**
	 * 批量刪除
	 */
	@SuppressWarnings("null")
	@RequestMapping(value="/deleteBatch")
	public @ResponseBody Integer  deleteBatch(@RequestParam(value="array") Integer[] array){  
		 if (array == null && array.length <= 0) {
	            return 0;
	        }
		return empService.deleteEmpBatch(array);
    }
	/**
	 * 批量新增
	 */
	@RequestMapping(value="/addEmpByBatch")
	public @ResponseBody Integer addEmpByBatch(@RequestBody ArrayList<Emp> emps){  
		return empService.addEmpByBatch(emps);
    }
	/**
	 * 批量更新  jdbc.properties檔案新增----allowMultiQueries=true
	 */
	@RequestMapping(value="/updateEmpByBatch")
	public @ResponseBody Integer updateEmpByBatch(@RequestBody ArrayList<Emp> emps){  
		return empService.updateEmpByBatch(emps);
    }
}
直接看mapper和mapper.xml
package com.wonders.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.wonders.entity.Emp;

public interface EmpMapper {
	//單個引數查詢
	public List<Emp> selectEmpByAge(String age);
	//多個引數查詢用@Param註解傳引數
	public Emp selectEmp(@Param("age") String queryAge,@Param("name") String queryNme,@Param("deptno") Integer deptno);
	//多個引數查詢用Map封裝
	public Emp queryEmpWithMapParam(Map<String,Object> map);
	//插入資料主鍵自增
	public int addEmp(Emp emp);
	//checkBox批量刪除
	public int deleteEmpBatch(Integer[] array);
	//批量新增
	public int addEmpByBatch(List<Emp> emps);
	//批量更新
	public int updateEmpByBatch(List<Emp> emps); 
}

<?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.wonders.dao.EmpMapper">
	<resultMap id="EmpResultMap" type="com.wonders.entity.Emp">
		<id column="ID" property="empId" jdbcType="INTEGER" />
		<result column="NAME" property="empName" jdbcType="CHAR" />
		<result column="AGE" property="empAge" jdbcType="CHAR" />
		<result column="DEPTNO" property="deptNo" jdbcType="INTEGER" />
	</resultMap>
	<!-- 單個引數查詢 -->
	<select id="selectEmpByAge" parameterType="String" resultMap="EmpResultMap">
		SELECT * FROM EMP WHERE AGE = #{age}
	</select>
	<!--多個引數查詢@Param註解封裝-->
	<select id="selectEmp"  resultMap="EmpResultMap">
		SELECT * FROM EMP WHERE AGE = #{age,jdbcType=VARCHAR} AND NAME=#{name,jdbcType=VARCHAR}  AND DEPTNO=#{deptno,jdbcType=DECIMAL}
	</select>
	<!--多個引數查詢map封裝,直接用key就可以取值,parameterType="map"不寫也可以-->
	<select id="queryEmpWithMapParam" parameterType="map" resultMap="EmpResultMap">
		SELECT * FROM EMP WHERE AGE = #{age,jdbcType=VARCHAR} AND NAME=#{name,jdbcType=VARCHAR}  AND DEPTNO=#{deptno,jdbcType=DECIMAL}
	</select>
	<!--插入資料,主鍵自增  -->
	<insert id="addEmp" parameterType="com.wonders.entity.Emp"
		useGeneratedKeys="true">
		insert into EMP(NAME,AGE,DEPTNO) 
		values(#{empName},#{empAge},#{deptNo})
	</insert>
	<!-- 批量刪除 -->
	<delete id="deleteEmpBatch" parameterType="Integer">
        delete from EMP where 
        <foreach item="check_value" collection="array" open="ID in ("
            separator="," close=")">
            #{check_value}
        </foreach>
    </delete>
    <!-- 批量新增-->
    <insert id="addEmpByBatch" parameterType="java.util.List" useGeneratedKeys="true">
    insert into EMP (NAME,AGE,DEPTNO)
    values 
    <foreach collection="list" item="item" index="index" separator="," >
        (#{item.empName},#{item.empAge},#{item.deptNo})
    </foreach>
    </insert>
    <!-- 批量更新 -->
    <update id="updateEmpByBatch"  parameterType="java.util.List">  
    <foreach collection="list" item="item" index="index" separator=";">
       update EMP
       <set >
          <if test="item.empName != null" >
            NAME = #{item.empName,jdbcType=VARCHAR},
          </if>
          <if test="item.empAge != null" >
            AGE = #{item.empAge,jdbcType=VARCHAR},
          </if>
        </set>
        where DEPTNO = #{item.deptNo,jdbcType=INTEGER}
    </foreach>       
</update>

</mapper>


資料庫配置檔案注意的地方:

jdbc_url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true

相關推薦

SSMMybatis查詢以及批量操作

這篇文章是在我的SpringMVC前後端資料互動基礎上把資料庫環節打通,主要涉及mybatis的查詢(傳多個引數),批量刪除,新增,修改,資料庫是MySQL,註釋很詳細,直接看程式碼即可: JSP <%@ page language="java" import="ja

Mybatis 新增語句以及批量操作

<insert id="add"> insert into t_watch_log <!-- 新增表字段 --> <trim prefix="(" suffix=")" suffixOver

SSMMyBatis查詢快取

        為了減輕資料壓力,提高資料庫的效能,我們往往會需要使用快取。MyBatis為我們提供了一級快取和二級快取。     (1)一級快取是SqlSession級別的快取,在操作資料庫的時候需要建立一個SqlSession,其中有一個HashMap,用於儲存快取資料

模擬admin組件自己開發stark組件搜索和批量操作

btn 但是 相關 操作 else htm actions 函數 自己 搜索相關,搜索的本質就是從數據庫查詢出來的數據過濾 用戶自定義給出過濾條件joker.py list_display = (‘id‘,‘title‘,‘price‘,) show_add_btn =

Java基礎-SSMmybatis多對一關聯關系

轉載 bat ont -s 否則 tis 聲明 ron 作品             Java基礎-SSM之mybatis多對一關聯關系                                     作者:尹正傑 版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

資料列表的全選、反選以及批量操作

資料列表的全選、反選以及批量操作 html部分程式碼: 1、全選的checkbox: <input type="checkbox" value="" id="all_columnId"> 2、每條資料前邊的checkbox:<input type="checkbox" name="colu

數據列表的全選、反選以及批量操作

func pro table 刪除按鈕 click 形式 column inpu 部分 數據列表的全選、反選以及批量操作 html部分代碼: 1、全選的checkbox: <input type="checkbox" value="" id="all_columnId

myBatis 配置檔案 批量操作(增、刪、改)操作(資料庫 oracle 11g)

1、更新 <update id="batchUpdate" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="

scala Map ,Tuple 以及 Zip 操作

//Map 本身是對映,在生活中應用也非常廣泛 //Tuple 也是scala中非常重要的資料結構,我們使用tuple可以把很多型別不一樣的元素組成一個集合 //Zip 把兩個集合中的元素結合 object Map_Tuple {   def main(args: Array[String]): Unit =

Dojo 1.6 最新官方教程: 如何使用dojo.query 進行DOM查詢批量操作

在本講義中,我們將學到DOM的查詢,以及如何使用dojo.query來方便的查詢並操作DOM節點。 難度:初學者  適用的Dojo 版本: 1.6 作者: Bryan Forbes 譯者: feijia 入門 對DOM程式設計的一個關鍵要素是能夠快速高效的獲

Mybatis外掛和批量操作

擴充套件一個簡單的實現 @Intercepts({ @Signature(type = StatementHandler.class,method = "parameterize",args = java.sql.Statement.class) }) pub

spring整合Mybatis批量操作

applicationContext-dao.xml中宣告一個可執行批量操作的sqlSession 通過建構函式注入方式:將SqlSessionTemplate交予Spring進行管理,方便後面service層中引用 注意:SqlSessionTemplate的execut

MyBatis一對多的左連線查詢、分步查詢以及插入和刪除操作

例如有兩張表,分別是客戶表和訂單表,一個客戶有多個訂單,一個訂單屬於一個客戶。 兩個實體類Customer   Order 如下: package com.itlike.domain; import lombok.Getter; import lombok.Setter; imp

SSM框架MyBatis(二)--多表查詢查詢結果對映

使用MyBatis這一強大的框架可以解決很多賦值的問題,其中對於子配置檔案中的小細節有很多需要注意的地方,使用這個框架後主要就是對於配置檔案的編寫和配置。 今天我寫了一個多表查詢,表的基本結構如下: 使用者表t_user:使用者編號uid,賬號account,暱稱nickn

JAVAWEB開發mybatis詳解(二)——高階對映、查詢快取、mybatis與Spring整合以及懶載入的配置和逆向工程

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "ht

Spring Boot2(十一):Mybatis使用總結(自增長、多條件、批量操作、多表查詢等等)

一、前言 上次用Mybatis還是2017年做專案的時候,已經很久過去了。中途再沒有用過Mybatis。導致現在學習SpringBoot過程中遇到一些Mybatis的問題,以此做出總結(XML極簡模式)。當然只是實用方面的總結,具體就不深究♂了。這裡只總結怎麼用!!! (這次直接跳到十一,是因為中間是Rabb

mybatis深入理解 # 與 $ 區別以及 sql 預編譯

tcl nec from esql 校驗 ntp code 理解 替換字符串 mybatis 中使用 sqlMap 進行 sql 查詢時,經常需要動態傳遞參數,例如我們需要根據用戶的姓名來篩選用戶時,sql 如下: select * from user where nam

Mybatis查詢select操作

自動完成 分享 簡單 就是 映射 對象的引用 from 配置文件 相關 先看select標簽的屬性: 說幾點: resultType和resultMap都是用來表示結果集的類型的,resultType用於簡單的HashMap或者是簡單的pojo對象,而resultSe

數據庫--MyBatis的(insert,update,delete)三種批量操作

tno open let 項目 sep arraylist htm 子句 由於 轉自:http://blog.csdn.net/starywx/article/details/23268465 前段時間由於項目趕期沒顧上開發過程中的性能問題,現對部分代碼進行優化的過程中發

oracle學習多表查詢,子查詢以及事務處理

color 1-1 註意事項 員工 列數 .com 外連接 分析 top-n分析 多表查詢的基礎是采用笛卡爾集: 最終的行數 = 表1的行數 * 表2的行數 最終的列數 = 表1的列數 + 表2的列數 過濾笛卡爾集的關鍵是寫連接條件,N張表至少需要N-1個條件。 多表