Spring Boot 与 Mybatis 的整合案例

一. 创建spring boot项目并进行配置

1. 创建spring boot参照博客

https://blog.csdn.net/weixin_43330884/article/details/104942624

2. 在之上的基础上引入所需依赖
  • Mybatis
		<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
  • MySQL
		<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
  • alibaba 的 druid 数据源
		<!-- alibaba-druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.21</version>
        </dependency>
3. 配置spring boot的核心文件

application.properties

################ Mybatis 配置 ################
#别名
mybatis.type-aliases-package=cn.hp.springboot_demo.domain
#驱动配置可省略,springboot可以自动识别
#spring.datasource.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
#MySQL账户名和密码
spring.datasource.username =root
spring.datasource.password =123456	
#如果不配置阿里的druid,会自动使用默认的数据源 (com.zaxxer.hikari.HikariDataSource)
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
#控制台显示SQL
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl 
4. 配置扫描Mybatis的Mapper接口

在spring boot的启动类上面添加注解:

@MapperScan(basePackages = {"cn.hp.springboot_demo.mapper"})

二. 整合案例代码编写

1. 数据库表的基本操作
1.1准备SQL语句,一张表作为测试
CREATE TABLE `user` (
	 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
	 `name` varchar(128) DEFAULT NULL COMMENT '名称',
	 `phone` varchar(16) DEFAULT NULL COMMENT '用户手机号',
	 `create_time` datetime DEFAULT NULL COMMENT '创建时间',
	 `age` int(4) DEFAULT NULL COMMENT '年龄',
	  PRIMARY KEY (`id`)
)
1.2 生成数据库表对应的实体类

生成:setter&getter方法和构造函数

package cn.hp.springboot_demo.domain;

import java.util.Date;

public class User {
    private Integer id;
    private String name;
    private String phone;
    private Integer age;
    private Date createTime;

    public User(String name, String phone, Integer age, Date createTime) {
        this.name = name;
        this.phone = phone;
        this.age = age;
        this.createTime = createTime;
    }

    public User() {
        super();
    }

    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;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Integer getAge() {
        return age;
    }

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

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

2. 编写mapper层和对应的业务层
2.1 接口:UserMapper.java
package cn.hp.springboot_demo.mapper;

import cn.hp.springboot_demo.domain.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserMapper {

    /**
     * 查询所有
     * @return
     */
    @Select("select * from user")
    @Results(@Result(property = "createTime",column = "create_time"))
    List<User> findAll();

    /**
     * 根据id查询
     * @param id
     * @return
     */
    @Select("select * from user where id = #{id}")
    @Results(@Result(property = "createTime",column = "create_time"))
    User findById(Integer id);

    /**
     * 更新
     * @param user
     */
    @Update("update user set name=#{name} where id=#{id}")
    void update(User user);

    /**
     * 删除
     * @param id
     */
    @Delete("delete from user where id=#{id}")
    void delete(Integer id);

    /**
     * 增加
     * @param user
     */
    @Insert("insert into user(name,age,phone,create_time) values(#{name},#{age},#{phone},#{createTime})")
    @Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
    int add(User user);
}
2.2 接口:UserService.java

与上面的一样

package cn.hp.springboot_demo.service;

import cn.hp.springboot_demo.domain.User;

import java.util.List;

public interface UserService {

    /**
     * 查询所有
     * @return
     */
    List<User> findAll();

    /**
     * 根据id查询
     * @param id
     * @return
     */
    User findById(Integer id);

    /**
     * 更新
     * @param user
     */
    void update(User user);

    /**
     * 删除
     * @param id
     */
    void delete(Integer id);

    /**
     * 增加
     * @param user
     */
    int add(User user);
}

2.3 UserServiceImp.java

接口UserService的实现类:重写UserService里面的方法

package cn.hp.springboot_demo.service.imp;

import cn.hp.springboot_demo.domain.User;
import cn.hp.springboot_demo.mapper.UserMapper;
import cn.hp.springboot_demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class UserServiceImp implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> findAll() {
        return userMapper.findAll();
    }

    @Override
    public User findById(Integer id) {
        return userMapper.findById(id);
    }

    @Override
    public void update(User user) {
        userMapper.update(user);
    }

    @Override
    public void delete(Integer id) {
        userMapper.delete(id);
    }

    @Override
    public int add(User user) {
        return userMapper.add(user);
    }
}

2.4 controller层:UserController.java
package cn.hp.springboot_demo.controller;

import cn.hp.springboot_demo.domain.User;
import cn.hp.springboot_demo.mapper.UserMapper;
import cn.hp.springboot_demo.service.UserService;
import cn.hp.springboot_demo.utils.JsonData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

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

    @Autowired
    private UserService userService;

    @Autowired
    private UserMapper userMapper;//查询操作不涉及事务所以也可以用 Mapper 层调用

    /**
     * 查询所有
     * @return
     */
    @RequestMapping("/findAll")
    public Object findAll(){
        List<User> all = userService.findAll();
        return JsonData.buildSuccess(all);
    }

    /**
     * 添加
     * @return
     */
    @RequestMapping("/add")
    public Object add(User user){
        int id = userService.add(user);
        return JsonData.buildSuccess(id);
    }

    /**
     * 根据id查询
     * @return
     */
    @RequestMapping("/findById")
    public Object findById(Integer id){
        User user = userService.findById(id);
        return JsonData.buildSuccess(user);
    }

    /**
     * 更新
     * @return
     */
    @RequestMapping("/update")
    public Object update(User user){
        userService.update(user);
        return JsonData.buildSuccess();
    }

    /**
     * 删除
     * @return
     */
    @RequestMapping("/delete")
    public Object delete(Integer id){
        userService.delete(id);
        return JsonData.buildSuccess();
    }
}

2.4 小工具:JsonData.java

这个小工具叫做响应结果类:更为美观的、直接的描述运行结果

package cn.hp.springboot_demo.utils;

import java.io.Serializable;

/**
 * 响应结果类
 */
public class JsonData implements Serializable {

	private Integer code; // 状态码 0 表示成功,1表示处理中,-1表示失败
	private Object data; // 数据
	private String msg;// 描述

	public JsonData() {
	}

	public JsonData(Integer code, Object data, String msg) {
		this.code = code;
		this.data = data;
		this.msg = msg;
	}

	// 成功,传入数据
	public static JsonData buildSuccess() {
		return new JsonData(0, null, "操作成功...");
	}

	// 成功,传入数据
	public static JsonData buildSuccess(Object data) {
		return new JsonData(0, data, "加载成功...");
	}

	// 失败,传入描述信息
	public static JsonData buildError(String msg) {
		return new JsonData(-1, null, msg);
	}

	// 失败,传入描述信息,状态码
	public static JsonData buildError(String msg, Integer code) {
		return new JsonData(code, null, msg);
	}

	// 成功,传入数据,及描述信息
	public static JsonData buildSuccess(Object data, String msg) {
		return new JsonData(0, data, msg);
	}

	// 成功,传入数据,及状态码
	public static JsonData buildSuccess(Object data, int code) {
		return new JsonData(code, data, null);
	}

	public Integer getCode() {
		return code;
	}

	public void setCode(Integer code) {
		this.code = code;
	}

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	@Override
	public String toString() {
		return "JsonData [code=" + code + ", data=" + data + ", msg=" + msg
				+ "]";
	}

}

到此spring boot与mybatis的整合案例结束!

发布了70 篇原创文章 · 获赞 114 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43330884/article/details/105046825