mybatis(一):springboot集成mybatis-plus

之前一直用的jpa,现在项目上开始用mybaits,今天想搭一个自己玩玩但是过程有点艰辛,特地记录下来。

首先引入pom依赖:

<dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>2.3</version>
        </dependency>
        <!--注意,如果不引入这个依赖,无法注入到spring中-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>2.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.34</version>
        </dependency>

    </dependencies>

开始由于没有引入 mybatis-plus-boot-starter依赖,一直无法注入要spring中。

接下来是写一个配置文件 application.yml:

server:
  port: 8083

mybatis-plus:
  mapper-locations: classpath:/mapper/*.xml

spring:
  datasource:
    name: test
    url: jdbc:mysql://127.0.0.1:3306/test_mybatis?characterEncoding=utf8&allowMultiQueries=true
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

 

在写一个mapper:

import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import test.mybatis.plus.entity.Person;

import java.util.List;

@Mapper
public interface PersonMapper extends BaseMapper<Person> {

    List<Person> selectByAge(Integer age);
}

PersonMapper.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="test.mybatis.plus.mapper.PersonMapper">
    <select id="selectByAge" resultType="test.mybatis.plus.entity.Person" parameterType="Integer">
        select t.* from person t where age = #{age}
    </select>
</mapper>

 

这边由于把resultType和parameterType写成了resultMap和parameterMap,然后程序一直报错:

Result Maps collection does not contain value 

Parameter Maps collection does not contain value

其实这边只要改成resultType和parameterType就可以解决了。

 

到这边之后调用接口发现,又报错了,真是够心累的。。。

nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating interface test.mybatis.plus.mapper.PersonMapper with invalid types () or values (). Cause: java.lang.NoSuchMethodException: test.mybatis.plus.mapper.PersonMapper.<init>()

看报错说是PersonMapper没有初始化,原来是我们在 resultType那里返回的结果写错了,我写成了mapper的,应该是model的才对,改成model之后成功返回了结果。

太不容易了。

 

 最后再附上Peron表的代码  以及 service和controller代码:

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;

import java.io.Serializable;

@TableName("person")
public class Person implements Serializable {

    @TableId(value = "id", type = IdType.UUID)
    private String id;

    private String name;

    private Integer age;

    @TableField(value = "address")
    private String address;

    public String getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

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

}



public interface IPersonService {
    Person getPersonById(String id);

    List<Person> getPersonByAge(Integer age);

    void insertPerson(Person person);
}


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import test.mybatis.plus.entity.Person;
import test.mybatis.plus.mapper.PersonMapper;
import test.mybatis.plus.service.IPersonService;

import java.util.List;
import java.util.UUID;

@Service
public class PersonServiceImpl implements IPersonService {

    @Autowired
    private PersonMapper personMapper;

    @Override
    public Person getPersonById(String id) {
        return personMapper.selectById(id);
    }

    @Override
    public List<Person> getPersonByAge(Integer age) {
        return personMapper.selectByAge(age);
    }

    @Override
    public void insertPerson(Person person) {
        person.setId(UUID.randomUUID().toString().replace("-",""));
        personMapper.insert(person);
    }
}


import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import test.mybatis.plus.entity.Person;
import test.mybatis.plus.service.IPersonService;

@RestController
@RequestMapping("person")
public class PersonContrller {

    @Autowired
    private IPersonService personService;

    @GetMapping("{id}")
    public String personById(@PathVariable String id){
        return JSONObject.toJSONString(personService.getPersonById(id));
    }

    @PostMapping("insert")
    public void insert(@RequestBody Person person){
        personService.insertPerson(person);
    }

    @GetMapping("/age")
    public String personByAge(@RequestParam Integer age){
        return JSONObject.toJSONString(personService.getPersonByAge(age));
    }
}

 

到这里一个简单的springboot集成mybaits就完成,下次再搭建一个mybaits集成分页的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值