一、多对一
接着上次一对多留下来的疑问
两种方式都尝试了都成功了,不知道是系统自己覆盖了还是怎样,总之我觉得我的思路是没问题的,但是还是没太懂原本的代码是什么意思,先放一下
然后看看这次的测试类和结果
没有使用嵌套循环了,通过在product类中加入getCategory方法获取相关信息
相比于一对多,多了一个product.xml
然后尝试了一下,category.xml是不可以被删掉的,也就是说运行需要用到三个xml文件
对比一下两个xml文件吧
两个文件都可以划分为三个部分,大体是相似的,查询的代码是完全相同,注意到标签一对多collection(集合)和多对一association(关联)的区别
总之从大体上来讲,关于category的信息内容需要通过product类来跳转查找并输出,所以为Product类增加category属性,所以也需要新增Product.xml来添加对Category的映射帮助查找
然后在Category类中,相应的测试类做出改动后我觉得它好像不需要获取 Product了,我在删除上图红框中的内容后也确实正常运行,但是我又觉得会不会和xml中的映射扯上关系(应该不会和数据表查询有关系,那个只是表的查询不涉及到java类吧,只是因为刚好同名而已),虽然正常运行是不是因为系统自己纠错了,太晕了,原理也不是很懂
但是在我进一步想删除Category.xml中的映射时(上图)就报错了,我的思路是另一个xml文件已经有多对一的映射了,在测试类中也没有用到一对多的映射,应该不会影响 ?但是结果是需要的,也就说需要相互映射?
多对一的学习就到这里吧
二、终于到动态sql了!
先正常来一遍,运用Product.xml中的两种查询方法
if
使用if语句
如果没有传参数name,那么就查询所有,如果有name参数,那么就进行模糊查询。
这样只需要定义一条sql语句即可应付多种情况了,在测试的时候,也只需要调用这么一条sql语句listProduct 即可
再测试一下
两种查询结果
where
在多条件查询中如果只有一个条件没办法正常执行,引入where
比较有没有where标签的差别
然后set标签我没看太懂,给的案例不是还是在查询里面吗,对更新的限制是在哪里呢?
choose
标签组 where、choose、when or otherwise
foreach
也是没看懂例子......
这不是选取三个到一个表单里面然后再新建实体查询表单内容吗,foreach的特殊性不是很能理解
bind
之前这个string(字符串)应该是object表示值
暂时到这里了,有的例子虽然有点没懂意思但是知道大概的标签了
三、分页
首先删除数据、增加数据并且输出数据
暂时没有用到if中的语句,完成创造数据并输出,但是不是很理解为什么输出的数据是倒序?
start是指从第0个开始,如果是第二页,那么就是第5个开始。
count参数是指每页有5条数据
在更改代码重新要求输出后,得到的结果也和预期不太一样,没看懂输出的是什么东西
为什么95-99对应的是id201-205?
在观察数据表之后发现可能是因为之前错误执行了,第一次没正确删除原有的五个数据,第二次创造一百条数据后我重新开始又删除了,所以是从id=106开始的
但是为什么只输出了最后五个呢,从0开始应该是输出第一页最前面的五个才对
考虑到之前输出全部数据也是按倒序输出的,所以如果是按倒序其实是输出的第一页,所以为什么会突然变成倒序输出呢???
暂时就到这里吧,把所有内容都了解了一遍
用时:四个小时