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

网友投稿 240 2023-05-15


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

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依赖,本例中所用到的依赖如下:

org.springframework.boot

spring-boot-starter-parent

1.4.2.RELEASE

org.springframework.boot

spring-boot-starter-web

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.1.1

mysql

mysql-connector-java

5.1.40

org.springframework.boot

spring-boot-maven-plugin

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

代码文件内容

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 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 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.SpripicZykZVngApplication;

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类。启动成功如下图所示

测试show服务,结果如下:

测试showDao服务,在输入URL时需要将参数打包进url,结果如下:

不带参数时,访问错误:

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

测试insert服务

再次测试showDao服务

结语

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

代码库地址:github地址


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中IO流 RandomAccessFile类实例详解
下一篇:微信小程序 支付功能实现PHP实例详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~