SpringBoot中关于Mybatis使用的三个问题
SpringBoot中关于Mybatis使用的三个问题
转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8495453.html
原本是要讲讲PostgreSQL的一些学习总结的,不巧的是最近一段时间的进度都是一些类似于加减乘除、位移、类型转换的稍显小儿科的一些内容,额~(ಠ .̫.̫ ಠ),这也不是什么问题,只是觉得这中间没什么终点和难点可讲的,也就暂时略过了~,这里首先说声抱歉啊,后续如有什么使用难点或有趣的地方一定拿出来讲讲♥◠‿◠)ノ;额,每次开篇总要讲一堆看似没啥用的内容,有啥用,有啥用,?,想了许久,倒觉得有些用->就是一种习惯,总能记录最近一段的心情。心情这东西捉摸不定,其实对开发也至关重要,比如元素周期表的诞生哈。。。
由于年初才开始使用SpringBoot,这里一般的问题均是SpringBoot框架下的问题,这次我讲三点,也是我实际开发中碰到的哦( ̄﹏ ̄) =>
1>按主键查询时报dao类型不能转换
2>连表查询时的mapper和dao方法
3>插入数据返回主键的配置方法
第一个问题:“按主键查询时报dao类型不能转换”。
嗯~,可以看做是Mybatis的一个bug,目前只在tk版的mybatis中出现过,这里先晒出代码和报错信息(◑‿◐ ):
1 @RequestMapping({"dao","dao2"}) 2 public ZwPayLog dao(HttpServletRequest request){ 3 ZwPayLog pl=zwPayLogMapper.selectByPrimaryKey(Long.valueOf(-1)); 4 LOG.info("TestPay->get=>"+ JSON.toJSONString(pl)); 5 return pl; 6 }
代码其实就一行(以上红色着重部分),这里的“selectByPrimaryKey”方法是tk版Mybatis实现的,我只是借用;一开始使用Mybatis的时并没有报过这种错误,有点儿摸不到头脑,当时排查了好一会儿以为是自己的代码的有问题呢,后搜索在StackOverflow中有人简述了这个问题,大致的意思是tk版与SpringBoot1.5的兼容问题,个人觉得是tk版Mybatis与SpringBoot没整好的问题,且就当是一个bug吧,这里为造福广大入坑的盆友,贴出一个最简单的解决方式=>
先在项目(或模块)的resources目录下新建一个META-INF的文件夹,文件夹里面放入一个spring-devtools.properties的文件,for example:
然后这个配置文件里面添加这么一句:“restart.include.companycommonlibs=tk/mybatis.*”,只有一句,这里我就不截图了,好了,问题解决(。◕ˇ∀ˇ◕)。
接下来,第二个问题总结:“连表查询时的mapper和dao方法”。
这个问题本以为很简单的,事实却不是,一开始看老大或网上的样例是这样做的->在dao接口里面直接继承Mapper<entity>这样一个通用的Mapper就可以了,简洁到甚至不用在里面声明方法的,就像这样( ͡° ͜ʖ ͡°)✧:
1 public interface ZwCisReportMapper extends Mapper<ZwCisReport> { 2 }
但实际需求并不是一个单独的表增删改查,而是一个连表查询,可能是对TK版Mybatis见识少,一时晕头转向,疯狂在google中检索相关内容,未遂。。。,最后,我使用原生的方法来解决的。
在这里我演示下主要代码,首先在mapper的xml文件里面写对应的连表查询语句,比如这里有两个查询语句声明(getProject和getOrder)=>
(p2pEyeMapper.sql.xml)
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <mapper namespace="*.security.admin.mapper.P2pEyeDao"> 4 <select id="getProject" resultType="*.security.admin.po.p2pEye.P2PeyeProject" parameterType="java.util.Map"> 5 <!-- 这里具体SQL省略 --> 6 </select> 7 <select id="getOrder" resultType="*.security.admin.po.p2pEye.P2PeyeOrder" parameterType="java.util.Map"> 8 <!-- 这里具体SQL省略 --> 9 </select> 10 </mapper>
再在映射的dao中声明这两个sql查询的id名称即可,记得namespace也要对应哦,嗯,继续展示下 P2pEyeDao.java (dao)中的代码吧=>
1 @Mapper 2 public interface P2pEyeDao { 3 //获取项目信息(标) 4 List<P2PeyeProject> getProject(Map<String,Object> params); 5 6 //获取投标信息 7 List<P2PeyeOrder> getOrder(Map<String,Object> params); 8 }
额,这里需要注意三点:
1>比如在getProject方法中放置>1个参数的时候建议使用Map来传参,嗯,如果可以的话可以写一个po来封装参数,这样最好,如果想简单点儿,比如这样getProject(param,param2)的话很容易报参数找不到(params is not fund)错误
2>如果通过封装的参数体来传参的话,需要在对应的select(xml中)的标签中声明“parameterType”这个参数值
3>resultType这个返回值必填,且需要和dao中声明的方法一致才可
至于怎么用,这里不再赘述了吧,读者懂得( ื▿ ื)。
讲讲第三个问题:“插入数据返回主键的配置方法”。
这个问题本不是问题,在这里我只是提供一个tk版的简洁解决方法。先说说网民们给的一般解决思路是什么吧,在原生mybatis中大概是这样子的:
<insert id="insertProduct" parameterType="domain.model.ProductBean" ><selectKey resultType="java.lang.Long" order="AFTER" keyProperty="productId">SELECT LAST_INSERT_ID()</selectKey>INSERT INTO t_product(productName,productDesrcible,merchantId)values(#{productName},#{productDesrcible},#{merchantId});</insert>
dao中是这样子的:
1 @Mapper 2 public interface XXDao{ 3 Integer insertProduct(ProductBean pb); 4 }
嗯,我想这里唯一需要注意的一点儿是调用“insertProduct”这个方法之后返回的Integer不是主键,不是主键,不是主键!!!,二是在执行这个插入后的“ProductBean”类型的pb对象中,就是调用插入后已经自动写入了主键。
以上是一般解决办法,如果用我大TK的方式(这里说的是只在单表Mapper下),可就简单多了。
由于tk用的是通用mapper来实现dao与xml对应的,xml里面只用声明对应的实体与表的映射参数就可以了,具体的sql实现是不用写的(这里需要通用Mapper的泛型),这时候dao就如下这么简单:
1 public interface ZwCisReportMapper extends Mapper<ZwCisReport> { 2 }
但是实际使用的时候自动生成id的那个字段一定要这样声明->
1 /** 2 * 主键ID 3 */ 4 @Id 5 @GeneratedValue(strategy = GenerationType.IDENTITY)//设置为主键自增以回写主键 6 private Long id;
额,其实重点就是一个“@GeneratedValue”注解●ω●,这个是框架提供的方式,需要一看究竟的请自行搜索,至于生成的主键也是在调用后再传入的实体里面。
OK,本章完结!
现在是:2018-03-03 20:19:54 各位晚上好
转载于:https://www.cnblogs.com/funnyzpc/p/8495453.html
SpringBoot中关于Mybatis使用的三个问题相关推荐
- springboot中的mybatis是如果使用pagehelper的
springboot中的mybatis是如果使用pagehelper的 springboot中使用其他组件都是基于自动配置的AutoConfiguration配置累的,pagehelper插件也是一样 ...
- springboot中整合mybatis及简单使用
springboot中整合mybatis及简单使用 1.引入依赖 2.在applicaiton.yaml中配置数据源以及mybatis 3.创建sql测试表 4.编写mapper接口和mapper.x ...
- SpringBoot中使用mybatis/ibatis日志打印sql
SpringBoot中使用mybatis/ibatis时日志打印sql 控制台打印mybatis/ibatis对应的sql 主机的日志文件中打印mybatis/ibatis对应的sql 控制台打印my ...
- 在springboot中使用mybatis generate自动生成实体类和mapper
1.在全局的pom中引入mybatis generate的依赖 <!--自动生成实体--><dependency><groupId>org.mybatis.gene ...
- SpringBoot中使用Mybatis碰到的问题记录
每次使用Mybatis的时候都是去网上百度一下,然后照着网上的文章一步一步在自己的IDEA中进行配置,但是有时候明明是按着人家跑起来的流程配置的,但是就是不知道啥原因,有时就跑的起来,有时又不行!现在 ...
- Springboot中使用Mybatis框架对数据库进行联表查询,踩坑填坑
因为mybatis使用的基本是原生sql语句 所以首先从数据库开始说 以mysql数据库为例,对表的连接查询分为四种 内连接,外连接,交叉连接,和联合连接 内连接使用比较运算符根据每个表共有的列的值匹 ...
- SpringBoot中关闭Mybatis以及RocketMQ日志打印
SpringBoot工程集成了Mybatis和RocketMQ,也集成了Log4j,项目中自己的日志都可以通过log4j来管理,日志打印通过通过日志级别可以管理,一直很正常. 后来项目上线正常稳定运行 ...
- springboot 中使用 Mybatis 注解 配置 详解
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 传参方式 使用不同的传参方式: 使用@Param 之前博文中的项目使用了这种简单的传参方式: @In ...
- SpringBoot项目集成Mybatis Plus(三)分页插件
通过代码生成后,service继承了IService接口,这样可以直接使用Mybatis Plus封装的CRUD接口进行简单的增删改查. 例如简单的根据id查询: @RestController @R ...
最新文章
- 人工智能能否复制人脑引争论 美媒:目前AI仍存在局限性
- 访问者(Visitor)模式
- map容器中删除一个元素(value)
- 多线程-使线程具有有序性
- 杂项:JFB-权限设置
- Delphi动态事件深入分析
- 单片机:DS1302时钟
- 【工作感悟】linuxdocker运行windows镜像
- 联想服务器管理系统,联想服务器的系统监控软件easyManage
- C语言串口一直接收00,串口助手一直接收00;
- maven的生命周期,插件介绍(二)
- 无需会员将有道云笔记脑图转换xmind
- clojure实现邮箱发送
- golang 实现 pdf 转高清晰度 jpeg
- flinkSQL Table转DataStream
- 项目经理如何开展工作
- 如何下载 International Conference on Machine Learning(ICML)顶会的论文?从哪找ICML顶会论文?如何判断会议和期刊级别?
- JSON入门学习总结
- 工作中使用的sql知识点及查询语法
- 前世今生的痴,问谁可以洞悉
热门文章
- OpenCV 访问Mat 像素
- linux Apache启动提示 httpd: apr_sockaddr_info_get() failed f
- CListCtrl行高问题最终解决方法
- 5种方式将机器学习带到Java、Python以及Go等编程语言
- MyBatis 核心对象,工作原理及源码解读
- [Java] 蓝桥杯 BASIC-8 基础练习 回文数
- [Java] 蓝桥杯 BASIC-2 基础练习 01字串
- [Python] L1-003. 个位数统计-PAT团体程序设计天梯赛GPLT
- link中的rel表示relation(关系),表示了当前文档与 Web 集合中其他文档的关系
- The content of element type web-app must match……等 问题之解决办法