Windows 10家庭中文版,Eclipse,Java 1.8,spring boot 2.1.0,mybatis-spring-boot-starter 1.3.2,com.github.pagehelper 5.1.6

本文记录了昨晚到今早使用spring boot项目集成mybatis访问数据库的过程——主要是其中的坑。

对了,自己的问题还没解决——有了JPA了,为啥还要用mybatis呢?而且JPA集成了hibernate,,其实,自己对mybatis、hibernate都不太熟悉,这周学一遍教程。

参考链接:

springboot---->集成mybatis开发(一)

https://www.cnblogs.com/huhx/p/baseusespringbootmybatis1.html

本文介绍了spring boot集成mybatis需要的依赖包,

使用XML文件映射,

使用@Mapper方式实现映射,

@Select注解的内容也可以放到xml文件中,

Maven依赖:

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>1.3.1</version>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope>

</dependency>

application.yml中配置mybatis:

mybatis:

mapper-locations: classpath:mybatis/sql_*.xml

config-location: classpath:setting/mybatis_config.xml

type-aliases-package: com.linux.huhx.learn.mybatis.bean

注意这里的classpath!因为自己不知道其位置,所以,出现了多次错误。其实,开发时的位置就是 src/main/resources:

疑问,classpath: 后是否要有空格?sql_*.xml 中的 * 号代表类名称-开头大写?mapper-locations 以 s 字母结尾,表示可以有多个?怎么配置?type-aliases-package 表示Bean的位置,每个Bean都是java文件,对应java源码中的包名——即上图的src/main/java下的包的名称。

分页:

真分页、逻辑分页,有什么区别?

mybatis实现的是 逻辑分页,需要添加pagehelper包来实现真正的分页,为何?

pagehelper包引入:

<dependency>

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper</artifactId>

<version>${pagehelper-version}</version>

</dependency>

还需要在mybatis的配置文件——mybatis_config.xml——下添加插件:

<configuration>

<plugins>

<plugin interceptor="com.github.pagehelper.PageInterceptor">

<property name="helperDialect" value="mysql"/>

</plugin>

</plugins>

</configuration>

疑问,Bean类不需要写setter/getter,也不需要使用@Data注解;使用org.apache.ibatis.session.SqlSession 来执行查询操作,但依赖于前面mapper中定义的<select>节点;使用PageHelper 来设置分页,然后再使用SqlSession查询。

