記錄一下殺死我N多腦細胞的mybatis增改查不用model進行存取

在沒有model的層的情況下,查詢的語句要怎麼顯示呢?新增修改的字段又怎麼存取呢?用HashMap啊!!!上代碼!!!

首先看一下Mapper類    ps:我用的Spring+springMVC+mybatis

	//查詢 Map<String,Object>key爲字段名,value爲值
	Map<String,Object> getAll();
	
	//新增:動態填入字段名及值
	boolean save(@Param("keys")Map<String,Object> keys);
	
	//修改:動態填入字段名及值
	boolean update(@Param("keys")Map<String,Object> keys,@Param("fid")int fid);
	
	//查詢所有表所有字段名
	List<String> getFields();

xml文件的寫法

	<!-- 查詢返回HashMap,字段名自動存入key -->
	<select id="getAll" resultType="java.util.HashMap">
		SELECT * FROM tb_temp 
	</select>
	
	<!-- 查詢所有字段名 tb_temp:表名,DB_TEMP:數據庫名  -->
	<select id="getFields" resultType="String">
		select COLUMN_NAME userName from information_schema.COLUMNS WHERE TABLE_NAME='tb_temp' AND table_schema='DB_TEMP'
	</select>
	
	<!-- 新增 keys.keys:獲取key -->
	<insert id="save" parameterType="hashmap">
		INSERT INTO tb_temp(
		<foreach collection="keys.keys" index="index" item="key" separator="," >
			${key}
		</foreach>
		) VALUES (
		<foreach collection="keys" index="index" item="value" separator="," >
			#{value}
		</foreach>
		)
	</insert>
	
	<!-- 修改在map直接存入的  字段=值 例如 ftype = '1',我這是用的蠢辦法,有好想法的可以告訴我一下哦 -->
	<update id="update" parameterType="hashmap">
		UPDATE tb_temp SET
		<foreach collection="keys" index="index" item="value" separator="," >
			${value}
		</foreach>
		WHERE fid=#{fid}
	</update>

controller類的寫法

	/**
	 * 查詢所有
	 * @param request
	 * @return
	 */
	@RequestMapping("/getAll")
	@ResponseBody
	public String getAll(HttpServletRequest request){
		JSONObject json = new JSONObject();
		JSONArray ary = new JSONArray();
		JSONObject obj = new JSONObject();
		try{
			Map<String, Object> map = ms.getAll();
			//遍歷map,值得注意的是爲null的value是默認隱藏的哦
			Iterator<Map.Entry<String, Object>> it = map.entrySet().iterator(); 
			while (it.hasNext()) { 
			  Map.Entry<String, Object> entry = it.next();
			  json.put(entry.getKey(), entry.getValue());
			}
			ary.add(json);
		}catch(Exception e){
			e.printStackTrace();
		}
		obj.put("ary", ary);
		return obj.toString();
	}
	
	//新增
	@RequestMapping("/add")
	@ResponseBody
	public String add(HttpServletRequest request){
		JSONObject obj = new JSONObject();
		try{
			Map<String, Object> savemap = new HashMap<String, Object>() ;
			//獲取表所有字段名,之前這裏是想把map的key保存在session中用的,但是發現value爲null時是默認隱藏的,在這裏會存在bug,所以換成直接讀取所有字段
			List<String> list = ms.getSpeFields();
			for(int i=0;i<list.size();i++){
				String value = request.getParameter(list.get(i)));
				if(value!=null && !"".equals(value)){
					 savemap.put(list.get(i), value);
				}
			}
			//ms是我映射的service的名字,哈哈
			ms.saveSpe(savemap);
			obj.put("success", true);
		}catch(Exception e){
			e.printStackTrace();
			obj.put("success", false);
			obj.put("msg", e.getMessage());
		}
		return obj.toString();
	}
	
	//修改
	@RequestMapping("/edit")
	@ResponseBody
	public String edit(HttpServletRequest request){
		JSONObject obj = new JSONObject();
		try{
			Map<String, Object> editmap = new HashMap<String, Object>() ;
			//所有解釋同上啦
			List<String> list = ms.getSpeFields();
			for(int i=0;i<list.size();i++){
				String value = request.getParameter(list.get(i)));
				if(value!=null && !"".equals(value)){
					 editmap.put(list.get(i), list.get(i)+"='"+value+"'");
				}
			}
			ms.updateSpe(editmap,Integer.parseInt(request.getParameter("fid")));
			obj.put("success", true);
		}catch(Exception e){
			e.printStackTrace();
			obj.put("success", false);
			obj.put("msg", e.getMessage());
		}
		return obj.toString();
	}

前端js的寫法,我用的easyui,好吧~~~都是比較原始的東西

//這裏是根據我的需求寫的,大神們可以挑自己需要的部分看
function getData() {
	$.ajax({
		type : "post",
		async : false,
		url : "modbus/getAll",
		data : {},
		dataType : "json", //返回數據形式爲json  
		success : function(result) {
			//將獲取到的ary根據“,”替換成“:”
			var filesname = JSON.stringify(result.ary[0]);
			filesname = filesname.substring(1,filesname.length-1).replace(/,/g, ':');
			//再根據“:”分割
			var filelist = filesname.split(":");
			//遍歷,typeary是我的某個數組,此處不做介紹了哈
			for(var i=0;i<typeary.length;i++){
				//匹配filelist是否存在某個字段名,例如typeary[i].name爲‘fname’,存在則返回下標,否則返回-1;filelist[index+1]:前面的替換、分割已經將filelist存入的是一個字段名一個值。例如["fid","1","fname","張三"],所以獲取他的字段下標後再+1就是他的值啦
				var index = filelist.indexOf("\""+typeary[i].name+"\"");
				if(typeary[i].type == "combobox"){
					if(index!=-1){
						//動態生成文本
						$("#"+typeary[i].name).combobox('setValue',filelist[index+1]);
					}else{
						$("#"+typeary[i].name).combobox('select',typeary[i].defaults);
					}
				}else if(typeary[i].type == "textbox"){
					if(index!=-1){
						$("#"+typeary[i].name).textbox('setValue',filelist[index+1]);
					}else{
						$("#"+typeary[i].name).textbox('setValue',typeary[i].defaults);
					}
				}else{
					if(filelist[index+1]!=0){
						$("#"+typeary[i].name).prop("checked",true);
					}else{
						$("#"+typeary[i].name).removeAttr("checked");
					}
				}
			}
		},
		error : function(errorMsg) {
			alert("數據請求失敗,請聯繫系統管理員!");
		}
	});
}

就這麼多啦,寫了很多廢話,是因爲自己記性不好,怕自己忘掉,希望未來的自己會感激現在正在努力的自己。此博客是根據自己的需求做的,目的是根據配置文件動態添加數據庫字段並完成增刪改查,如果可以幫到你是我的榮幸,筆芯哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章