1.springfox-swagger实体类无限递归

https://hacpai.com/article/1525674135818 里面有不完美的解决方案

不用动源码的解决方案也有,在swagger项目里的函数传入参数没有类互相包含就可以了

这也要求某些多对多关系的实体类的属性定义要仔细走关系图

比如User和SysClass,用在swagger传入参数的实体类不能互相包含List<SysClass>和List<User>

只能继承VO(这个VO不能作为swagger函数的传入参数),把对应的包含属性写进去,然后需要查询对应列表时返回VO就行了

2.有中间表的mybatis一对多查询

查看某些有明确一对多关系的实体类的mybatis xml,可以看到查询方式是主表join子表,然后在mybatis这端把主表的数据group起来作为某个对象的元素

由此可见没有直接关联的2个表对应的类也可以用这种方式查询

  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.  
  4. <mapper namespace="com.ass.core.mapper.SysClassMapper">
  5.  
  6. <!-- 可根据自己的需求,是否要使用 -->
  7. <resultMap type="com.ass.core.entity.SysClass" id="classMap">
  8. <result property="id" column="cid"/>
  9. <result property="code" column="code"/>
  10. <result property="name" column="name"/>
  11. <result property="num" column="num"/>
  12. <result property="description" column="description"/>
  13. </resultMap>
  14. <resultMap type="com.ass.core.VO.ClassWithUser" id="classUser">
  15. <result property="id" column="cid"/>
  16. <result property="code" column="code"/>
  17. <result property="name" column="name"/>
  18. <result property="num" column="num"/>
  19. <result property="description" column="description"/>
  20. <collection property="teachers" ofType="User">
  21. <id column="id" jdbcType="INTEGER" property="id" />
  22. <result column="uid" jdbcType="VARCHAR" property="uid" />
  23. <result column="user_account" jdbcType="VARCHAR" property="userAccount" />
  24. <result column="password" jdbcType="VARCHAR" property="password" />
  25. <result column="username" jdbcType="VARCHAR" property="username" />
  26. <result column="user_identity" jdbcType="INTEGER" property="userIdentity" />
  27. <result column="user_status" jdbcType="INTEGER" property="userStatus" />
  28. <result column="user_type" jdbcType="INTEGER" property="userType" />
  29. <result column="user_email" jdbcType="VARCHAR" property="userEmail" />
  30. <result column="user_mobile" jdbcType="VARCHAR" property="userMobile" />
  31. <result column="user_remind" jdbcType="VARCHAR" property="userRemind" />
  32. <result column="user_create_time" jdbcType="TIMESTAMP" property="userCreateTime" />
  33. <result column="user_update_time" jdbcType="TIMESTAMP" property="userUpdateTime" />
  34. <result column="class_id" jdbcType="VARCHAR" property="classId" />
  35. <result column="user_col2" jdbcType="VARCHAR" property="userCol2" />
  36. <result column="user_col3" jdbcType="VARCHAR" property="userCol3" />
  37. <result column="user_token" jdbcType="VARCHAR" property="userToken" />
  38. <result column="role_id" jdbcType="VARCHAR" property="roleId" />
  39. </collection>
  40. </resultMap>
  41.  
  42. <select id="selectClassListByName" resultMap="classUser">
  43. SELECT
  44. c.id as cid,
  45. c.code,
  46. c.name,
  47. c.num,
  48. c.description,
  49. u.*
  50. FROM
  51. sys_class c
  52. LEFT JOIN user_class uc ON c.id = uc.class_id
  53. LEFT JOIN user u ON u.uid = uc.user_id
  54. WHERE
  55. c.name like '%${name}%'
  56. </select>
  57.  
  58. </mapper>

SysClassMapper.xml

3.swagger传入参数含有对象数组时的坑点

swagger前端在碰到对象数组(无论是直接传的还是实体类里面的)时,会显示xxx[0].id和xxx[0].name之类的参数,但是直接通过前端发送请求,会因为url含有非法字符被拒绝请求

如果是用其他程序提交,例如Python(先安装requests扩展包),可以提交这种带对象数组的请求,并让服务器接收

  1. import requests
  2. import json
  3.  
  4. def login():
  5. res = requests.post('http://localhost:20005/api/user/login?userAccount=admin&userPassword=admin', verify=False)
  6. myj = json.loads(res.text)
  7. #print(myj)
  8. return myj['data']['token']
  9. #
  10. def addContent():
  11. token = login()
  12. params = {
  13. 'resourceSteps[0].procedureName': 'ytmym',
  14. 'resourceSteps[0].procedureContent': 'mytm',
  15. 'resourceSteps[2].procedureName': 'loveZJJ',
  16. 'resourceSteps[2].procedureContent': 'asswecan',
  17. 'id': '',
  18. 'resourceContentId': '45j45j',
  19. 'experimentAdd': '5j5j',
  20. 'experimentAdd1': 'grh',
  21. 'stepsjson': '[{"procedureName":"a","procedureContent":"b"}]',
  22. 'token': token,
  23. 'resourceManagementId': 'j54j45j',
  24. 'experimentalObjective': '45j45j4',
  25. 'experimentalContext': '45j45j',
  26. 'experimentalRequirements': '5j45j',
  27. 'prepareKnowledge': '54j45j',
  28. 'experimentSummary': 'j54j',
  29. 'experimentTestId': 'h4h54'
  30. }
  31. url = 'http://localhost:20005/api/resource/add/content'
  32. res = requests.post(url, params=params)
  33. print(res.text)
  34. #
  35. if __name__ == '__main__':
  36. addContent()

