SpringBoot继承通用Mapper

一、为什么要用通用Mapper?

这段实时间自己在空余时间,改变了一下SpringBoot项目中使用mybatis的方式。之前一直都是使用的mybatis-generator插件生成一大堆Mapper相关的java文件和xml文件,虽然都是自动生成的,但总觉得不够干净,于是便想着做点什么——使用通用Mapper。

通用Mapper(tk.mybatis)封装了数据库表基本的CRUD功能,我们可以直接在业务方法中进行调用。使用之后,再也看不到那么多大同小异的自动生成的mapper相关文件。当然了,因为我们使用的数据库持久化框架是mybatis,很多时候,我们需要自定义查询,那么定义相关的java文件和xml文件是必须的。

集成的过程中,并不太顺利,网上找了各种资料,很混乱。所以自己在这里总结一下,同大家分享。

二、集成步骤

1.添加相关依赖

<!-- 集成mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.3.2</version>
</dependency>

<!-- 通用mapper -->
<dependency>
	<groupId>tk.mybatis</groupId>
	<artifactId>mapper-spring-boot-starter</artifactId>
	<version>2.0.4</version>
</dependency>

2.自定义Mapper继承通用Mapper

package com.gui.star.dal.common;

import tk.mybatis.mapper.common.Mapper;

public interface CommonMapper<T> extends Mapper<T> {

}

3.所有自己的xxxMapper.java继承第2步定义的Mapper

package com.gui.star.dal.mapper;

import com.gui.star.dal.common.CommonMapper;
import com.gui.star.dal.model.User;

public interface UserMapper extends CommonMapper<User>{
	
}

4.定义通用的service使用封装好的CRUD操作

package com.gui.star.biz.common;

import java.util.List;

public interface BaseService<T> {

    List<T> findAll();

    T findById(Long id);

    int save(T t);

    int update(T t);

    int remove(Long id);
}
package com.gui.star.biz.common;

import java.util.List;

import com.gui.star.dal.common.CommonMapper;

public abstract class BaseServiceImpl<T> implements BaseService<T> {

    public abstract CommonMapper<T> getMapper();

    @Override
    public List<T> findAll() {
        return getMapper().selectAll();
    }

    @Override
    public T findById(Long id) {
        return getMapper().selectByPrimaryKey(id);
    }

    @Override
    public int save(T t) {
         return getMapper().insert(t);
    }

    @Override
    public int remove(Long id) {
        return getMapper().deleteByPrimaryKey(id);
    }

    @Override
    public int update(T t) {
        return getMapper().updateByPrimaryKey(t);
    }
}

5.业务service继承通用的BaseService

package com.gui.star.biz.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.gui.star.biz.common.BaseServiceImpl;
import com.gui.star.biz.service.UserService;
import com.gui.star.biz.vo.UserVo;
import com.gui.star.common.form.UserForm;
import com.gui.star.common.util.DomainUtil;
import com.gui.star.common.util.ObjectUtil;
import com.gui.star.dal.common.CommonMapper;
import com.gui.star.dal.mapper.UserMapper;
import com.gui.star.dal.model.User;

import lombok.extern.slf4j.Slf4j;

@Service
@Slf4j
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService {
	@Autowired
	private UserMapper userMapper;

	@Override
	public CommonMapper<User> getMapper() {
		return this.userMapper;
	}

}

6.配置Mapper扫描已经修改配置文件

启动类中增加MapperScan注解扫描我们的Mapper

package com.gui.star.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;

import tk.mybatis.spring.annotation.MapperScan;

/**
 * SpringBoot启动类
 * 
 *
 */
@SpringBootApplication
@ComponentScan(basePackages = "com.gui")
@MapperScan(basePackages = "com.gui.star.dal.mapper")
@EnableAutoConfiguration
@EnableScheduling
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

注意:这里的MapperScan对应导入的包是tk.mybatis.spring.annotation.MapperScan。

application.yml配置文件中mybatis的配置:

mybatis: 
  mapper-locations: classpath:mapper/*.xml  #注意:一定要对应mapper映射xml文件的所在路径
  type-aliases-package: com.gui.star.dal.model  # 注意:对应实体类的路径

7.对应的实体类

package com.gui.star.dal.model;

import java.util.Date;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

public class User {
	/**
	 * 标识主键
	 * 定义ID的生成规则,每次保存后返回ID
	 */
	@Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    private String loginname;

    private String password;

    private String email;

    private String phone;

    private Date createdAt;

    private Date updatedAt;

    private Byte deleted;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getLoginname() {
        return loginname;
    }

    public void setLoginname(String loginname) {
        this.loginname = loginname == null ? null : loginname.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email == null ? null : email.trim();
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone == null ? null : phone.trim();
    }

    public Date getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    public Date getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(Date updatedAt) {
        this.updatedAt = updatedAt;
    }

    public Byte getDeleted() {
        return deleted;
    }

    public void setDeleted(Byte deleted) {
        this.deleted = deleted;
    }
}

 

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Spring Boot可以很方便地整合通用Mapper,只需要在pom.xml中添加通用Mapper的依赖,然后在配置文件中配置数据源和通用Mapper的相关属性即可。 具体步骤如下: 1. 在pom.xml中添加通用Mapper的依赖: ```xml <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency> ``` 2. 在配置文件中配置数据源和通用Mapper的相关属性: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: root driver-class-name: com.mysql.jdbc.Driver mybatis: mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true mapper: mappers: - tk.mybatis.mapper.common.Mapper not-empty: false identity: MYSQL ``` 其中,mapper.mappers指定了要使用的Mapper接口,这里使用了通用MapperMapper接口;mapper.identity指定了主键生成策略,这里使用了MySQL的自增长主键。 3. 在Mapper接口中继承通用MapperMapper接口即可使用通用Mapper提供的方法: ```java public interface UserMapper extends Mapper<User> { } ``` 这样就可以使用通用Mapper提供的方法来进行数据库操作了,例如: ```java @Autowired private UserMapper userMapper; public void addUser(User user) { userMapper.insert(user); } public void updateUser(User user) { userMapper.updateByPrimaryKeySelective(user); } public void deleteUser(Long id) { userMapper.deleteByPrimaryKey(id); } public User getUser(Long id) { return userMapper.selectByPrimaryKey(id); } public List<User> getUsers() { return userMapper.selectAll(); } ``` 以上就是Spring Boot整合通用Mapper的基本步骤,希望能对你有所帮助。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值