Spring Boot 整合 MyBatis

前言

MyBatis — 半自动ORM框架,现如今,常见的持久层框架有:Hibernate,MyBatis , JPA…

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

步骤

引入依赖
<!--mybatis依赖 -->
<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>
    <version>8.0.15</version>
</dependency>
修改配置文件 application.properties
# 数据库
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/yang?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

# mybatis
# 给实体类起别名
mybatis.type-aliases-package=com.example.canal.mybatis.entity
启动类
package com.example.canal;

import com.xpand.starter.canal.annotation.EnableCanalClient;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(basePackages = "com.example.canal.mybatis.mapper")
public class CanalApplication {
    public static void main(String[] args) {
        SpringApplication.run(CanalApplication.class,args);
    }
}
实体类
package com.example.canal.mybatis.entity;

import org.apache.ibatis.type.Alias;

@Alias("User")
public class User {

    private Integer userId;

    private String userName;

    private String userSex;

    private Integer userAge;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    public Integer getUserAge() {
        return userAge;
    }

    public void setUserAge(Integer userAge) {
        this.userAge = userAge;
    }
}
控制层
package com.example.canal.mybatis.controller;

import com.alibaba.fastjson.JSON;
import com.example.canal.mybatis.entity.User;
import com.example.canal.mybatis.service.IUserService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;

@RestController
@RequestMapping("/yang")
public class UserController {

    @Resource
    private IUserService userServiceImpl;

    @RequestMapping(value = "/getById", method = RequestMethod.POST)
    public User getById(@RequestBody String jsonString) {

        Map mapTypes = JSON.parseObject(jsonString);
        int id = Integer.valueOf(mapTypes.get("id").toString());
        return userServiceImpl.selectUser(id);
    }
}
服务层
package com.example.canal.mybatis.service;

import com.example.canal.mybatis.entity.User;

public interface IUserService {
    User selectUser(int id);
}
package com.example.canal.mybatis.service;

import com.example.canal.mybatis.entity.User;
import com.example.canal.mybatis.mapper.UserMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class UserServiceImpl implements IUserService {

    @Resource
    private UserMapper userMapper;

    @Override
    public User selectUser(int id) {
        return userMapper.selectUser(id);
    }
}
Mapper
package com.example.canal.mybatis.mapper;

import com.example.canal.mybatis.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
    User selectUser(int 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.example.canal.mybatis.mapper.UserMapper">

    <resultMap id="BaseResultMap" type="com.example.canal.mybatis.entity.User">
        <result column="id" jdbcType="INTEGER" property="userId"/>
        <result column="name" jdbcType="VARCHAR" property="userName"/>
        <result column="sex" jdbcType="VARCHAR" property="userSex"/>
        <result column="age" jdbcType="INTEGER" property="userAge"/>
    </resultMap>

    <select id="selectUser" resultMap="BaseResultMap" resultType="User">
        select * from user where id = #{id}
    </select>

    <update id="updUser" parameterType="User"></update>

    <delete id="delUser"></delete>

    <insert id="addUser" parameterType="com.example.canal.mybatis.entity.User">
        insert into user value (${id},#{name},${sex},#{age})
    </insert>
</mapper>

常见问题

解决 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 错误

1. xxx.xml 文件没有按照传统的maven架构进行放置

在构建工程的时候,如果我们的 ×××.xml 文件没有放到 src/main/resources 下面,是不会被maven build plugin给默认扫描到的。此时需要在 pom文件的 build 标签里面加入:

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值