博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC+MyBatis项目总结(二)
阅读量:7218 次
发布时间:2019-06-29

本文共 2062 字,大约阅读时间需要 6 分钟。

hot3.png

以前用SSH框架做项目,感觉说不上复杂,也不算容易,重复性工作不少,这次换了SpringMVC和Mybatis,由于是第一次这么写,中间碰到了不少麻烦,首先是Mybatis的一对多,多对多关系的配置,真的挺麻烦的,一会用resutType,一会用resultMap,中间好几次写了resultMap='int',然后一点一点查问题。之前又没有用过,出了异常经常都找不到问题,还得网上各种查。。。。。。

这次自己手动写SQL语句,遇到了不少麻烦,原本以为HQL换成了SQL语句灵活性大了很多,确实是这样,但是这只是写分页之前,分页部分折腾我一天,查了好多资料,最后还是用临时表解决了分页问题。

先说一下Mapper文件的配置

直接就以图书的Mapper配置文件来说吧,扩展类对应的配置文件

    
    
    
    
    
    
    
    
    
    
    
        
        
       
SELECT b.BOOKID,b.TYPEID,b.PUBLISHERID,b.BOOKNAME,b.NUM,b.ISBN,b.PRICE,p.PUBLISHERNAME,t.TYPENAME,a.AUTHORNAME,a.AUTHORIDFROMt_author aINNER JOIN t_abref r ON a.AUTHORID = r.AUTHORIDINNER JOIN t_book b ON r.BOOKID = b.BOOKIDINNER JOIN t_publisher p ON p.PUBLISHERID = b.PUBLISHERIDINNER JOIN t_type t ON t.TYPEID = b.TYPEIDWHEREb.BOOKID IN (SELECT bookid FROM ( SELECT BOOKID FROM t_book WHERE bookid IN (SELECT t_book.BOOKID FROM t_authorINNER JOIN t_abref ON t_author.AUTHORID = t_abref.AUTHORIDINNER JOIN t_book ON t_abref.BOOKID = t_book.BOOKIDINNER JOIN t_publisher ON t_book.PUBLISHERID = t_publisher.PUBLISHERIDINNER JOIN t_type ON t_book.TYPEID = t_type.TYPEID
and t_book.TYPEID=#{typeid}
and bookname like #{bookname}
and t_author.authorid=#{authorid}  
)LIMIT #{page.firstResult},#{page.maxResults}) AS tb)  

这个多表联合条件查询+分页真的把我恶心到了,开始没有用这种方式写,就是多表直接连接,然后加上条件,最后直接limit,结果就是查出来的数据有问题,因为作者和图书是多对多关系,Mybatis吧多条数据合并成list了,显示结果就出问题了。

想过解决办法,开始想用3层查询,先查出来结果(id),然后查询id位于第一次查询的结果并且分页,最后查询所有字段,in分页的结果,然后mysql无情的提示我limit和in不能同时使用,瞬间崩溃。

然后就考虑使用N+1的方式,第一次只查询图书,类型,出版社相关信息,作者做2次查询,结果也碰到了问题,就是作者查询不知道怎么传递参数了(嵌套查询貌似只能试用之前查出来的结果,不能用外面传进来的参数?这个以后继续研究。。。),最后没办法,只好放弃了。。

今天网上查了查limit和in共同使用的方法,没想到很意外,竟然找到了,原来再多做一次嵌套查询,就可以避免in和limit的冲突关系了~

话说这个问题解决后,真的发现hibernate做的强大!!!setFirstResult,SetMaxResult就直接搞定了,管你条件查询,多对多关系,通吃!

分页部分我把之前SSH中分页标签插件直接改了个拿来没想到竟然可以直接使用~喜出望外~~~

另外找到了一个MybatisPageHelper分页插件,用了拦截器,貌似还是简单的可以直接使用,麻烦点的貌似还是不成,回头在研究研究~

转载于:https://my.oschina.net/eviltuzki/blog/425496

你可能感兴趣的文章
ubuntu配置cudnn
查看>>
P1242 新汉诺塔 && UVA10795 A Different Task
查看>>
从零开始学习PYTHON3讲义(十一)计算器升级啦
查看>>
从零开始学习PYTHON3讲义(三)写第一个程序
查看>>
WebGis设计模式
查看>>
cocos2dx ScrollView 测试一 触摸事件优先级和自动调整
查看>>
django 使用mysql数据库的流程
查看>>
Android系统移植与调试之------->如何修改Android设备的默认休眠时间
查看>>
我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)...
查看>>
uboot 传递的参数 mtdparts
查看>>
六种排序算法C语言版(上)
查看>>
292. Nim Game(easy)
查看>>
ERROR 1786 (HY000)
查看>>
Kubernetes 学习7 Pod控制器应用进阶2
查看>>
Python字符串相加以及字符串格式化
查看>>
11.08 轮换行值
查看>>
AIX lsof 命令
查看>>
微信小程序个人项目(node.js+koa2+koa-router+middleware+mysql+node-mysql-promise+axios)
查看>>
C#温故而知新学习系列之面向对象编程—类的数据成员(三)
查看>>
列表字典推导式
查看>>