mybatis+springboot发布postgresql数据

1.pom文件写法

pom文件需要写入springboot依赖、mybatis依赖和postgresql依赖

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.3.0</version>
    </dependency>
    <!-- postgresql依赖 -->
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.1.1</version>
    </dependency>
</dependencies>

问题:Invalid bound statement (not found)

问题实质就是mapper接口和mapper.xml文件没有映射起来。 常见的错误如下: 1.mapper.xml中的namespace和实际的mapper文件不一致 这个问题其实很好解决,瞪大眼睛,仔仔细细看看,到底对不对应不就好了嘛

2.mapper接口中的方法名和mapper.xml中的id标签不一致 这个问题和上个问题解决方法一样,仔细对对嘛,这个再对不出来,面壁思过吧。

3.上两步的问题都没有,但是还是不行,可能原因就是,没有构建进去,打开target看看对应的mapper.xml文件在不在

如果没有构建dao层里的xml文件,则需要在pom文件的build节点里写入下列依赖:

xml 复制代码
<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.yml</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
    </resource>
</resources>

接着clean一下,maven项目,然后再启动,这样可以实现构建时将.xml文件构建到target文件夹里面

2.application.yml和mybatis-config.xml

application.yml 是 Spring Boot 应用程序的配置文件,用于配置 Spring Boot 应用程序的各种属性和特性。它包含了应用程序的所有配置信息,例如数据库连接信息、日志配置、缓存配置、端口号等

yaml 复制代码
server:
  #端口号
  port: 8088
  #项目名,如果不设定,默认是 /

spring:
  datasource:
    url: jdbc:postgresql://192.168.10.12:5432/wuxue_argculture
    username: postgres
    password: postgres
    driver-class-name: org.postgresql.Driver

logging:
  level:
    com.demo.mapper: debug

