在沒有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("數據請求失敗,請聯繫系統管理員!");
}
});
}