欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Spring Boot集成MyBatis(注解方式)

程序员文章站 2024-02-24 08:20:22
mybatis是支持定制化sql、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的jdbc代码和手动设置参数以及获取结果集。spring boot是能支持快速创建s...

mybatis是支持定制化sql、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的jdbc代码和手动设置参数以及获取结果集。spring boot是能支持快速创建spring应用的java框架。本文通过一个例子来学习spring boot如何集成mybatis,而且过程中不需要xml配置。

创建数据库

本文的例子使用mysql数据库,首先创建一个用户表,执行sql语句如下:

create table if not exists user (
 `id` int(10) not null auto_increment,
 `name` varchar(50) null default null ,
 `age` int(2) not null ,
 primary key (id)
)

工程目录结构与依赖配置

首先新建一个maven工程,并配置pom依赖,本例中所用到的依赖如下:

<parent>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-parent</artifactid>
  <version>1.4.2.release</version>
  <relativepath />
</parent>

<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>1.1.1</version>
  </dependency>
  <dependency>
    <groupid>mysql</groupid>
    <artifactid>mysql-connector-java</artifactid>
    <version>5.1.40</version>
  </dependency>
</dependencies>

<build>
  <plugins>
    <plugin>
      <groupid>org.springframework.boot</groupid>
      <artifactid>spring-boot-maven-plugin</artifactid>
    </plugin>
  </plugins>
</build>

然后创建一下工程目录结构,如下图所示:

详解Spring Boot集成MyBatis(注解方式)

代码文件内容

0. 创建配置文件——application.properties

写入一下内容:

spring.datasource.driver-class-name=com.mysql.jdbc.driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?usessl=false&useunicode=true&characterencoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456

1. 创建pojo——entity/user.java

这是一个pojo,包含了id, name, age三个属性,代码如下:

package com.xyz.dbtest.entity;
public class user {
  private int id;
  private string name;
  private int age;

  public int getid() {  return id;  }

  public void setid(int id) { this.id = id;  }

  public string getname() {  return name;  }

  public void setname(string name) { this.name = name;  }

  public int getage() {  return age;  }

  public void setage(int age) {  this.age = age;  }
}

2. 创建一个数据层接口——service/userservice.java

这是一个mapper类,代码如下:

package com.xyz.dbtest.dao;

import com.xyz.dbtest.entity.user;
import org.apache.ibatis.annotations.mapper;
import org.apache.ibatis.annotations.result;
import org.apache.ibatis.annotations.results;
import org.apache.ibatis.annotations.select;
import java.util.list;

@mapper //1
public interface userdao {
  @results({ //2
      @result(property = "id", column = "id"), //2
      @result(property = "name", column = "name"),
      @result(property = "age", column = "age")
  })
  @select("select * from user where age = #{age}") //3
  list<user> get(int age);

  @insert("insert into user(name, age) values (#{name}, #{age})") //3
  void insert(user user);
}

//1 @mapper将userdao声明为一个mapper接口
//2 @results是结果映射列表,@result中property是user类的属性名,colomn是数据库表的字段名
//3 @select, @insert 分别代表了执行的真实sql

3. 创建一个用户服务——service/userservice.java

这是一个服务类bean,提供三个函数功能,代码如下:

package com.xyz.dbtest.service;

import com.xyz.dbtest.dao.userdao;
import com.xyz.dbtest.entity.user;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;
import java.util.list;

@service //声明成一个spring bean
public class userservice {

  @autowired //连接到userdao bean
  private userdao userdao;

  public string show() {
    return "hello world!";
  }

  public list<user> showdao(int age) {
    return userdao.get(age);
  }

  public string insert(string name, int age) { //插入一条记录
    user user = new user();
    user.setname(name);
    user.setage(age);
    userdao.insert(user);
    return "insert ( \""+name+"\", age"+age+") ok!";
  }
}

4. 常见一个web controller——controller/usercontroller.java

这是一个spring web的controller类,引入了spring-boot-starter-web依赖,代码如下:

package com.xyz.dbtest.controller;

import com.xyz.dbtest.service.userservice;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.responsebody;
import org.springframework.web.bind.annotation.restcontroller;

@restcontroller //声明为一个restful的controller
public class usercontroller {
  @autowired //自动连接到userservice bean
  private userservice userservice;

  @requestmapping(value = "/show")
  public string show() {
    return userservice.show();
  }

  @requestmapping(value = "/showdao")
  public object showdao(int age) {
    return userservice.showdao(age);
  }

  @requestmapping(value="/insert")
  public string insert(string name, int age) {
    return userservice.insert(name, age);
  }
}

5. 创建启动类——main/startapp.java

这是一个spring boot启动类。代码如下:

package com.xyz.dbtest.main;

import org.mybatis.spring.annotation.mapperscan;
import org.springframework.boot.springapplication;
import org.springframework.boot.autoconfigure.springbootapplication;

@springbootapplication(scanbasepackages = "com.xyz.dbtest") //1
@mapperscan(basepackages = "com.xyz.dbtest.dao") //2
public class startapp {
  public static void main(string[] args) {
    springapplication.run(startapp.class, args);
  }
}

//1 由于startapp类位于基础包的自包中,因此需要设置scanbasepackage
//2 设置mapper接口所在的包

运行结果

运行sql语句创建数据库表后,运行startapp类。启动成功如下图所示

详解Spring Boot集成MyBatis(注解方式)

测试show服务,结果如下:

详解Spring Boot集成MyBatis(注解方式)

测试showdao服务,在输入url时需要将参数打包进url,结果如下:
不带参数时,访问错误:

详解Spring Boot集成MyBatis(注解方式)

带参数时,访问成功,由于数据库中没有记录,所以结果是一个空列表:

详解Spring Boot集成MyBatis(注解方式)

测试insert服务

详解Spring Boot集成MyBatis(注解方式)

详解Spring Boot集成MyBatis(注解方式)

再次测试showdao服务

详解Spring Boot集成MyBatis(注解方式)

结语

通过本文的例子可以看出,使用spring boot集成mybatis几乎不用任何配置工作,能有效加快开发效率!

代码库地址:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。