前言
最近为了提升开发效率,省去一些单表的增删改查操作,所有想弄个通用类,然后就发现了mybatis还有这样一个注解@Mapper,然后就开始用了一下,确实能节约很多不必要的工作量。但是涉及到多表查询的话还是老老实实写sql吧,这个注解不适用。
Mapper官方githu地址:参考文档
现在多用springboot集成,所以用的是下面这个标签。
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
需要注意的地方就是,使用@Mapper这个注解的时候包不要导错了,使用的是这个包下面的
import tk.mybatis.mapper.common.Mapper;
如何导成了原来mybatis包下面的,可能会报错。
用法比较简单,你所需要的Dao层继承一下这个通用类就行;
实体类:
import lombok.Data;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Data
@Table(name = "cs_test")
public class TestBean {
@Id
private String id;
private String userid;
private int score;
private String classid;
private Date createtime;
}
Dao层:
import com.mzd.multipledatasources.bean.TestBean;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;
@Repository
public interface TestBeanMapper extends Mapper<TestBean> {
}
然后,没有然后了,xml不用写,当然也可以根据需要也可以自己写一些定制方法,比如多表查询
service层:
@Service
public class TestBeanService {
@Autowired
private TestBeanMapper testBeanMapper;
public List<TestBean> findAll(){
List<TestBean> testBeanList = testBeanMapper.selectAll();
return testBeanList;
}
}
如果需要获取插入方法后的注解,你需要在实体类中加点注解
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Data
@Table(name = "cs_test")
public class TestBean {
@Id
@Column(name = "id")
@GeneratedValue(generator = "JDBC")//此处加上注解
private String id;
private String userid;
private int score;
private String classid;
private Date createtime;
}
让就可以获取到id了
public int inserteOne(){
TestBean testBean = new TestBean();
int insert = testBeanMapper.insert(testBean);
System.out.println("插入的id: "+testBean.getUserid());
return insert;
}
然后用插入或者查询方法的时候建议选用这两个方法,因为可以定制要插入的参数,inserte()和updateByPrimaryKey()这种事插入所有参数
insertSelective();
updateByExampleSelective()
这样的话就只参数两个参数,id和score
public int inserteOne(){
TestBean testBean=new TestBean();
testBean.setId("1");
testBean.setScore(90);
int count = testBeanMapper.insertSelective(testBean);
System.out.println("插入的id: "+testBean.getUserid());
return count;
}
定制的查询
public List<TestBean> selecteByQuery(){
Example example=new Example(TestBean.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("score",90);
List<TestBean> list = testBeanMapper.selectByExample(example);
return list;
}
按条件查询并排序排序
public List<TestBean> selecteByQueryByOrder(){
Example example=new Example(TestBean.class);
example.setOrderByClause("score desc");//根据score降序
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("classid",1);//classid=1
RowBounds rb=new RowBounds(0,10);//查询10条数据
List<TestBean> list = testBeanMapper.selectByExampleAndRowBounds(example,rb);
return list;
}
总结:单表查询神器,包括还有去重等等方法还没一一列举,中国人自己写的。