前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot中关于Mybatis使用的三个问题

SpringBoot中关于Mybatis使用的三个问题

作者头像
上帝
发布于 2018-05-18 02:29:29
发布于 2018-05-18 02:29:29
78600
代码可运行
举报
文章被收录于专栏:影子影子
运行总次数:0
代码可运行

SpringBoot中关于Mybatis使用的三个问题

转载请注明源地址https://cloud.tencent.com/developer/article/1347857

  原本是要讲讲PostgreSQL的一些学习总结的,不巧的是最近一段时间的进度都是一些类似于加减乘除、位移、类型转换的稍显小儿科的一些内容,额~(ಠ .̫.̫ ಠ),这也不是什么问题,只是觉得这中间没什么终点和难点可讲的,也就暂时略过了~,这里首先说声抱歉啊,后续如有什么使用难点或有趣的地方一定拿出来讲讲♥◠‿◠)ノ;额,每次开篇总要讲一堆看似没啥用的内容,有啥用,有啥用,?,想了许久,倒觉得有些用->就是一种习惯,总能记录最近一段的心情。心情这东西捉摸不定,其实对开发也至关重要,比如元素周期表的诞生哈。。。

  由于年初才开始使用SpringBoot,这里一般的问题均是SpringBoot框架下的问题,这次我讲三点,也是我实际开发中碰到的哦( ̄﹏ ̄) =>

 1>按主键查询时报dao类型不能转换

    2>连表查询时的mapper和dao方法

    3>插入数据返回主键的配置方法

  第一个问题:“按主键查询时报dao类型不能转换”。

  嗯~,可以看做是Mybatis的一个bug,目前只在tk版的mybatis中出现过,这里先晒出代码和报错信息(◑‿◐ ):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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就可以了,简洁到甚至不用在里面声明方法的,就像这样( ͡° ͜ʖ ͡°)✧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 public interface ZwCisReportMapper extends Mapper<ZwCisReport> {
2 }

但实际需求并不是一个单独的表增删改查,而是一个连表查询,可能是对TK版Mybatis见识少,一时晕头转向,疯狂在google中检索相关内容,未遂。。。,最后,我使用原生的方法来解决的。

在这里我演示下主要代码,首先在mapper的xml文件里面写对应的连表查询语句,比如这里有两个查询语句声明(getProject和getOrder)=>

(p2pEyeMapper.sql.xml)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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)中的代码吧=>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中大概是这样子的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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中是这样子的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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就如下这么简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 public interface ZwCisReportMapper extends Mapper<ZwCisReport> {
2 }

但是实际使用的时候自动生成id的那个字段一定要这样声明->

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1     /**
2      * 主键ID
3      */
4     @Id
5     @GeneratedValue(strategy = GenerationType.IDENTITY)//设置为主键自增以回写主键
6     private Long id;

额,其实重点就是一个“@GeneratedValue”注解●ω●,这个是框架提供的方式,需要一看究竟的请自行搜索,至于生成的主键也是在调用后再传入的实体里面。

  OK,本章完结!

