SpringBoot学习之SpringBoot整合MyBatis + postgresql

1.springboot pom.xml主要依赖包:

mybatis-spring-boot-starter:sprintboot继承mybatis框架包

commons-dbcp:连接池组件

postgresql: 连接驱动包

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.5.4</version>
</dependency>

2.application.yml配置数据源和mybatis:

1.mybatis.configuration.map-underscore-to-camel-case=true:作用是将数据库字段是下划线,改变为程序中使用驼峰

2.如果mapper接口和xml文件处于完全相同的文件路径下,那么我们可以不需要配置mapper-locations。

3.如果mapper接口和xml文件处于不同的文件路径下,那么我们需要配置mapper-locations。

下图文件路径需要配置成:mybatis.mapper-locations=classpath:mapper/*.xml, 也可以使用 ** 通配符,表示任意级目录 mybatis.mapper-locations=classpath:**/*.xml

4.@MapperScan:告诉springboot框架扫描指定包下的mapper接口,通常该注解使用在config类中

5.@Mapper:告诉springboot框架扫描指定mapper接口,通常该注解使用在某个mapper接口上

6.mapper.xml

1. select标签中的id名称与接口的方法名要完全一致,否则会报异常。

2.namespace要配置接口包的全路径

3.resultType 要配置对象包的全路径

 

问题汇总 :

问题1:今天创建了springboot+mybatis项目启动的时候报错了,错误如下: 

上网找了好多解决问题办法都没有解决,最后发现居然是框架不识别yaml后缀 我原本以为yml和yaml后缀应该是一样的文件,但是没想到yaml后缀在springboot中无法识别,

将文件改完yml后缀后项目能够正常启动。

 

问题2:在mybatis中接口与mapper配置文件在做映射绑定的时候接口与xml不匹配,或者找不到,或者找到了却匹配不到。

问题依次排查

1.检查xml文件的namespace是否对应接口,要是全路径,并且namespace和接口全类名一致。

2.xml中的函数id和接口中的函数名是否对得上,参数类型、返回值类型是否匹配。(我的错误就出现在个地方)

3.maven项目默认把资源文件放在src/main/resources下,默认只识别src/main/resources下的资源文件。

4.如果pom.xml中资源文件的目录配置不全,也可能出现xml和接口对应不上问题。所以,资源文件要么不配置,要么全部都配置。

5.其他小细节,配置成功要记得重新加载pom.xml和项目内容,否则配置无法生效

 

问题3:mapper.xml中select标签中的resultType和接口方法中返回类型问题

 如果方法中返回的对象类型的list如下:那么xml中的resultType应该设置对象类型,而不是list类型

 

问题4:返回值中对象属性为null,而数据库中有值的问题

当数据库表中的字段名称与实体类中的属性名称完全相同,才能直接使用resultType返回类型,后面跟上该实体类的名称。

否则一般需要用resultMap进行属性映射,否则得到的数据一直没有匹配的实体类与之对应,返回的结果也空。示例如下

 

posted @ 2021-03-11 13:45  狗狗听话  阅读(1230)  评论(0编辑  收藏  举报