一、环境搭建
1.导入maven依赖
<!--通用mapper起步依赖-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.4</version>
</dependency>
2.dao接口编写
//继承通用mapper提供的接口
public interface BrandMapper extends Mapper<Brand> {
}
3.Brand实体类编写
@Table(name="tb_brand")
public class Brand implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;//品牌id
@Column(name = "name")
private String name;//品牌名称
@Column(name = "image")
private String image;//品牌图片地址
@Column(name = "letter")
private String letter;//品牌的首字母
@Column(name = "seq")
private Integer seq;//排序
4.配置@MapperScan(“dao包路径”)
注意:这个注解是通用mapper提供的
二、查询方法
1.查询所有
selectAll ()//返回List
2.通过id查询
selectByPrimaryKey ( id )//返回实体类
selectOne ( brand )//返回实体类,参数是实体类
三、新增方法
1.新增并且算上null值
insert ( brand )
2.新增不算上null值
- 带
Selective
是排除null
值的
insertSelective ( brand )//推荐使用
四、更新方法
1.更新并且算上null值
updateByPrimaryKey ( brand )
2.更新不算上null值
updateByPrimaryKeySelective ( brand )//推荐使用
五、删除方法
1.通过id删除
deleteByPrimaryKey ( id )
六、按条件查询
- controller层
/**
* 多条件查询
* @param brand
* @return
*/
@PostMapping("/search")
public Result<List<Brand>> search(@RequestBody Brand brand){
List<Brand> brandList = brandService.findList ( brand );
return new Result<> ( true,StatusCode.OK,"根据条件查询品牌成功",brandList);
}
- service层
public List<Brand> findList(Brand brand) {
//自定义条件搜索对象 Example
Example example = new Example ( Brand.class );
Example.Criteria criteria = example.createCriteria ( );//条件构造器
if (brand!=null){
//brand.name!=null 并且不为""
if (!StringUtils.isEmpty ( brand.getName () )){
//根据名字模糊查询 where name like '%华为%'
/*
第一个参数是String类型(对应数据表的列名)
第二个参数是Object类型(对应的value值)
*/
criteria.andLike ( "name","%"+brand.getName ()+"%" );
}
//brand.letter!=null 并且不为""
if (!StringUtils.isEmpty ( brand.getLetter () )){
//根据首字母查询 and letter='H' (因为首字母就一个字符,不用like)
criteria.andEqualTo ( "letter",brand.getLetter () );
}
}
return brandMapper.selectByExample ( example );
}
在使用上建议把条件查询逻辑抽调一个方法,可以方便复用
更多criteria
的方法可以查看源码:
- 以下是截取的一部分源码的方法
public Example.Criteria andIsNull(String property) {
this.addCriterion(this.column(property) + " is null");
return (Example.Criteria)this;
}
public Example.Criteria andIsNotNull(String property) {
this.addCriterion(this.column(property) + " is not null");
return (Example.Criteria)this;
}
public Example.Criteria andEqualTo(String property, Object value) {
this.addCriterion(this.column(property) + " =", value, this.property(property));
return (Example.Criteria)this;
}
public Example.Criteria andNotEqualTo(String property, Object value) {
this.addCriterion(this.column(property) + " <>", value, this.property(property));
return (Example.Criteria)this;
}
public Example.Criteria andGreaterThan(String property, Object value) {
this.addCriterion(this.column(property) + " >", value, this.property(property));
return (Example.Criteria)this;
}
七、分页查询
1.pagehelper
分页插件
- maven依赖
<!--mybatis分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
2.代码实现
- controller层
/**
* 分页查询
* @param page
* @param size
* @return
*/
@GetMapping("/search/{page}/{size}")
public Result<PageInfo<Brand>> findByPage(@PathVariable Integer page,
@PathVariable Integer size){
PageInfo<Brand> brandPageInfo = brandService.findByPage ( page, size );
return new Result<> ( true,StatusCode.OK,"分页查询品牌成功",brandPageInfo);
}
- service层
public PageInfo<Brand> findByPage(Integer page, Integer size) {
//开启分页查询
PageHelper.startPage ( page,size );
//封装分页bean
PageInfo<Brand> brandPageInfo = new PageInfo<> ( brandMapper.selectAll ( ) );
return brandPageInfo;
}
八、分页条件查询
public PageInfo<Brand> findByPageAndList(Integer page, Integer size, Brand brand) {
//调用抽取出来的条件查询方法获得查询条件
Example example = createExample ( brand );
//开启分页查询
PageHelper.startPage ( page,size );
//封装分页bean
PageInfo<Brand> brandPageInfo = new PageInfo<> ( brandMapper.selectByExample ( example ) );
return brandPageInfo;
}