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

被折叠的 条评论
为什么被折叠?



