概述
样例基于 java springboot 整合 tk.mybatis 的使用。
pom.xml
<!-- 引入maven依赖 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
model
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "SYS_USER")
public class User {
@Id
@Column(name = "ID")
@GeneratedValue(generator = "JDBC", strategy = GenerationType.TABLE)
private String id;
@Column(name = "USER_NAME")
private String userName;
@Column(name = "REMARK")
private String remark;
@Column(name = "DEPT_ID")
private String deptId;
mapper
@Repository
public interface UserMapper extends Mapper<User> {
Page<SystemUserVO> selectSystemUserByCondition(SystemUserQueryCondition condition);
}
service
先写一个接口类 IService<T>
public interface Service <T> {
/**一些简单方法*/
int save(T t);
int deleteById(Object id);
int deleteByIds(Collection<Object> ids, String fieldName);
int update(T t);
int updateByExample(T t, Example example);
T selectById(Object id);
List<T> selectByIds(Collection<String> ids, String fieldName);
List<T> selectByExample(Example example);
T selectOneByExample(Example example);
}
实现一个抽象类 AbstractService<T>
public class AbstractService<T> implements Service<T>{
protected Mapper<T> mapper;
protected Class<T> modelClass;
@SuppressWarnings("unchecked")
public AbstractService() {
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
modelClass = (Class<T>) pt.getActualTypeArguments()[0];
String mapperName = modelClass.getSimpleName();
// 首字母小写 其实就是根据传入的 T 构造出一个可以获取对应 mapper bean
// 如:User -> user + Mapper = userMapper
mapperName = mapperName.substring(0,1).toLowerCase() + mapperName.substring(1);
mapper = SpringContextUtils.getBean(mapperName + "Mapper",Mapper.class);
}
@Override
public int save(T t) {
return mapper.insertSelective(t);
}
@Override
public int deleteById(Object id) {
return mapper.deleteByPrimaryKey(id);
}
@Override
public int deleteByIds(Collection<Object> ids, String fieldName) {
Example example = new Example(modelClass);
example.createCriteria().andIn(fieldName, ids);
return mapper.deleteByExample(example);
}
@Override
public int update(T t) {
return mapper.updateByPrimaryKeySelective(t);
}
@Override
public int updateByExample(T t, Example example) {
return mapper.updateByExampleSelective(t, example);
}
@Override
public T selectById(Object id) {
return mapper.selectByPrimaryKey(id);
}
@Override
public List<T> selectByIds(Collection<String> ids, String fieldName) {
Example example = new Example(modelClass);
example.createCriteria().andIn(fieldName, ids);
return mapper.selectByExample(example);
}
@Override
public List<T> selectByExample(Example example) {
return mapper.selectByExample(example);
}
public T selectOneByExample(Example example) {
return mapper.selectOneByExample(example);
}
}
UserService
public class UserServiceImpl extends AbstractService<User>implements IUserService {
}