这里面我们介绍一下springboot集成mybatis完成一对多数据和一对一数据的功能。任何一个人离开你 都并非突然做的决定 人心是慢慢变冷 树叶是渐渐变黄 故事是缓缓写到结局 而爱是因为失望太多 才变成不爱。

springboot集成mybatis

我们创建两张表分别为:person表和comment表。我们的建表语句和插入脚本如下:对应关系是一个用户可以有多个评论

create TABLE person(
person_id int(11) PRIMARY KEY ,
person_name VARCHAR(45) not NULL
);
INSERT INTO person(person_id, person_name) VALUES (1, "huhx"); create table comment(
comment_id int(11) PRIMARY key,
person_id int(11) not null,
content VARCHAR(45) not null,
comment_time DATETIME not NULL
);
INSERT INTO comment(comment_id, person_id, content, comment_time) VALUES (1, 1, "content huhx", now());
INSERT INTO comment(comment_id, person_id, content, comment_time) VALUES (2, 1, "content java", now());
INSERT INTO comment(comment_id, person_id, content, comment_time) VALUES (3, 1, "content golang", now());

现在我们开始我们的代码测试,首先定义我们的实体bean类。

一、对应数据库表的实体类

表的设计可能不是特别的合理,这里面主要是学习mybatis一对多关系的知识。

  • Comment:评论表
public class Comment {
private int commentId;
private String content;
private Date commentTime;
}
  • Person:用户表
public class Person {
private int personId;
private String personName;
}
  • PersonComment:用户的评论表
public class PersonComment {
private Person person;
List<Comment> comments;
}

二、我们的控制器测试类

@RequestMapping("/mybatis")
@RestController
public class MyBatisBeanAction { private static Logger logger = LoggerFactory.getLogger(MyBatisBeanAction.class); @Resource
private SqlSession sqlSession; @GetMapping("getComment")
public ResponseBean<PersonComment> getPersonComments(@RequestParam("personId") int personId) {
PersonComment personComment = this.sqlSession.selectOne("user.queryPersonComments", personId);
return ResultUtil.success(personComment);
}
}

user.queryPersonComments的mybatis语句如下:

<resultMap id="personCommentMap" type="PersonComment">
<id column="person_id"/><!--这条语句不能省略,否则查询出三条。会electOne在返回处报错..-->
<association property="person" column="person_id" javaType="Person">
<id property="personId" column="person_id"/>
<result property="personName" column="person_name"/>
</association>
<collection property="comments" ofType="Comment">
<id property="commentId" column="comment_id"/>
<result property="content" column="content"/>
<result property="commentTime" column="comment_time"/>
</collection>
</resultMap>
<!-- 一对多的bean映射的写法 -->
<select id="queryPersonComments" parameterType="int" resultMap="personCommentMap">
SELECT
a.person_id,
a.person_name,
b.comment_id,
b.content,
b.comment_time
FROM
person a, comment b
WHERE
a.person_id = b.person_id AND
a.person_id = #{personId}
ORDER BY
a.person_id DESC
</select>

我们在浏览器发送get请求:http://localhost:9998/mybatis/getComment?personId=1。控制台发送的sql语句日志如下:

::19.281 [http-nio--exec-] DEBUG user.queryAllUserInfo_COUNT - ==>  Preparing: SELECT count() FROM puser
::19.282 [http-nio--exec-] DEBUG user.queryAllUserInfo_COUNT - ==> Parameters:
::19.285 [http-nio--exec-] DEBUG user.queryAllUserInfo_COUNT - <== Total:
::19.286 [http-nio--exec-] DEBUG user.queryAllUserInfo - ==> Preparing: SELECT userId, username, password, address, phoneNumber, birthday, sex FROM puser ORDER BY userId DESC LIMIT ?, ?
::19.286 [http-nio--exec-] DEBUG user.queryAllUserInfo - ==> Parameters: (Integer), (Integer)
::19.290 [http-nio--exec-] DEBUG user.queryAllUserInfo - <== Total:

  可以看到查询出三条数据,但是封闭到一个实体bean里面。这个对于之前总是用map接收sql查询返回的数据来说,确实有一些想法。之前用map的话,没有用Bean这样很好的表现数据模型。其次类似于这种的查询,返回的就是一个list列表。最后感觉用Bean的话,可以使用@Valid去对数据进行校验,这个挺不错的。这种方式返回的数据:

{
"returnCode": ,
"returnMessage": "成功",
"response": {
"person": {
"personId": ,
"personName": "huhx"
},
"comments": [
{
"commentId": ,
"content": "content huhx",
"commentTime":
},
{
"commentId": ,
"content": "content java",
"commentTime":
},
{
"commentId": ,
"content": "content golang",
"commentTime":
}
]
}
}

我们修改为List的返回格式,具体的修改内容如下:

