崛起于Springboot之Mybatis-继承实现类操作Mysql(5)

本文介绍了一种利用MyBatis实现通用Mapper基类的方法,通过抽象类`SqlMapperBasedServiceBase`来减少重复代码,并展示了如何通过继承该基类创建具体的业务管理器,如`MybatisManager`。此外,还介绍了如何使用SQL提供者类`MybatisSqlProvider`来动态生成SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、这种方法很少见

    1.1 公共方法抽象类

import java.lang.reflect.ParameterizedType;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.mapper.MapperFactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;

public abstract class SqlMapperBasedServiceBase<MapperClass> implements InitializingBean {
    protected MapperClass _mapper;

    @Autowired
    SqlSessionFactory _sqlSessionFactory;

    public void afterPropertiesSet() throws Exception {
        MapperFactoryBean factory = new MapperFactoryBean();
        factory.setMapperInterface((Class<MapperClass>) ((ParameterizedType) getClass().getGenericSuperclass())
                .getActualTypeArguments()[0]);
        factory.setSqlSessionFactory(_sqlSessionFactory);
        factory.afterPropertiesSet();

        _mapper = (MapperClass) factory.getObject();
    }

    public MapperClass getMapper() {
        return _mapper;
    }

    public SqlSessionFactory getSqlSessionFactory() {
        return _sqlSessionFactory;
    }

    public void setMapper(MapperClass mapper) {
        _mapper = mapper;
    }

    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        _sqlSessionFactory = sqlSessionFactory;
    }
}

    1.2 创建MybatisManager 继承MybatisDao

@Transactional(readOnly = false)
@Service("mybatisManager")
public class MybatisManager extends SqlMapperBasedServiceBase<MybatisDao> {
    public void add(User user){
        _mapper.add(user);
    }
}

以后我们在controller就可以直接使用这个mybatisMansger了

    1.3 写sql CRUD类,然后放到MybatisDao中

public class MybatisSqlProvider {

    public String insertUser(User user){
        SQL sql = new SQL();
        sql.INSERT_INTO("user");
        if (user.getUsername() != null && user.getUsername() !=""){
            sql.VALUES("username","#{username,jdbcType=VARCHAR}");
        }
        if (!StringUtils.isEmpty(user.getPassword())){
            sql.VALUES("password","#{password,#{password,jdbcType=VARCHAR}");
        }
        return sql.toString();
    }
}

    然后上一篇博客mybatisDao类中添加以下

@InsertProvider(type = MybatisSqlProvider.class,method = "insertUser")
int insertUser(User user);

    这是第三种写法,配合上篇第二篇博客的注解一起使用

转载于:https://my.oschina.net/mdxlcj/blog/1835655

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值