现在是:2018-03-03 20:19:54 各位晚上好

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
AI智能体(AI Agent): 概念、技术、趋势及其在制造业中的应用
今天分享Google DeepResearch对AI  Agent的研究分析报告。
人月聊IT
2025/06/24
1020
AI智能体(AI Agent): 概念、技术、趋势及其在制造业中的应用
深入解析MCP:从微软认证到AI协议的双重维度
在技术领域,缩略词“MCP”因其在不同场景下的多重含义而常引发混淆。本文将从两个核心维度——微软认证产品专家(Microsoft Certified Professional)与模型上下文协议(Model Context Protocol)——深度解析MCP的定义、价值与应用场景,助您全面理解这一技术热词背后的双重内涵。
是山河呀
2025/06/21
820
Agentic AI及其设计模式简介
微软推出 AI 代理,加深与 Salesforce 的竞争;这家总部位于华盛顿州雷德蒙德的软件制造商,周一表示,将推出 10 个自治agent,代表销售、客户支持和会计等领域的人员完成任务。
AIGC新知
2024/12/25
4530
Agentic AI及其设计模式简介
吴恩达评Agent现状:MCP尚处“蛮荒”,单Agent跑通已是“奇迹”,A2A协作堪称“双重奇迹”
吴恩达评Agent现状:MCP尚处“蛮荒”,单Agent跑通已是“奇迹”,A2A协作堪称“双重奇迹”,InfoQ,8分钟
深度学习与Python
2025/06/08
870
吴恩达评Agent现状:MCP尚处“蛮荒”,单Agent跑通已是“奇迹”,A2A协作堪称“双重奇迹”
一文看懂科技巨头 AI 战略布局
【新智元导读】科技巨头纷纷投入 AI,谁将在这场军备竞赛中胜出?本文介绍谷歌等主要几家巨头公司的AI布局。不过,无论谁最后胜出,消费者都将受益。 人工智能正在迅速成为科技领域最流行的话题之一,科技巨头们也毫不忽视这一趋势。所有的大公司似乎都在以某种方式投资机器学习。 谁将在这场AI军备竞赛中胜出?现在得出定论还太早,但对消费者来说,无论谁胜出消费者都将受益。AI在日常服务以及产品中的渗透只会提升终端用户的体验。 市场研究公司IDC预测,到2020年,AI的市场规模将从今年的80亿美元增长到470亿美元。本文
新智元
2018/03/26
9210
一文看懂科技巨头 AI 战略布局
AI代理入侵可观测性:蛇油还是SRE的未来?
Mooster 和朋友们希望加入您的运维团队:了解生成式 AI 代理与可观测性和监控软件相遇时会发生什么。
云云众生s
2024/09/20
960
AI代理入侵可观测性:蛇油还是SRE的未来?
日常评 | WAIC见闻与思考:AI应用落地热潮将至 深度学习的冬天要来?
8月29日-8月31日,2019第二届世界人工智能大会(WAIC)在上海召开,有幸能够近距离接触此次盛会,众多名家云集,深感看到的学到的东西很多,也深知自己的水平与各位高手望尘莫及,有很多需要努力的地方要紧跟脚步。
ZNing
2020/05/13
5600
日常评 | WAIC见闻与思考:AI应用落地热潮将至 深度学习的冬天要来?
【科普篇】LLM、GPT、AIGC、AI Agent、Agentic AI 到底是个啥?
2024 年可谓是AI 大模型全面开花的一年,各大厂纷纷发布了自己的大模型应用产品,比如:
巫山老妖
2025/06/16
2430
【科普篇】LLM、GPT、AIGC、AI Agent、Agentic AI 到底是个啥?
Salesforce报告:IT部门成功的关键因素
Salesforce在4月26号刚刚发布的IT报告中谈到:云计算以及其他技术的进步已经将IT在企中的角色从成本中心转化到价值中心。
臭豆腐
2019/04/16
5320
Salesforce的前世今生
1999年,正是互联网泡沫膨胀到最高峰的一年。这一年Marc Benioff才27岁,却已经是Oracle的高级副总裁,当然也是Oracle历史上最年轻的高级副总裁。可能在很多人看来,在如此年纪取得这样的成绩已经非常不错了,但就在这一年他却离开Oracle开启了“苦逼”的创业之旅,创办了Salesforce——一家客户关系管理(CRM)软件服务提供商。 要知道当时还有一家如日中天的CRM公司,那就是创办于1993年Siebel。在Salesforce成立一年后的2000年,有一天软件服务商Siebel正在举
人称T客
2018/06/06
1.2K0
Agentic AI是新的Web应用程序,您的AI策略必须发展
在生成式 AI 革命两年后,为 ChatGPT 和 Claude 等工具提供支持的 LLM 变得异常强大。然而,根据 Salesforce 首席执行官 Marc Benioff 的说法,它们可能正在达到极限。根据 Benioff 的说法,下一个进化不一定是更智能的 LLM,而是利用 LLM 独立执行任务的自主 AI 代理。
云云众生s
2025/03/06
870
IBM联合Salesforce 要搞死微软占领AI
T客汇官网:tikehui.com 撰文 张珅健 IBM、Salesforce宣布要强强联合,推出Salesforce的Einstein平台,将微软赶出IBM,占领AI市场。 据悉,随着合作的进行,
人称T客
2018/03/23
9690
IBM联合Salesforce 要搞死微软占领AI
Salesforce 用机器学习来自动总结文本,AI+SaaS 是未来吗?
  如今我们身处海量信息时代,大量时间被用来处理电子邮件、文章或社交媒体的帖子等信息,有预计称,这种消耗状态会超过半天时间,甚至更多。