编写mapper文件时出现了错误:自己最开始 只是简单地把 <select>节点拷贝到mapper文件中,出现了下面的错误。

Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [E:\workplace\java\db-test\target\classes\mybatis\sql_People.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 53; 文档根元素 "select" 必须匹配 DOCTYPE 根 "null"。

参考下面的链接解决了问题:

文档根元素 "mapper" 必须匹配 DOCTYPE 根 "null"

https://blog.csdn.net/linlinxie/article/details/79737021

即 添加下面的内容,包含<select>节点 以及其它节点:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.test.mapper.TestMapper">

...

</mapper>

这里的namespace需要根据自己的Bean做跳转,一个Bean对应一个映射文件吧。要是大工程的话,就会存在很多Bean了,写起来可能会比较麻烦。

解决以上问题后仍然存在的问题:

控制台错误:

2018-11-15 08:51:40.875 ERROR 6504 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:

### Error querying database.  Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for people.queryAllPeopleInfo

### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for people.queryAllPeopleInfo] with root cause

java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for people.queryAllPeopleInfo

解决

将people.queryAllPeopleInfo中的people改为Bean的全名:

com.benzl.mybatis.bean.People

更多错误:

{

"timestamp": "2018-11-15T01:16:52.009+0000",

"status": 500,

"error": "Internal Server Error",

"message": "Type definition error: [simple type, class com.benzl.mybatis.bean.People]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.benzl.mybatis.bean.People and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.github.pagehelper.Page[0])",

"path": "/people3/get"

}

继续完善Bean类,问题得到解决:

-实现了Serializable接口;

-添加了getter/setter方法;

测试成功:

看来,这里的Bean也是需要改造为真正的Bean的,而不是本文开头说的 不需要。

Spring boot教程mybatis访问MySQL的尝试的更多相关文章

  1. spring boot:使用mybatis访问多个mysql数据源/查看Hikari连接池的统计信息(spring boot 2.3.1)

    一,为什么要访问多个mysql数据源? 实际的生产环境中,我们的数据并不会总放在一个数据库, 例如:业务数据库:存放了用户/商品/订单 统计数据库:按年.月.日的针对用户.商品.订单的统计表 因为统计 ...

  2. Spring Boot 与 Mybatis、Mysql整合使用的例子

    第一步: 创建一个SpringBoot的工程,在其中的Maven依赖配置中添加对JDBC.MyBatis.Mysql Driver的依赖具体如下: <!-- JDBC --> <de ...

  3. spring boot:使mybatis访问多个druid数据源(spring boot 2.3.2)

    一,为什么要使用多个数据源? 1,什么情况下需要使用多个数据源? 当我们需要访问不同的数据库时,则需要配置配置多个数据源, 例如:电商的业务数据库(包括用户/商品/订单等)            和统 ...

  4. Spring boot通过JPA访问MySQL数据库

    本文展示如何通过JPA访问MySQL数据库. JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据 ...

  5. Spring Boot入门(六):使用MyBatis访问MySql数据库(注解方式)

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 本篇博客我们讲解下在Spring Boot中使用MyBatis访问MySql数据库的简单用法. 1.前期 ...

  6. Spring Boot 教程(2) - Mybatis

    Spring Boot 教程 - Mybatis 1. 什么是Mybatis? MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 J ...

  7. Spring Boot教程(三十七)整合MyBatis

    Spring中整合MyBatis就不多说了,最近大量使用Spring Boot,因此整理一下Spring Boot中整合MyBatis的步骤.搜了一下Spring Boot整合MyBatis的文章,方 ...

  8. Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置

    0 引言 本文主要在Spring Boot 基础项目的基础上,添加 Mysql .MyBatis(注解方式)与 分页控件 的配置,用于协助完成数据库操作. 1 创建数据表 这个过程就暂时省略了. 2 ...

  9. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

随机推荐

  1. ref实现输入框聚焦

    关于ref我们是怎么理解的呢? 我们可以通过React.createRef()创建一个 ref节点,并将其打印出来. 代码如下: import React,{Component} from 'reac ...

  2. windows 下mysql 重设root密码方法

    1.首先在命令行里关闭mysql服务 net stop mysql2.在命令行里进入mysql安装目录下bin目录,以不检查权限的方式启动:mysqld-nt  --skip-grant-tables ...

  3. (大数 求余) Large Division Light OJ 1214

    Large Division Given two integers, a and b, you should check whether a is divisible by b or not. We ...

  4. bin内置函数

    光棍们对1总是那么敏感,因此每年的11.11被戏称为光棍节.小Py光棍几十载,光棍自有光棍的快乐.让我们勇敢地面对光棍的身份吧,现在就证明自己:给你一个整数a,数出a在二进制表示下1的个数,并输出. ...

  5. Scala进阶之路-Spark本地模式搭建

    Scala进阶之路-Spark本地模式搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spark简介 1>.Spark的产生背景 传统式的Hadoop缺点主要有以下两 ...

  6. Css的前世今生

    Css的基础知识扫盲 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. HTML的用法没有什么技巧,就是死记硬背,当然你不需要都记下来,能记住20个常用的标签基本上就OK了,其他不常用 ...

  7. Linux实战型企业运维工程师试题测评

    Linux实战型企业运维工程师试题答案 作者:尹正杰      最近在网上看到了一套有意思的面试题,我们一起来看一下这些题怎么破吧,哈哈~我先放在这里,有时间了一起来看看.多学点东西终究是没有坏处的! ...

  8. .net MVC使用NPOI读取Excel模板,再写入数据

    NPOI其实已经介绍的差不多了,再贴一个方便以后复制粘贴. 亮点其实是 Server.MapPath 这个东西,可以找到MVC工程下的文件夹,找路径还是很方便的. /// <summary> ...

  9. Linux命令之pwd

    从今天开始,我会慢慢的把学习Linux过程中的一些命令简单的介绍一下,只是简单的介绍. 我的系统是Ubantu pwd命令 用处:查看当前所在的目录 用法:直接在终端里面输入pwd就好了 示例:

  10. 机器学习课程-第8周-聚类(Clustering)—K-Mean算法

    1. 聚类(Clustering) 1.1 无监督学习: 简介 在一个典型的监督学习中,我们有一个有标签的训练集,我们的目标是找到能够区分正样本和负样本的决策边界,在这里的监督学习中,我们有一系列标签 ...