借助tk的通用mapper实现在mybatis中使用Example进行查询的几种方式

如下列举四种方式,但是不止四种哦。

其中weekend方式需要升级jdk到1.8及以上。

废话不代码!

首先定义数据库表映射类:

public class MybatisDemo {
    private Long id;
    private Long count;
    private String name;

    public Long getId() {
        return id;
    }
    public Long getCount() {
        return count;
    }
    public String getName() {
        return name;
    }

//    setter……
}

此处省略了数据库表映射和set方法。

接下来就是实现example查询的几种方式,核心代码如下:

方式一:普通Example方式(从and方法开始可以实现动态sql拼接)

    Example example = new Example(CandidateBrandEntity.class);
    example
      //.selectProperties("cabId","cabName")
        .and().andEqualTo("cabDeleted",0)
        .andLike("cabName","%d%");

    // 排序
    example.orderBy("cabCreatedTime")
        /*.desc()*/
          .orderBy("cabId").desc();

    // 获得结果
    List<CandidateBrandEntity> brands = brandEntityMapper.selectByExample(example);

方式二:Criteria方式(可使用criteria完成动态sql拼接)

Example example = new Example(MybatisDemo.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("count", 0)
        .andLike("name", "%d%");
example.orderBy("count")
        //.desc()
        .orderBy("name").desc();
List<MybatisDemo> demos = mybatisDemoMapper.selectByExample(example);

方式三:Example.builder 方式(其中where从句中内容可以拿出来进行动态sql拼接)

Example example = Example.builder(MybatisDemo.class)
        .select("cabId","cabName")
        .where(Sqls.custom().andEqualTo("count", 0)
        .andLike("name", "%d%"))
        .orderByDesc("count","name")
        .build();
List<MybatisDemo> demos = mybatisDemoMapper.selectByExample(example);

方式四:Example.builder + Weekend方式,优势:不用输入属性名,避免数据库有变动或输入错误就会出错

//获得seekendsql
WeekendSqls<MybatisDemo> sqls = WeekendSqls.<MybatisDemo>custom();

//可进行动态sql拼接
sqls = sqls.andEqualTo(MybatisDemo::getCount,0).andLike(MybatisDemo::getName,"%d%");

//获得结果
List<MybatisDemo> demos = mybatisDemoMapper.selectByExample(Example.builder(MybatisDemo.class).where(sqls).orderByDesc("count","name").build());

 

带逻辑分页的查询(逻辑分页,其实是查询了所有数据,只是返回了需要的)

RowBounds bounds = new RowBounds(1,10);
List<MybatisDemo> brands =  brandEntityMapper.selectByExampleAndRowBounds(
        Example.builder(MybatisDemo.class)
                .where(WeekendSqls.<MybatisDemo>custom()
                        .andEqualTo(MybatisDemo::getCount,0))
                .build(),bounds);

 

参考内容:https://github.com/abel533/Mapper/wiki/6.example

转载于:https://my.oschina.net/kevin2kelly/blog/2254665

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`tk.mybatis.mapper.common.example` 包提供了一些通用Mapper 方法,其包括了 `deleteByExample` 方法,用于根据条件删除数据库的数据。使用该方法时,需要在 Mapper 接口继承 `tk.mybatis.mapper.common.example.DeleteByExampleMapper` 接口,并传入一个 `Example` 对象作为参数,该对象包含了删除数据的条件。具体的示例代码如下: ```java public interface UserMapper extends Mapper<User>, DeleteByExampleMapper<User> { } public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public int deleteUserByExample(String name, int age) { // 创建 Example 对象 Example example = new Example(User.class); Example.Criteria criteria = example.createCriteria(); // 设置查询条件 criteria.andEqualTo("name", name); criteria.andEqualTo("age", age); // 调用 deleteByExample 方法删除用户 return userMapper.deleteByExample(example); } } ``` 在上述代码,我们定义了一个 `UserMapper` 接口,该接口继承了 `Mapper<User>` 和 `DeleteByExampleMapper<User>` 接口,其 `Mapper<User>` 是 `tk.mybatis.mapper.common.Mapper` 接口的泛型实现,用于提供基本的 CRUD 操作;`DeleteByExampleMapper<User>` 接口则提供了 `deleteByExample` 方法,用于根据条件删除数据库的数据。在 `UserServiceImpl` ,我们通过创建一个 `Example` 对象,并设置查询条件,最后调用 `deleteByExample` 方法删除满足条件的用户。其,`Example` 对象也是 MyBatis 自动生成的,它根据实体类的属性生成了一些查询条件的方法,我们可以通过 `example.createCriteria()` 方法获取到一个 `Criteria` 对象,并在该对象设置查询条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值