但是这种实现方式不太推荐,太不直观了。建议使用@ResponseBody注解对象数组或包含此类型的实体类,然后让前端传入json,处理会简单一些

springboot+mybatis环境的坑和sql语句简化技巧的更多相关文章

  1. springBoot + mybatis实现执行多条sql语句出错解决方法

    在Idea中执行多条sql语句的修改(mybatis默认的是执行sql语句是执行单条,所以要执行多条的时候需要进行配置) 需要在连接字符串中添加上&allowMultiQueries=true ...

  2. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  3. MyBatis学习 之 二、SQL语句映射文件(1)resultMap

    目录(?)[-] 二SQL语句映射文件1resultMap resultMap idresult constructor association联合 使用select实现联合 使用resultMap实 ...

  4. mybatis 控制台打印执行的SQL语句

    1. Spring boot 集成 mybatis [转载]SpringBoot中Mybatis打印sql 1.1 如果使用的是application.properties文件,加入如下配置: log ...

  5. MyBatis学习总结_11_MyBatis动态Sql语句

    MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(w ...

  6. MyBatis 入门到精通(二) SQL语句映射XML文件

    MyBatis 真正强大之处就在这些映射语句,也就是它的魔力所在.对于它的强大功能,SQL 映射文件的配置却非常简单. 如果您比较SQL 映射文件配置与JDBC 代码,您很快可以发现,使用SQL 映射 ...

  7. mybatis基础学习1---(配置文件和sql语句)

    1:配置文件(主要配置文件) 2:配置文件(引入) 3:sql语句解析: <mapper namespace="/"> <!-- 1 -->根据id查对象 ...

  8. MyBatis 源码分析——动态SQL语句

    有几年开发经验的程序员应该都有暗骂过原生的SQL语句吧.因为他们不能一句就搞定一个业务,往往还要通过代码来拼接相关的SQL语句.相信大家会理解SQL里面的永真(1=1),永假(1=2)的意义吧.所以m ...

  9. mybatis下使用log4j打印sql语句和执行结果

    转载自:https://www.cnblogs.com/jeevan/p/3493972.html 本来以为很简单的问题, 结果自己搞了半天还是不行; 然后google, baidu, 搜出来各种方法 ...

随机推荐

  1. 微信小程序采坑

    wx.request() complete回调函数执行时机问题 代码执行顺序有时候会严重影响用户体验:比如项目中请求数据时显示loading的图标,请求完成后不管失败还是成功都要把loading图标隐 ...

  2. nodejs----微信注册测试号获取token

    var PORT=8081; //监听8080端口号 var http=require('http'); var qs=require('qs'); var TOKEN='yezhenxu'; //必 ...

  3. SQL 序列-DML-DML-数据类型-用户管理、权限-事务-视图

    --DML--insert关键字--作用:往表中插入一条(多条)记录 --元祖(tuple)值式的插入(一次插入一条记录)--语法1:insert into tablename(column1,col ...

  4. ubuntu下安装PyCharm的两种方式

    PyCharm一个是Python集成开发环境,它既提供收费的专业版,也提供免费的社区版本.PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Proj ...

  5. 理解es6 中 arrow function的this

    箭头函数相当于定义时候,普通函数.bind(this)箭头函数根本没有自己的this,导致内部的this就是定义时候的外层代码块中的this.外层代码块中的this,则取决于执行时候环境上下文cont ...

  6. ASO的效果应该如何去评判,有什么标准可以量化指标

    ASO的效果应该如何去评判,有什么标准可以量化指标 以往我们主要会教大家怎么做 ASO 优化,优化中有什么技巧……在掌握ASO优化技巧之后,从执行层面来考虑,就该选择流量平台了. 目前市场上的流量平台 ...

  7. RESTful levels 和 HATEOAS

    RESTful REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序.它首次出现在 2000 年 Roy ...

  8. git 环境搭建

    1. 生成ssh-key 并上传到 git服务器上 #cd $HOME #ssh-keygen -t rsa -C "youremail@example.com" -t 是类型,- ...

  9. 学号 20175201张驰 《Java程序设计》第7周学习总结

    学号 20175201张驰 <Java程序设计>第7周学习总结 教材学习内容总结 第八章 String类能有效地处理字符序列信息,它的常用方法有: public int length()可 ...

  10. 两个ArrayList之间求交并补

    class ArraylistCalculate{ // 两个整数集求差集 public ArrayList<Integer> integerArrayListDifference( Ar ...