2020-03-10(数据库语句中将时间转日期,mybatis查询中对于一些不生效的符号处理)

今天主要做了后台任务,写了四个接口及单元测试

1、资讯列表分页查询接口 (100%)
2、根据资讯id删除资讯接口 (100%)
3、资讯上/下架状态改变接口 (100%)
4、资讯的分类列表查询接口 (100%)

遇到的问题:

1、查询条件比较日期的时候,需要将数据库中存的时间格式转为日期形式比较Date。网上看到的比较常用的函数是

DATE_FORMAT(date,format),比较灵活,可以将datetime类型的时间转为各种形式,但是我这边只需要比较日期,所以直接用了DATE()函数。
             <if test="activityName != null and activityName !='' ">
			    and r.activity_name like concat('%', #{activityName}, '%')
			</if>
			<if test="startTime != null and startTime != '' ">
				<![CDATA[ and DATE(r.start_time) >= #{startTime} ]]>
			</if>
			<if test="endTime != null and endTime != '' ">
				<![CDATA[ and DATE(r.end_time) <= #{endTime} ]]>
			</if>

2、在mybatis中的语法中,比较大于等于,或者小于等于的时候,会把>,<解析为一个标签,所以会出现问题。因此在外层需要加上一个括号包这这行查询条件:<![CDATA[ ]]>

<![CDATA[ and DATE(r.end_time) <= #{endTime} ]]>

 

3、在查询一个分类的数据的时候,我是以为需要构造一个树形Tree结构的数据返回给前端,开发经理说暂时不用。然后我还是去了解了下递归查询树形结构数据的大概过程。

附上链接:https://blog.youkuaiyun.com/qq_42570879/article/details/90386962

 

今天的收获就这些,坚持每天总结。

MyBatis拦截器中,如果你想要在执行UPDATE语句之前将其换为SELECT语句并动态绑定参数,通常会涉及到对Mapper XML文件或动态SQL的修改。以下是一个基本的步骤: 1. **创建拦截器**:首先,你需要创建一个自定义的Interceptor,并实现`org.apache.ibatis.session.interceptor.Interceptor`接口。在拦截器中,你可以定义before、after等方法,其中before方法会在每个SQL语句执行前被调用。 ```java public class DynamicQueryInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { // 获取原SQL语句和参数 SqlCommand command = (SqlCommand)invocation.getArgs()[0]; if (command instanceof UpdateCommand) { // 判断是否为UPDATE语句 UpdateCommand updateCmd = (UpdateCommand)command; String selectSql = buildSelectSql(updateCmd); // 构造SELECT语句 command = new SelectCommand(selectSql, updateCmd.getParameters()); // 创建新的SelectCommand // 将新的命令替换原命令 invocation.setArgs(new Object[]{command}); } return invocation.proceed(); // 调用原方法继续执行 } private String buildSelectSql(UpdateCommand updateCmd) { // 根据UPDATE语句构建SELECT语句,这里只是一个示例,实际需要根据业务逻辑填充 return "SELECT * FROM your_table WHERE id = #{id}"; // 假设updateCmd有id参数 } } ``` 2. **配置拦截器**:在MyBatis的配置文件`mybatis-config.xml`或通过注解的方式,注册你的自定义拦截器: ```xml <interceptors> <interceptor class="com.example.DynamicQueryInterceptor"/> </interceptors> <!-- 或者使用注解 --> @Intercepts({@Signature(type=Statement.class, method="execute", args={SqlSession.class, SqlCommand.class})}) public class DynamicQueryInterceptor... ``` 3. **应用拦截器**:确保拦截器在运行时生效,比如在事务开始时注册它,或者在整个会话期间启用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值