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);
这是第三种写法,配合上篇第二篇博客的注解一起使用