mybatis:
  #标注mybatis配置文件的位置
  config-location: classpath:mybatis-config.xml
  #标注待解析的mapper的xml文件位置
  mapper-locations: classpath:demo/dao/*.xml
  #标注实体类位置
  type-aliases-package: demo.entity

mybatis-config.xml 是 MyBatis 的配置文件,用于配置 MyBatis 的全局属性、类型别名、映射器等。它是 MyBatis 框架的核心配置文件,必须存在并且必须正确配置,否则 MyBatis 将无法正常工作。

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <settings>
        <!-- #开启mybatis驼峰式命名规则自动转换 -->
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
    <!-- 类型别名配置 -->
    <typeAliases>
        <typeAlias type="demo.entity.StandardYard" alias="StandardYard"/>
        <!-- 添加其他类型别名 -->
    </typeAliases>
</configuration>

通过XML的方式配置Mybatis

在 /src/main/resource下创建Mybatis配置文件 mybatis-config.xml 和 映射文件目录mapper

在application.yml指定Mybatis配置文件、映射文件的位置

  • mybatis.config-location:配置 mybatis-config.xml 路径mybatis-config.xml 中配置 MyBatis 基础属性
  • mybatis.mapper-locations:配置 Mapper 对应的 XML 文件路径
  • mybatis.type-aliases-package:配置项目中实体类包路径

注意:

可以在appllication.yml中直接配置Mybatis,不通过mybatis-config.xml

shell 复制代码
##指定mybatis输出日志的位置, 输出控制台
#mybatis:
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

两种配置方式只能二选一,不能同时使用application.yml中的configuration和mybatis-config.xml文件配置mybabis

即: application.yml中configuration 和 configLocation 两个属性不能同时存在,否则会报错

3.Mapper层xml写法

在 MyBatis 的 Mapper 层 XML 文件中,通常定义了 SQL 映射语句和与之相关的一些参数。下面是几个常见的参数及其含义:

namespace:用于指定该 XML 文件对应的 Mapper 接口的完全限定名。通过设置 namespace,可以将 XML 文件与对应的 Java 接口关联起来

resultMap:指定结果集映射关系的标识符,用于将数据库查询结果映射到 Java 对象。可以是已定义的 的 id,或者是内联的结果映射定义。这里可以创造字段映射,实现实体类属性名称和表字段的解耦

resultType:指定单个结果对象的类型。可以是 Java 对象的完全限定名(例如:com.example.User),也可以是基本数据类型。

xml 复制代码
<?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="demo.dao.StandardYardMapper">
   <!-- 定义 ResultMap -->
   <resultMap id="standardYardResultMap" type="StandardYard">
       <id property="id" column="id" />
       <result property="townName" column="town_name" />
       <result property="community" column="community" />
       <result property="yardName" column="yard_name" />
       <!-- 其他字段映射 -->
       <result property="longitude" column="lon" />
       <result property="latitude" column="lat" />
   </resultMap>

   <select id="getStandardYardById" resultMap="standardYardResultMap">
       SELECT a.id AS standard_yard_id,a.*, b.lon, b.lat
       FROM standard_yard_2022 a
       LEFT JOIN village_random b ON a.community LIKE '%' || b.cjqymc || '%'
       WHERE a.id = #{id}
   </select>
   <select id="getStandardYards" resultMap="standardYardResultMap">
       SELECT a.*, b.lon, b.lat
       FROM standard_yard_2022 a
       LEFT JOIN village_random b ON a.community LIKE '%' || b.cjqymc || '%'
   </select>
</mapper>

注意:

LEFT JOIN 是 SQL 中的一种连接(Join)操作,它将两个表中的记录按照指定的条件联接在一起。

具体来说,LEFT JOIN 会返回左侧表(即第一个表)的所有记录,以及与右侧表(即第二个表)满足连接条件的记录。如果右侧表中没有与左侧表匹配的记录,那么对应的结果列会显示为 NULL。

sql 复制代码
sqlCopy Code
SELECT *
FROM 表1
LEFT JOIN 表2
ON 表1.字段 = 表2.字段

在这个示例中,表1表2 是要连接的两个表名。表1.字段表2.字段 是用于连接的列名,它们应该具有相同的值。

LEFT JOIN 会根据连接条件将两个表中的记录进行匹配,并将匹配成功的记录组合在一起。如果在 表2 中找不到与 表1 匹配的记录,那么对应的结果列将会显示为 NULL。

总结起来,LEFT JOIN 可以保留左侧表中的所有记录,并将右侧表中与之匹配的记录进行合并。这个操作可以帮助我们根据某些条件关联和组合两个表的数据。

4.Controller层写法

less 复制代码
@RestController
@RequestMapping("/wuXue/StandardYard")
public class StandardYardController {
    @Autowired
    private StandardYardService standardYardService;
    @GetMapping("/getList")
    public Result list() {
        //1. 调用service层, 获取数据
        List<StandardYard> StandardYardList = standardYardService.getStandardYards();
        //3. 响应数据
        return Result.success(StandardYardList);
    }
    @GetMapping("/getById")
    public Result getById(@RequestParam(value="id")int id) {
        //1. 调用service层, 获取数据
        StandardYard standardYard = standardYardService.getStandardYardById(id);
        //3. 响应数据
        return Result.success(standardYard);
    }
}

@RestController:这个注解是 Spring MVC 提供的,它表示该类是一个控制器,并且所有处理请求的方法都会返回 JSON/XML 或其他格式的响应数据。相比于普通的 @Controller 注解,@RestController 注解还省略了在每个处理方法上添加 @ResponseBody 的步骤。

@RequestMapping("/wuXue/StandardYard"):这个注解用来映射请求路径。在这个示例中,所有的请求路径都以 "/wuXue/StandardYard" 开头。例如,"/getList" 请求会被映射到 list() 方法。

@Autowired:这个注解是 Spring Framework 提供的,它用于自动装配依赖关系。在这个示例中,private StandardYardService standardYardService 字段通过自动装配得到了一个 StandardYardService 对象,使得可以直接调用其方法。

@GetMapping("/getList"):这个注解是 Spring MVC 提供的,它将 HTTP GET 请求映射到 list() 方法。当客户端发送一个 GET 请求到 "/wuXue/StandardYard/getList" 路径时,该方法将被调用。

@RequestParam(value="id") int id:这个注解用于将请求参数绑定到方法参数。在这个示例中,请求参数名为 "id",它会被绑定到 int id 参数上。

相关推荐
扣丁梦想家1 小时前
RocketMQ 详细教程(Spring Boot & Spring Cloud Alibaba)
spring boot·spring cloud·微服务·rocketmq
兮动人3 小时前
SpringBoot加载配置文件的优先级
java·spring boot·后端·springboot加载配置
m0_748254664 小时前
Spring Boot 热部署
java·spring boot·后端
佳佳_6 小时前
Spring Boot SSE 示例
spring boot·后端
l_tian_tian_6 小时前
JavaWeb——Mybatis、JDBC、数据库连接池、lombok
java·数据库·mybatis
臣妾写不来啊6 小时前
使用dify的api连接外部知识库,dify连接ragflow的知识库(附java代码)
java·开发语言·spring boot
李长渊哦7 小时前
Spring Boot 接口延迟响应的实现与应用场景
spring boot·后端·php
Cent'Anni7 小时前
【RabbitMQ】事务
java·spring boot·rabbitmq
小杨4047 小时前
springboot框架项目应用实践五(websocket实践)
spring boot·后端·websocket
浪九天7 小时前
Java直通车系列28【Spring Boot】(数据访问Spring Data JPA)
java·开发语言·spring boot·后端·spring