Pojo包装对象与Mapper的sql片段,动态sql技术
一般来说由于对于Mybatis的mapper里的单个sql语句中要传入的参数是一个包装对象,所以一般是要把一个类的包装类给传进去。如下图中的ItemQueryVo类是一个包装了Item和ItemCustom的一个类。对于这条sql语句,我们是要传入item类中的一些封装的属性,所以我们的item类就是一个需要传入的参数。
Item类是一个真正的关于商品信息的类,也就是我们真正想要传入的类:
但是根据规范我们通常是将需要传入的参数的对象进行包装再传入,所以定义了一个ItemQueryVo类来将Item类作为他的一个字段属性进行包装:
此外,对于ItemQueryVo类中的这个ItemsCustom类,是一个针对Itmes的扩展类,因为在有些时候我们需要使用关联查询,所以这种情况下原本的POJO中的字段数对于我们进行保存或者使用的所需要的字段数来说是不够的,所以我们继承Items类来继承实现了一个扩展的items类:
SQL片段:
在每一个mapper中我们要编写相对应的sql代码,由于where条件是根据情况不同的,所以呢我们通常是将where语句抽取出来与select主代码块进行分离,根据具体的使用来修改xml配置文件进行适应。
动态SQL:
动态sql就是利用if语句进行动态地判断使用哪条sql查询条件。
在使用mapper中的代码块的时候注意,使用当前传入的对象的直接属性是不需要用选择运算符的。例如上面的findItemsList语句块中传入的对象是ItemsQueryVo,要使用其下的items可以直接使用,而无需像这样:ItemsQueryVo.items 来进行选择。