有些时候,一些手写sql的查询条件如果过多.那么我会选择用json对象来接收查询条件的值.
我会定义一个param类来声明各个需要用到的属性.
然后从controller层. 接收参数,最后到mapper层的入参,都可以用这个对象代替,而不用去写特别多的参数.
这样的话,代码看起来就简洁了许多. 省心且省事,因为不用担心十来个入参,会写错入参的顺序.
导致对应不上,也不用担心增加需求: 进行扩展.
需要进行扩展的时候,如果是原来的,传入N多个字段,那么从传入到最后的mapper的参数列表全都要改.
一不小心就改错就GG了,而用json的话,只需要在类里面加个字段,然后在.xml文件中去使用一下就可以了.
这个出错率就很低.
而手写sql中的parameterType的类型,是支持传入一个javaBean的,也就是我定义的那个对象.
在对象里面取值的话,用的是对象映射的值,打点,然后,后面跟属性值.
这样的话,字段值统一在一个类里面进行管理. 在需要用到的时候取用,参数列表无需额外修改.
而且去知乎扒了一下,说是json更安全.
种种迹象都表明,json更好.
但是json是需要建一个类的. 而简单的字段是不需要去建立一个类的.
如果为了一个接口一个字段的入参,而去建立一个类,那么就太不划算了,会导致类过多.
所以简单的入参,我给自己定一个规则吧.
如果入参极其简单,不超过3个字段. 我就用formdata.
一旦超过三个,并且有扩展的可能性,我就用json.
字段越多,优势越明显.
我老是觉得,如果类建的多了,会导致难以管理,所以有点抵触去新建类.
但是事实证明,如果是不建立类,写在代码里面的话,更加难以管理. 更难以维护.代码量更多.
而实际上,多建类并不会造成难以管理的情况,全局搜,很快就可以定位到. 而且类多,也不会说是影响性能.
综上所述,尽量用json.
xml里面就这样写
id = selectByName parameterType = user resuletType = xxx
select * from user where name = #{user.name}
mapper里面就这样写
xxx slectByName (@param(“user”)User user);
这样是可以的.
一些需要记录的问题: 实现过程中的一些细节