今天实现点击表格中的用户已绑定数据,跳转到另一个界面,直接显示表格信息。并支持在一个input标签中输入id或者名称实现查询。这个比较难搞,想复杂了。导致用了很长时间。
跳转路由并传参:
首先注册路由,并引入视图。再在需要跳转处绑定路由。跳转时可以进行传参,再另一个视图中根据传的参数进行显示数据。实现如下:
{
path: '/user',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/data/individualinfo/userData',
component: () => import('@/views/data/individualinfo/userData'),
name: 'userData',
meta: { title: '用户数据', icon: 'user' }
}
]
},
绑定路由并传参:
//跳转到用户数据界面,并传参
goToUserData(userId){
this.$router.push({
name:'userData',
params:{
id : userId,
}
});
在跳转后的试图中接收参数:
//利用生命周期函数接收参数
created() {
console.log(this.$route.params.id) // 输出跳转路由时的参数,用户id
this.queryData.id = this.$route.params.id; //接收id,利用此id查询
this.getList();
},
别的跳转路由并传参方式看这位大佬:
https://www.cnblogs.com/betterwgo/p/13125346.html
多表查询时,返回的数据包含好几个表的字段,定义一个实体类,用来接收该次多表查询返回的数据。注意定义时别忘了@Data注解,否则自定义的字段无法映射到。
由于要求一个input框中可以支持id和名称进行查询。一开始我以为数据库查询id时,值需要和数据库中id字段类型一致。然后考虑用object类接收前端传过来的数据,再对接收到的数据进行instanceof判断类型。再写不同的mapper方法进行查询。是我错了。
oracle中支持查询字段的值可以与字段的类型不一致,所以考虑后端只定义一个string接收前端传来的数据,再在数据库中用or查询。这样更方便。如下:
//注意括号
<if test="dataIdOrName != null and dataIdOrName != '' ">
and
(to_char(APP_DATA.ID) like concat(concat('%',#{dataIdOrName}),'%')
or
APP_ITEM.NAME like concat(concat('%',#{dataIdOrName}),'%'))
</if>
今天报了一个无效索引列的错误,但是语句语法都是对的,找了半天,结果是在sql语句中的注释引起的,删去注释,就不报错了
例如:
//上面一条是注释掉的语句,如果想执行第二条语句,需要直接删除上一条,这样注释后运行会报错
<if test="dataIdOrName != null and dataIdOrName != '' ">
-- and (to_char(APP_DATA.ID) like concat(concat('%',#{dataIdOrName}),'%') or APP_ITEM.NAME like concat(concat('%',#{dataIdOrName}),'%'))
and (APP_ITEM.NAME like concat(concat('%',#{dataIdOrName}),'%'))
</if>
但是我的思路,问了公司的前辈,前辈说可以用post请求方法,然后定义一个实体类,属性设置为需要接收的参数,利用requestbody注解,接收该实体类,这样参数都会被放到该类中,可以再获取该类的属性值,判断是哪种类型。json格式中,如果参数值为int或者long类型等,那么json格式为:"id" : 1。如果值为字符串,则json格式为:"name" : "123"