spring boot 整合mybatis

本文介绍了一个基于SpringBoot的MyBatis整合方案,包括实体类、DAO层和服务层的规范,支持自动填充时间戳等功能,适用于快速搭建基于MyBatis的SpringBoot应用。

spring boot 整合mybatis

github地址: https://github.com/xiaoping1988/ping-spring-boot

maven引入如下starter

<dependency>
   <groupId>com.github.xiaoping1988.spring.boot</groupId>
   <artifactId>mybatis-ping-spring-boot-starter</artifactId>
   <version>1.0.1</version>
</dependency>

此框架实现了单表的增删改查等90%左右的功能,支持mysql和oracle数据库

实体类规范:

必须继承BaseModel或者BaseTimeModel类
BaseTimeModel已继承BaseModel类,此类有两个时间数据属性create_time(创建时间)和update_time(修改时间),实体对应的数据库表必须要有此二字段,serivce通过调用基类方法会自动更新此二字段。
所有的属性名称与数据库表字段名称保持一致

实体类的注解:

@Table: 数据库表名

@OrderBy: 排序

@Pk: 是否是主键,支持联合主键

@AutoIncrement: 如果是单一自增主键,务必在属性加上此注解

@Sequence: 如果是oracle数据库,自增主键的属性上务必加上此属性,标明自增序列

package com.ping.sample.entity;

import com.mybatis.ping.spring.boot.annotation.AutoIncrement;
import com.mybatis.ping.spring.boot.annotation.OrderBy;
import com.mybatis.ping.spring.boot.annotation.Pk;
import com.mybatis.ping.spring.boot.annotation.Table;
import com.mybatis.ping.spring.boot.extend.entity.BaseTimeModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.util.Assert;

/**
 * 用户表,字段与数据库一一对应即可,
 * Created by liujiangping on 2017/8/20.
 */
@Table("sys_user")
@ApiModel("用户信息")
public class User extends BaseTimeModel {

    /**
     * 主键自增
     */
    @Pk
    @AutoIncrement
    @OrderBy(OrderBy.Order.DESC)
    @ApiModelProperty("用户id")
    private Long user_id;

    @ApiModelProperty("用户姓名")
    private String user_name;

    @ApiModelProperty("用户账号")
    private String user_account;

    @ApiModelProperty("用户年龄")
    private Integer user_age;

    @ApiModelProperty("用户所在城市")
    private String user_city;

    public User () {}

    public User(Long user_id) {
        Assert.notNull(user_id, "user_id can not be null!");
        this.user_id = user_id;
    }

    public Long getUser_id() {
        return user_id;
    }

    public void setUser_id(Long user_id) {
        this.user_id = user_id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getUser_account() {
        return user_account;
    }

    public void setUser_account(String user_account) {
        this.user_account = user_account;
    }

    public Integer getUser_age() {
        return user_age;
    }

    public void setUser_age(Integer user_age) {
        this.user_age = user_age;
    }

    public String getUser_city() {
        return user_city;
    }

    public void setUser_city(String user_city) {
        this.user_city = user_city;
    }
}

Dao层规范:

实体对应的dao必须在”实体包路径.dao”包路径下,名称必须为”实体名Dao”,必须继承BaseCURDDao或者BaseQueryDao,前者支持增删改查,后者只支持查,已办视图对应的实体类Dao继承只读的Dao.

package com.ping.sample.entity.dao;

import com.mybatis.ping.spring.boot.extend.dao.BaseCURDDao;
import com.ping.sample.entity.User;

import java.util.List;
import java.util.Map;

/**
 * 包路径,实体类路径.dao
 * 命名规则,实体名+Dao
 * Created by liujiangping on 2017/8/20.
 */
public interface UserDao extends BaseCURDDao<User> {

    public List<Map<String, Long>> countGroupByAge();
}

Service层规范:

必须继承BaseCURDService或者BaseQueryService,此二类已实现单表增删改查的大部分方法

package com.ping.sample.service;

import com.mybatis.ping.spring.boot.extend.service.BaseCURDService;
import com.ping.sample.entity.User;
import com.ping.sample.entity.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * Created by liujiangping on 2017/8/20.
 */
@Service
public class UserService extends BaseCURDService<User, UserDao> {

    @Autowired
    private UserDao userDao;

    public List<Map<String, Long>> countGroupByAge() {
        return this.userDao.countGroupByAge();
    }
}

自定义实体Dao的方法:

mapper文件位置在resources/mapper/,mapper文件的namespace必须是dao全路径名称,剩下的就跟平常写mybatis一样,id不能与基类dao中的方法名一样

如果想自定义一个跟实体无关的Dao,只要继承SqlMapper就行

项目结构:
这里写图片描述

具体可参考sample项目中的pring-spring-boot-sample-mybatis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值