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使用的三个问题相关推荐

  1. springboot中的mybatis是如果使用pagehelper的

    springboot中的mybatis是如果使用pagehelper的 springboot中使用其他组件都是基于自动配置的AutoConfiguration配置累的,pagehelper插件也是一样 ...

  2. springboot中整合mybatis及简单使用

    springboot中整合mybatis及简单使用 1.引入依赖 2.在applicaiton.yaml中配置数据源以及mybatis 3.创建sql测试表 4.编写mapper接口和mapper.x ...

  3. SpringBoot中使用mybatis/ibatis日志打印sql

    SpringBoot中使用mybatis/ibatis时日志打印sql 控制台打印mybatis/ibatis对应的sql 主机的日志文件中打印mybatis/ibatis对应的sql 控制台打印my ...

  4. 在springboot中使用mybatis generate自动生成实体类和mapper

    1.在全局的pom中引入mybatis generate的依赖 <!--自动生成实体--><dependency><groupId>org.mybatis.gene ...

  5. SpringBoot中使用Mybatis碰到的问题记录

    每次使用Mybatis的时候都是去网上百度一下,然后照着网上的文章一步一步在自己的IDEA中进行配置,但是有时候明明是按着人家跑起来的流程配置的,但是就是不知道啥原因,有时就跑的起来,有时又不行!现在 ...

  6. Springboot中使用Mybatis框架对数据库进行联表查询,踩坑填坑

    因为mybatis使用的基本是原生sql语句 所以首先从数据库开始说 以mysql数据库为例,对表的连接查询分为四种 内连接,外连接,交叉连接,和联合连接 内连接使用比较运算符根据每个表共有的列的值匹 ...

  7. SpringBoot中关闭Mybatis以及RocketMQ日志打印

    SpringBoot工程集成了Mybatis和RocketMQ,也集成了Log4j,项目中自己的日志都可以通过log4j来管理,日志打印通过通过日志级别可以管理,一直很正常. 后来项目上线正常稳定运行 ...

  8. springboot 中使用 Mybatis 注解 配置 详解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 传参方式 使用不同的传参方式: 使用@Param 之前博文中的项目使用了这种简单的传参方式: @In ...

  9. SpringBoot项目集成Mybatis Plus(三)分页插件

    通过代码生成后,service继承了IService接口,这样可以直接使用Mybatis Plus封装的CRUD接口进行简单的增删改查. 例如简单的根据id查询: @RestController @R ...

最新文章

  1. 人工智能能否复制人脑引争论 美媒:目前AI仍存在局限性
  2. 访问者(Visitor)模式
  3. map容器中删除一个元素(value)
  4. 多线程-使线程具有有序性
  5. 杂项:JFB-权限设置
  6. Delphi动态事件深入分析
  7. 单片机:DS1302时钟
  8. 【工作感悟】linuxdocker运行windows镜像
  9. 联想服务器管理系统,联想服务器的系统监控软件easyManage
  10. C语言串口一直接收00,串口助手一直接收00;
  11. maven的生命周期,插件介绍(二)
  12. 无需会员将有道云笔记脑图转换xmind
  13. clojure实现邮箱发送
  14. golang 实现 pdf 转高清晰度 jpeg
  15. flinkSQL Table转DataStream
  16. 项目经理如何开展工作
  17. 如何下载 International Conference on Machine Learning(ICML)顶会的论文?从哪找ICML顶会论文?如何判断会议和期刊级别?
  18. JSON入门学习总结
  19. 工作中使用的sql知识点及查询语法
  20. 前世今生的痴,问谁可以洞悉

热门文章

  1. OpenCV 访问Mat 像素
  2. linux Apache启动提示 httpd: apr_sockaddr_info_get() failed f
  3. CListCtrl行高问题最终解决方法
  4. 5种方式将机器学习带到Java、Python以及Go等编程语言
  5. MyBatis 核心对象,工作原理及源码解读
  6. [Java] 蓝桥杯 BASIC-8 基础练习 回文数
  7. [Java] 蓝桥杯 BASIC-2 基础练习 01字串
  8. [Python] L1-003. 个位数统计-PAT团体程序设计天梯赛GPLT
  9. link中的rel表示relation(关系),表示了当前文档与 Web 集合中其他文档的关系
  10. The content of element type web-app must match……等 问题之解决办法