崛起于Springboot2.X + Mybatis:Provider方式(5)

主宰稳场 提交于 2020-03-15 17:15:13

《SpringBoot2.X心法总纲》

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

2 创建MybatisManager

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

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

3、 MybatisSqlProvider

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!