IDEA SpringBoot+Mybatis整合(超详细)以及Invalid bound statement (not found)错误解决方案

Idea 上Spring Boot 整合mybatis全过程以及遇到的那些坑

1. 创建maven项目
2. 添加依赖

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 热部署支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- druid连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.15</version>
        </dependency>
    </dependencies>
   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>

       </plugins>
       <resources>
           <resource>
               <directory>${basedir}src/main/resources</directory>
               <filtering>true</filtering>
               <includes>
                   <include>**/*.yml</include>
               </includes>
           </resource>
       </resources>
   </build>

3. 创建mybatis-cofig.xml和mapper还有application.yml配置文件

这是mybatis-config

<?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>
        <setting name="callSettersOnNulls" value="true"/>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="true"/>
        <setting name="multipleResultSetsEnabled" value="true"/>
        <setting name="useColumnLabel" value="true"/>
        <setting name="useGeneratedKeys" value="false"/>
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="localCacheScope" value="SESSION"/>
        <setting name="jdbcTypeForNull" value="NULL"/>
    </settings>
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer" />
        <typeAlias alias="Long" type="java.lang.Long" />
        <typeAlias alias="HashMap" type="java.util.HashMap" />
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
        <typeAlias alias="ArrayList" type="java.util.ArrayList" />
        <typeAlias alias="LinkedList" type="java.util.LinkedList" />
    </typeAliases>
</configuration>

mapper下的mapper.xml,注意要把命名空间namespace写对,对应相对的dao层

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.miu.dao.UserMapper"><!-- 查询所有 -->
<select id="getUser" resultType="com.miu.pojo.User">
SELECT id,NAME,birthday,address FROM user</select>
</mapper>

这是配置文件application.yml,注意不要有空格

server:
  port: 8080

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dianke?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
mybatis:
  type-aliases-package: com.miu.pojo
  config-locations: classpath:mapper/mybatis-config.xml
  mapper-locations: classpath:mapper/*Mapper.xml
logging:
  level:
    com.miu.dao: debug

type-aliases-package:对应自己的实体类所在的包
config-locations:mybatis-config.xml所在的路径
mapper-locations:mapper.xml所在的路径
4.创建相对应实体类,dao层,service层,serviceImpl层,controller层
User实体类

package com.miu.pojo;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Component;

import java.io.Serializable;
import java.util.Date;
@Component
public class User implements Serializable {
    private Integer id;
    private String name;
    @DateTimeFormat(pattern="yyyy-MM-dd")	//修改日期格式
    private Date birthday;
    private String address;

    public void setId(Integer id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public Date getBirthday() {
        return birthday;
    }

    public String getAddress() {
        return address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", birthday=" + birthday +
                ", address='" + address + '\'' +
                '}';
    }
}

dao层

package com.miu.dao;

import com.miu.pojo.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserMapper {
    List<User> getUser() throws Exception;
}

service和implements

package com.miu.service;

import com.miu.pojo.User;

import java.util.List;

public interface UserService {
    List<User> getUserAll() throws  Exception;
}

package com.miu.service;

import com.miu.dao.UserMapper;
import com.miu.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> getUserAll() throws Exception {
        return userMapper.getUser();
    }
}

Controller层

package com.miu.controller;

import com.miu.pojo.User;
import com.miu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping("getUser")
    public List<User> getUser(){
        try{
            return userService.getUserAll();
        }
        catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
}

启动类代码

package com.miu;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.miu.dao")//dao层所在的包路径
public class RunApp {
    public static void main(String[] args) {
        SpringApplication.run(RunApp.class, args);
    }

}

到这里,所有的配置就结束了,贴一下我的架构图在这里插入图片描述
这是运行成功界面
在这里插入图片描述能获取到数据说明配置已经成功

-----------------------------------------------华丽的分割线-----------------------------------------------

接下来,说一下在配置中遇到一些坑!!!
之前配置没有问题,启动一跑,报错了!!
在这里插入图片描述绑定异常,仔细排查了一下命名空间的问题,结果发现对应上了,后面查看tagert,发现并没有mapper和yml文件,于是通过一番排查,发现是配置文件没有引入,只需在配置文件中添加一句
在这里插入图片描述这是代码

 <resources>
           <resource>
               <directory>${basedir}src/main/resources</directory>
               <filtering>true</filtering>
               <includes>
                   <include>**/*.yml</include>
               </includes>
           </resource>
       </resources>

如果发现mapper.xml还是没有build到,是因为IDEA和eclipse找文件有一点不同,如果你是吧mapper文件跟.java文件放同一级目录下,他是找不到的,因此也会报这个问题,我们只需
Ctrl+Shift+Alt+S
在这里插入图片描述在这里插入图片描述步骤如图,然后重新跑一边,就可以在target中找到对应配置文件
如何还是报绑定异常,确认配置文件路径没有错,也编译到了,那么你可能跟我遇到的问题一样,一个**非常神奇的问题!!!**命名问题,我现在也没搞懂,由于之前我的application.yml配置文件是随便用了一个config.yml命名,结果我排查了所有错误,没发现问题,后面突然想,会不会是命名不规范,我就把我的yml名字改为application.yml,一跑,竟然通了!!!!你敢相信!!!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值