Mybatis自带的selectByExample修改查询条件

在使用selectByExample时,可以设置查询条件的
1、相等
2、模糊查询
3、时间在某个时间段内
下面举例说明如何使用:

public List<SysHospitalizationDTO> getPageList(SysHospitalizationQuery sysHospitalizationQuery, String sort, String sortOrder) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(getDateFormat());
        Date todayDate = getTodayDate();
        List<SysHospitalization> list = sysHospitalizationDao.selectByExample(getExample(sysHospitalizationQuery)).stream().collect(Collectors.toList());
        }


private Example getExample(SysHospitalizationQuery sysHospitalizationQuery) {
        Example example = new Example(SysHospitalization.class);
        Example.Criteria criteria = example.createCriteria();

        //模糊查询
        if (sysHospitalizationQuery.getpName() != "") {
            criteria.andLike("pName", "%" + sysHospitalizationQuery.getpName() + "%");
        }
        //相等查询
        if (sysHospitalizationQuery.gethId() != "") {
            criteria.andEqualTo("hId", sysHospitalizationQuery.gethId());
        }
        if (sysHospitalizationQuery.gethArea() != 0) {
            criteria.andEqualTo("hArea", sysHospitalizationQuery.gethArea());
            ;
        }
        //筛选时间--在某个时间段内
        if (sysHospitalizationQuery.gethDate() != "") {
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
            Date dateBegin = null;
            Date dateEnd=null;
            try {
                dateBegin = sdf.parse(sysHospitalizationQuery.gethDate());
                dateEnd = sdf.parse(sysHospitalizationQuery.gethDate());
            } catch (ParseException e) {
                e.printStackTrace();
            }

            Calendar cal = Calendar.getInstance();
            cal.setTime(dateEnd);
            cal.add(Calendar.DATE, 1);
            criteria.andBetween("hDate",dateBegin,new Date());
        }
        return example;
    }
### 关于MyBatis插件及其使用 #### 插件概述 MyBatis 提供了一种强大的机制来扩展其功能——即通过插件(Interceptor)。这些插件可以拦截并修改执行器(Executor),参数处理器(ParameterHandler),结果集处理器(ResultHandler),以及语句处理器(StatementHandler)的行为。 #### 推荐的MyBatis插件及用途 1. **分页插件(PageHelper)** PageHelper 是一款非常流行的用于实现数据库查询分页操作的插件。它支持多种主流关系型数据库,如 MySQL, Oracle 等,并且能够自动计算总记录数、当前页码等信息[^3]。 使用方法如下所示: ```java // 导入依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>x.x.x</version> </dependency> // 配置文件中启用插件 <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"/> </plugins> // Java代码里调用 PageHelper.startPage(pageNum, pageSize); List<ExampleEntity> list = exampleMapper.selectByExample(example); ``` 2. **性能分析插件(Mybatis-LogPlugin 或者 MyBatis-Spring-Boot-Starter自带的日志配置)** 这类工具可以帮助开发者监控SQL语句的实际运行情况,包括但不限于耗时统计、慢查询报警等功能。对于优化应用性能有着重要意义[^4]。 3. **缓存插件(Ehcache/RedisCache)** 为了提高数据访问效率,减少不必要的磁盘I/O次数,在适当场景下引入二级缓存是非常必要的。Ehcache 和 Redis Cache 就是两个不错的选择,前者适合单机环境下的简单缓存需求;后者则更适用于分布式架构中的复杂业务逻辑处理[^5]。 ```xml <!-- Ehcache --> <cache name="exampleCache" maxEntriesLocalHeap="1000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120"/> <!-- Redis (假设已经正确设置了连接池和其他必要属性)--> @Cacheable(value = "users", key = "#id") public User getUserById(Integer id){ ... } ``` 4. **动态SQL生成器(Dynamic SQL Plugin by mybatis-dynamic-sql)** 此项目由官方团队维护,旨在简化复杂的条件拼接过程,让编写可变长度where子句变得更加容易。同时提供了更加安全的方式防止SQL注入攻击的发生[^6]。 ```java // 添加maven依赖 <dependency> <groupId>org.mybatis.dynamic.sql</groupId> <artifactId>mybatis-dynamic-sql</artifactId> <version>x.x.x</version> </dependency> // 创建表映射类 @Table(name = "person") public class PersonDynamicSqlSupport { public static final Person person = new Person(); } // 构建查询表达式 SelectDSLCompleter completer = SelectDSLCompleter.builder() .from(PersonDynamicSqlSupport.person) .build(); mapper.select(completer); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值