Springboot 整合Mybatis

Springboot整合Mybatis

添加Mybatis依赖

方式一:编辑pom.xml 添加dependency

<!--mybatis起步依赖-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

<!--mysql驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

方式二:创建项目时选择dependency

  • 新建一个Spring Initializr 项目

    image-20220314173402934

  • 选择项目所需的依赖

    image-20220314105244360

  • 创建后的pom文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.6.4</version>
            <relativePath/>
        </parent>
        
        <groupId>com.smile</groupId>
        <artifactId>blog</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>blog</name>
        <description>blog</description>
        
        <properties>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.2</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

创建mapper包

image-20220314173838270

修改配置文件

方式一:properties文件

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root

方式二:yml文件

#Mybatis
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=GMT%2B8
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: root
    username: root

mybatis:
  type-aliases-package: com.smile.blog.entity
  mapper-locations: classpath*:/mapper/*.xml

创建实体类

package com.smile.blog.entity;

/**
 * @Notes
 * @Date 2022/3/14
 * @Time 17:41
 * @Author smile
 */
public class User {
    private Integer id;

    private String name;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

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

创建Dao

package com.smile.blog.dao;

import com.smile.blog.entity.User;


public interface UserDao {
    User getUser(Integer id);
}
  • 给每个dao设置注解@Mapper
  • Application中设置@MapperScan(basePackages = "com.smile.blog.dao")

创建service接口和service实现类

package com.smile.blog.service.impl;

import com.smile.blog.dao.UserDao;
import com.smile.blog.entity.User;
import com.smile.blog.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @Notes
 * @Date 2022/3/14
 * @Time 17:45
 * @Author smile
 */
@Service
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao userDao;

    public User getUser(Integer id)
    {
        return userDao.getUser(id);
    }
}
package com.smile.blog.service;

import com.smile.blog.entity.User;

/**
 * @Notes
 * @Date 2022/3/14
 * @Time 17:45
 * @Author smile
 */
public interface UserService {
    User getUser(Integer id);
}

创建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="com.smile.blog.dao.UserDao">
    <select id="getUser" resultType="com.smile.blog.entity.User">
        select id,name,email from users where id = #{userId}
    </select>
</mapper>

创建控制器

package com.smile.blog.controller;

import com.smile.blog.entity.User;
import com.smile.blog.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

/**
 * @Notes
 * @Date 2022/3/14
 * @Time 17:51
 * @Author smile
 */
@Controller
public class UserController {
    @Resource
    private UserService userService;

    @GetMapping("/user")
    @ResponseBody
    public String user()
    {
        User user = userService.getUser(1);

        return user.toString();
    }
}

整体的目录结构

├─java
│  └─com
│      └─smile
│          └─blog
│              │  Application.java
│              │  
│              ├─controller
│              │      UserController.java
│              │      
│              ├─dao
│              │      UserDao.java
│              │      
│              ├─entity
│              │      User.java
│              │      
│              └─service
│                  │  UserService.java
│                  │  
│                  └─impl
│                          UserServiceImpl.java
│                          
└─resources
    │  application.yml
    │  
    ├─mapper
    │      Dao.xml
    │      
    ├─static
    └─templates

结果响应

image-20220314175622534

设置Mybatis代码自动生成器

  • 设置maven组件

    <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.4.0</version>
        <configuration>
            <configurationFile>src/main/resources/mybatis/generatorConfig.xml</configurationFile>
            <overwrite>true</overwrite>
            <includeCompileDependencies>true</includeCompileDependencies>
        </configuration>
    </plugin>
    

    刷新maven,查看组件

    image-20220314235313160

  • 创建配置文件generatorConfig.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE generatorConfiguration PUBLIC
            "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
            "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
    <generatorConfiguration>
        <!-- 本地数据库驱动程序jar包的全路径 -->
        <classPathEntry location="D:\Maven\repository\mysql\mysql-connector-java\8.0.28\mysql-connector-java-8.0.28.jar"/>
    
        <context id="context" targetRuntime="MyBatis3" defaultModelType="flat">
            <commentGenerator>
                <property name="suppressAllComments" value="true"/>
                <property name="suppressDate" value="true"/>
            </commentGenerator>
    
            <!-- 数据库的相关配置 -->
            <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/crm?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai&amp;useSSL=false"
                            userId="root"
                            password="root">
                <property name="nullCatalogMeansCurrent" value="true"/>
            </jdbcConnection>
    
            <!-- DECIMAL 和 NUMERIC 类型解析为 Integer-->
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
    
            <!-- 实体类生成的位置 -->
            <javaModelGenerator targetPackage="com.smile.blog.entity" targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
    
            <!-- *Mapper.xml 文件的位置 -->
            <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources/mybatis">
                <property name="enableSubPackages" value="false"/>
            </sqlMapGenerator>
    
            <!-- Mapper 接口文件的位置 -->
            <javaClientGenerator targetPackage="com.smile.blog.dao" targetProject="src/main/java" type="XMLMAPPER">
                <property name="enableSubPackages" value="true"/>
            </javaClientGenerator>
    
            <!-- 相关表的配置 -->
            <table tableName="user" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
                   enableUpdateByExample="false" enableSelectByPrimaryKey="true" domainObjectName="User"/>
        </context>
    </generatorConfiguration>
    
  • 点击mybaits-generator插件

    image-20220314235548300

异常问题解决

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  • 检查xml文件所在的package名称是否和Mapper Interface 所在的包名

    <mapper namespace="com.smile.blog.dao.UserDao">
    
  • UserDao的方法在UserDao.xml中不存在,然后执行UserDao的方法会报错

  • UserDao的方法返回值是List但是select元素没有正确配置ResultMap或则只配置了ResultType

  • 确认mapper的xml配置路径是否正确

    mybatis:
      type-aliases-package: com.smile.blog.entity
      mapper-locations: classpath*:/mapper/*.xml
    
posted @   易文杰  阅读(477)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示