用户id"/>
不同用户id
不同用户id--不同服务id--查询同一张表的不同字段信息
- 一 在数据库先建两张表 result表 testUser表
- 二 建三个model实体类
- 三 ctrl层的方法
- 四 SC层方法
- 五 Mapper接口方法
- 六 Mapper.xml文件
- 七 把查出来的不同字段的表信息展示在页面上
- 八 效果展示
最近在公司有一个需求,需求就是不同的用户登陆系统之后,调用同样的方法,方法里调用同样的mapper接口,mapper接口调用同一个mapper.xml文件,查出来的也是同一张表,但是重点是 查出来的这张表的字段不一样,比如说A登陆之后查看这张表时可以看到10个字段,B登陆之后查看这张表却只能看到5个字段(不是在前端页面隐藏元素实现的)
一 在数据库先建两张表 result表 testUser表
result表
userId | serverId | resultMap |
---|---|---|
1 | SC_find_Name_Age | name,age |
10 | SC_find_Name_Age | name,age,address |
id | name | age | address |
---|---|---|---|
1 | 王盼 | 13 | 郑州 |
2 | 张浩 | 16 | 北京 |
3 | 袁梦阳 | 34 | 上海 |
二 建三个model实体类
Result 实体类
package cn.qianlong.light.model;
public class Result extends PublicStr{private Integer userid;private String serverid;private String resultmap;public Integer getUserid() {return userid;}public void setUserid(Integer userid) {this.userid = userid;}public String getServerid() {return serverid;}public void setServerid(String serverid) {this.serverid = serverid == null ? null : serverid.trim();}public String getResultmap() {return resultmap;}public void setResultmap(String resultmap) {this.resultmap = resultmap == null ? null : resultmap.trim();}
}
testUser实体类
@Data
public class TestUser {private Integer id;private String name;private Integer age;private String address;
}
PublicStr实体类
@Data
public class PublicStr {private String publicStr;public String getPublicStr() {return publicStr;}public void setPublicStr(String publicStr) {this.publicStr = publicStr;}
}
三 ctrl层的方法
@Controller
@RequestMapping("/look")
public class TestUserCtrl extends LightBaseCtrl {/*** 查询结果集*/@RequestMapping("/result")@ResponseBodypublic List<TestUser> lookResult() throws Exception {String userId = UserUtil.getUserId();//得到登陆的用户idString serverId="SC_find_Name_Age";//设置服务id//根据用户id和服务id去查询结果集Result re=(Result)this.getLightServiceUtil().callServiceWithParam("SC_find_Name_Age",userId,serverId);//从查到的对象中得到结果集项String result=re.getResultmap();//创建公共字段对象,存放结果集PublicStr publicStr=new PublicStr();publicStr.setPublicStr(result);//根据结果集查询出对应的数据List<TestUser> list=(List<TestUser>) this.getLightServiceUtil().callServiceWithParam("findByResultMap", publicStr);return list;}
}
四 SC层方法
@LightServiceContainer
public class TestUserSC extends LightBaseService {
@Autowiredprivate TestUserMapper testUserMapper;
@Autowiredprivate ResultMapper resultMapper;@LightService(serviceName = "SC_find_Name_Age",memo = "查询结果集",version = "V1.0")public Result getResult(String userId,String serverId){Result result = resultMapper.getResult(userId, serverId);return result;}@LightService(serviceName = "findByResultMap",memo = "根据结果集查询结果",version = "V1.0")public List<TestUser> getUserByResultMap(PublicStr publicStr){List<TestUser> userByResultMap = testUserMapper.getUserByResultMap(publicStr);return userByResultMap;}
}
五 Mapper接口方法
public interface TestUserMapper {TestUser getList(Integer id);List<TestUser> getUserByResultMap(PublicStr publicStr);
}
六 Mapper.xml文件
<select id="getUserByResultMap" parameterType="cn.qianlong.light.model.PublicStr" resultMap="BaseResultMap">select ${publicStr} from testUser</select>
七 把查出来的不同字段的表信息展示在页面上
前台页面是dataGrid写的,使用ajax请求数据,并把请求的数据进行处理之后放到columnModel中就可以了。
因为静态的字段写法是这样的
$('#dataGrid').dataGrid({searchForm: $("#searchForm"),lazyLoad:false,//懒加载//multiselect:true,//多选inputPageNo: $("#pageNo"),inputPageSize: $("#pageSize"),inputOrderBy: $("#orderBy"),columnModel:column,columnModel: [{header:'学号', name:'studentId', index:'a.student_id', width:200, align:"center", formatter: function(val, obj, row, act){return '<a href="${ctxPath}/studentdemo/studentform?studentId='+row.studentId+'&op=edit" class="btnList" data-title="编辑用户">'+(val||row.studentId)+'</a>';}},{header:'姓名', name:'studentName', index:'a.student_name', width:200, align:"center"},{header:'手机号', name:'mobile', index:'a.mobile', width:200, align:"center"},{header:'院系', name:'college', index:'a.college', width:200, align:"center"},{header:'专业', name:'major', index:'a.major', width:200, align:"center"},{header:'操作', name:'actions', width:260, sortable:false, title:false, align:"center",formatter: function(val, obj, row, act){var actions = [];actions.push('<a href="${ctxPath}/studentdemo/studentform?studentId='+row.studentId+'&op=edit" class="btnList" title="编辑用户"><i class="fa fa-pencil"></i></a> ');// actions.push('<a href="${ctxPath}/studentGridDemo/editStudent?studentId='+row.studentId+'" class="btnList" title="停用用户" data-confirm="确认要停用该用户吗?"><i class="glyphicon glyphicon-ban-circle"></i></a> ');actions.push('<a href="${ctxPath}/studentdemo/deletestudent?studentId='+row.studentId+'" class="btnList" title="删除用户" data-confirm="确认要删除该用户吗?"><i class="fa fa-trash-o"></i></a> ');actions.push('<a href="javascript:" οnclick="deleteSelectRowData({gridId:\'dataGrid\',url:\'${ctxPath}/studentdemo/deletemorestudent\',paramField:\'studentIdList\',info:\'确认要删除选中的学生信息吗?\',resultHandle:handleFunction,resultCallBack:callBackFuncion});" title="删除"><i class="fa fa-trash-o"></i></a> ');//deleteSelectRowData({gridId:'dataGrid',url:'${ctxPath}/studentdemo/deletemorestudent',paramField:'studentIdList',info:'确认要删除选中的学生信息吗?',resultHandle:handleFunction(ele),resultCallBack:callBackFuncion(gridId)});return actions.join('');}}],// 加载成功后执行事件ajaxSuccess: function(data){}});
所以动态字段就这样写
$(function () {$.ajax({url:"/look/result",type:"post",dataType:"json",async:false,success:function (data) {alert(JSON.stringify(data));//声明一个空数组column,column要赋值给columnModel,columnModel是dataGrid的表格的字段显示// 因为data里面是[{},{},{}]这样的形式,所以取出data的第一个{}即可,对data[0]进行遍历var column=[];$.each(data[0],function (key,value) {//参数key和value是data[0]中的key和valueif(value!==null){ //查出来的包括null的value,要把null的value排除掉,只显示有值的部分column.push({ //给数组里面添加{}header:key,name:key,index:"a."+key,width:100,align:"center"});}});$('#dataGrid').dataGrid({searchForm: $("#searchForm"),lazyLoad:false,//懒加载//multiselect:true,//多选inputPageNo: $("#pageNo"),inputPageSize: $("#pageSize"),inputOrderBy: $("#orderBy"),columnModel:column, //把column数组赋值给columnModelajaxSuccess: function(result){}});}});});
最后就实现了上面这个需求,代码是运行成功之后的源码。
八 效果展示
admin用户登陆查看表信息
jn_jsb用户登陆查看表信息
更多推荐
不同用户id
发布评论