@GetMapping("getCommentMap")
public ResponseBean<List<Map<String, Object>>> getPersonCommentsMap(@RequestParam("personId") int personId) {
List<Map<String, Object>> lists = this.sqlSession.selectList("user.queryPersonCommentsMap", personId);
return ResultUtil.success(lists);
} <select id="queryPersonCommentsMap" parameterType="int" resultType="map">
SELECT
a.person_id,
a.person_name,
b.comment_id,
b.content,
b.comment_time
FROM
person a, comment b
WHERE
a.person_id = b.person_id AND
a.person_id = #{personId}
ORDER BY
a.person_id DESC
</select>

  修改之后返回的结果如下:可以看到返回的数据中comment_time和person_name重复了多次,而且数据list越多的时候,重复的次数就越大。最后对比这两种的返回,可以得到用map的确不能很好的反应数据模型的关系。以后还是用Bean去映射返回的数据吧,之前一直认为用map特别的方便和灵活。

{
"returnCode": ,
"returnMessage": "成功",
"response": [
{
"comment_time": ,
"person_name": "huhx",
"comment_id": ,
"content": "content huhx",
"person_id":
},
{
"comment_time": ,
"person_name": "huhx",
"comment_id": ,
"content": "content java",
"person_id":
},
{
"comment_time": ,
"person_name": "huhx",
"comment_id": ,
"content": "content golang",
"person_id":
}
]
}

友情链接

springboot---->集成mybatis开发(二)的更多相关文章

  1. springboot集成mybatis(二)

    上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...

  2. 在springboot中集成mybatis开发

    在springboot中利用mybatis框架进行开发需要集成mybatis才能进行开发,那么如何在springboot中集成mybatis呢?按照以下几个步骤就可以实现springboot集成myb ...

  3. SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版)

    SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版) ================================ ©Copyright 蕃薯耀 2 ...

  4. BindingException: Invalid bound statement (not found)问题排查:SpringBoot集成Mybatis重点分析

    重构代码,方法抛出异常:BindingException: Invalid bound statement (not found) 提示信息很明显:mybatis没有提供某方法 先不解释问题原因和排查 ...

  5. SpringBoot集成MyBatis的Bean配置方式

    SpringBoot集成MyBatis的Bean配置方式 SpringBoot是一款轻量级开发的框架,简化了很多原先的xml文件配置方式,接下来就介绍一下如何不适用XML来配置Mybatis spri ...

  6. 0120 springboot集成Mybatis和代码生成器

    在日常开发中,数据持久技术使用的架子使用频率最高的有3个,即spring-jdbc , spring-jpa, spring-mybatis.详情可以看我之前的一篇文章spring操作数据库的3个架子 ...

  7. SpringBoot集成MyBatis底层原理及简易实现

    MyBatis是可以说是目前最主流的Spring持久层框架了,本文主要探讨SpringBoot集成MyBatis的底层原理.完整代码可移步Github. 如何使用MyBatis 一般情况下,我们在Sp ...

  8. SpringBoot集成MyBatis小记

    SpringBoot集成MyBatis小记 参考MyBatis官网 1. 添加maven依赖 添加到pom.xml <dependency> <groupId>org.myba ...

  9. springboot集成mybatis(一)

    MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...

  10. SpringBoot 集成Mybatis 连接Mysql数据库

    记录SpringBoot 集成Mybatis 连接数据库 防止后面忘记 1.添加Mybatis和Mysql依赖 <dependency> <groupId>org.mybati ...

随机推荐

  1. Git -- 基本操作 之 版本回退

    现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control system. ...

  2. SpringMVC自定义视图Excel视图和PDF视图

    SpringMVC自定义视图 Excel视图和PDF视图 SpringMVC杂记(十一) 使用Excel视图 Spring MVC 视图解析器(ViewResolver ) java实现导出excel ...

  3. C# 判断字符串为空有哪几种方法

    Length法:);Empty法:bool isEmpty = (str == String.Empty);General法:bool isEmpty = (str == ""); ...

  4. C# 判断网站是不是discuz论坛

    if (this.txturl.Text == "") { this.lblmess.Text = "请输入网址"; } else { GetHttp getH ...

  5. windows下Nginx与tomcat组合简单使用

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中瓦片资源越来越多,如果提高瓦片的访问效率是一个需要解决的 ...

  6. Java基础--深克隆补充

    深克隆文章很多,这里推荐Java提高篇--对象克隆(复制). 以上文章条理清晰,一目了然,但最近在项目中碰到的实际问题是,所要克隆的对象是加上子类父类共计207个,无论用上述两种方式的哪一种,都要一一 ...

  7. 【Intel AF 2.1 学习笔记三】

    AF中自带一些Css矢量图标,使用时需要设置class,例如下面代码显示一个左箭头图标: <a class="icon left"></a> AF中可用的图 ...

  8. EA修改生成代码的表头注释

    我们在做项目的过程中,每个代码文件都应有此文件的注释,比如说作者,文件说明等.但是如果用EA生成的代码文件的注释是纯英文的,而且有些不是我们需要显示的注释,有些我们需要显示的它又不具备.那么我们就可以 ...

  9. MSM--Memcached_Session_Manager介绍及使用

    MSM--Memcached_Session_Manager介绍及使用 http://www.iteye.com/topic/1125301 我们都知道对于一些大型的web2.0的网站,在正式部署时一 ...

  10. extJS 中 ext.data 介绍

    ext.data 最主要的功能是获取和组织数据结构,并和特定控件联系起来,于是,Ext.data成了数据的来源,负责显示数据. Ext.data在命名空间中定义了一系列store.reader和pro ...