在没有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("数据请求失败,请联系系统管理员!");
}
});
}