臭豆腐
2019/04/16
6710
AI代理:开发者全面入门指南
为了帮助开发者理解和使用 AI 代理,我们在代理类似于员工的数字孪生兄弟的前提下对其进行了映射。
云云众生s
2024/10/23
3310
AI代理:开发者全面入门指南
Agent 时代的 HTTP 来了?谷歌 A2A 开源协议打破企业间 Agent 壁垒,OpenAI 系缺席标准之战
谷歌今日推出了一种名为 Agent2Agent(简称 A2A)的新型互操作协议,或将成为人工智能智能体从孤立系统迈向开放协作生态的重要信号。
深度学习与Python
2025/04/13
3240
Agent 时代的 HTTP 来了?谷歌 A2A 开源协议打破企业间 Agent 壁垒,OpenAI 系缺席标准之战
Agentic AI 要终结数据库和 SaaS?大厂掌门人公开互撕,焦虑的 CEO 们押上了不同的技术路线
无论是大模型厂商、AI 初创公司,还是企业级应用团队,几乎都在讨论“多智能体协作”“自动化决策流程”以及“具备工具调用能力的 AI 系统”。
深度学习与Python
2025/05/13
1450
Agentic AI 要终结数据库和 SaaS?大厂掌门人公开互撕,焦虑的 CEO 们押上了不同的技术路线
2017 Dreamforce大会中了解到的Salesforce Einstein进化与发展
美国银行已经部署了Salesforce Einstein功能,包括Predictive Lead Scoring和Einstein Analytics(之前的Wave),用于客户流失分析和保留。此外它还采用了Einstein Discovery(之前的BeyondCore),以更好地了解客户行为和交叉销售机会。该银行预计将把Einstein推广给全公司2000名面向客户的财务顾问,希望能够“大规模提供个性化服务”以及“创造具有差异化的客户体验”,Hoffman表示。
臭豆腐
2019/04/16
8460
2017 Dreamforce大会中了解到的Salesforce Einstein进化与发展
95后打造世界首个行动型浏览器——Fellou,从「浏览」到「行动」一键直达!
得益于自由开放的Web,浏览器成为我们探索数字世界的核心入口,社交、娱乐、信息获取、生产力,它几乎可以承载我们全部的数字生活。
新智元
2025/04/22
5120
95后打造世界首个行动型浏览器——Fellou,从「浏览」到「行动」一键直达!
白宫成立人工智能特别委员会 ,英特尔CEO:AI应成为美国的国家战略
---- 新智元报道 编辑:克雷格 【新智元导读】白宫举办的美国工业人工智能峰会周四结束,谷歌、亚马逊、英特尔等近40家科技巨头参加,会上还宣布成立人工智能特别委员会,以改善联邦政府在人工智能领域的投入。自特朗普上台后,硅谷与白宫的关系一直冷淡,这次是个改善的信号吗? Make AI Great Again? 本周四,美国白宫举办了一场“美国工业人工智能峰会”( “Artificial Intelligence for American Industry” summit),邀请近40家科技企业参会。
新智元
2018/05/29
7410
详解Salesforce拳头产品 Einstein ,AI正描绘未来?
十年前,Twitter 和 Facebook 一样,是最为被外界看好的两种社交形态,原本以为这两个巨头会一路相爱相杀直到永远,谁能想到,十年后的 Facebook 依然这么活跃,各种广告业务也如火如荼,而它的好基友 Twitter ,却落得没人要的境地……
臭豆腐
2019/04/16
1.5K0
详解Salesforce拳头产品 Einstein ,AI正描绘未来?
推荐阅读
相关推荐
AI智能体(AI Agent): 概念、技术、趋势及其在制造业中的应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档