浅谈mybatis中SQL语句给boolean类型赋值问题
我就废话不多说了,大家还是直接看代码吧~
<select id="getBiTree" parameterType="String" resultMap="MenuVoListMap"> SELECT m.menu_id , m.parent_id , m.`name` , 1 opens FROM menu m WHERE m.is_valid = 1 AND (m.type = 0 or m.type = 1) and m.menu_id IN (${menuId}) </select>
其中 opens是boolean类型,在这里将他的值赋值为1,即为true
<result property="open" column="opens"/> 这里的opens和上面的opens对应
补充知识:mybatis中当查询条件有Boolean类型的时候,为false时查询无效
eg:
<if test="isOk != null and isOk !=''"> and is_ok = #{isOk} </if>
此时当isOk为false时,并未查询出is_ok对应的结果来
找原因:
直接到数据库使用脚本查询
select * from table
where is_ok = false
此时能查出is_ok为0的数据
select * from table where is_ok = true
此时能查出is_ok为1的数据
此时定位问题是否在
<if test="isOk != null and isOk !=''">
通过排查去掉and isOk!='',可以正确的查出
所以正确的查询结构是:
<if test="isOk != null"> and is_ok = #{isOk} </if>
经研究:
mybatis的if判断里面最好不要使用boolean值:
mybatis会默认把空值转为false。所以如果遇见前面传空值,这个字段在mybatis里面永远就是false了,可以使用数字类型代替,但是不要使用0作为参数。
以上这篇浅谈mybatis中SQL语句给boolean类型赋值问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
MyBatis查询结果resultType返回值类型的说明
一.返回一般数据类型 比如要根据 id 属性获得数据库中的某个字段值. mapper 接口: // 根据 id 获得数据库中的 username 字段的值 String getEmpNameById(Integer id); SQL 映射文件: <!-- 指定 resultType 返回值类型时 String 类型的, string 在这里是一个别名,代表的是 java.lang.String 对于引用数据类型,都是将大写字母转小写,比如 HashMap 对应的别名是 'hashmap' 基本数
-
解决MyBatis返回结果类型为Boolean的问题
问题描述: 在使用MyBatis时,有时需要检查某个记录是否存在数据库中,然后根据其返回的布尔值true or false,来进行逻辑判断.那怎么做呢? 解决方案: 如检测某个手机号是否被注册过: <select id="checkPhoneExist" parameterType="java.lang.String" resultType="java.lang.Boolean"> <![CDATA[ select count(
-
解决mybatis返回boolean值时数据库返回null的问题
常规情况,我们使用数据库判断 true or false.所写的语句是select count(id) from 表名: 这种常用情况下,只有当查询语句查到数据 且 只有一条时才会返回 true; 还有一种情况,就是数据库中返回判断句,比如 返回的对错将以1或0表示: 但是当返回值为null,或者多个值的时候 会怎么样呢,0 1 还是报错? 测试表示这种情况下会报错: 希望大家使用 boolean 返回时 也能格外小心. 这里简单做了更改方法,可能不是最优化的,有更好的意见还请不吝赐教. 补充知
-
浅谈mybatis中SQL语句给boolean类型赋值问题
我就废话不多说了,大家还是直接看代码吧~ <select id="getBiTree" parameterType="String" resultMap="MenuVoListMap"> SELECT m.menu_id , m.parent_id , m.`name` , 1 opens FROM menu m WHERE m.is_valid = 1 AND (m.type = 0 or m.type = 1) and m.men
-
浅谈mybatis中的#和$的区别 以及防止sql注入的方法
mybatis中的#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的
-
浅谈mybatis中的#和$的区别
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为ord
-
浅谈myBatis中的插件机制
插件的配置与使用 在mybatis-config.xml配置文件中配置plugin结点,比如配置一个自定义的日志插件LogInterceptor和一个开源的分页插件PageInterceptor: <plugins> <plugin interceptor="com.crx.plugindemo.LogInterceptor"></plugin> <plugin interceptor="com.github.pagehelper.P
-
浅谈MyBatis执行SQL的两种方式
目录 前言 准备接口和Mapper配置文件: 使用SqlSession 发送 SQL 使用 Mapper 接口发送 SQL 比较两种发送 SQL 方式 前言 本文介绍MyBatis执行SQL语句的2种方式:SqlSession和Mapper接口以及它们的区别. 准备接口和Mapper配置文件: 定义UserMapper接口: package cn.cvs.dao; import cn.cvs.pojo.User; import java.util.List; public interface U
-
浅谈Mybatis中resultType为hashmap的情况
现在有一张user表 id ,name,age 我们进行一个简单的查询: <select id="test" resultType="Uer"> select id ,name,age from user </select> 查询完后,怎么去接收这个查询结果呢,通常在这个mapper.xml对应的接口中使用List<User>做为返回值去接收,最后存储的样子就是下面的图 这是一个很简单的单表查询操作,其实这种简单的单表查询操作不需
-
Oracle在Mybatis中SQL语句的配置方法
数据库中有下划线的字段在实体中应采用驼峰命名法,如P_NAME对应pName,实例如下: 1.XML文件中SQL语句配置(Geteway.xml文件) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-m
-
Mybatis中 SQL语句复用
mapper.xml 中共用 mapper.xml 间共用 项目中也许我们会遇到一段sql语句被多个查询.增加等语句用到的情况,如何去偷懒呢,复用sql无疑是较好的选择 这里只提供简单的示范: 如果只是单表查询,并且希望共用的sql只会出现在同一个mapper.xml文件中,那么我们可以直接在 <mapper namespace="XXXXX"></mapper> 中写下面的业务代码 <sql id="unitSql"> a.us
-
浅谈tensorflow中张量的提取值和赋值
tf.gather和gather_nd从params中收集数值,tf.scatter_nd 和 tf.scatter_nd_update用updates更新某一张量.严格上说,tf.gather_nd和tf.scatter_nd_update互为逆操作. 已知数值的位置,从张量中提取数值:tf.gather, tf.gather_nd tf.gather indices每个元素(标量)是params某个axis的索引,tf.gather_nd 中indices最后一个阶对应于索引值. tf.ga
-
浅谈vue中computed属性对data属性赋值为undefined的原因
目录 场景: 原因: _init中初始化 _init中做了什么? 在initState()做了这些事情 解决办法: 场景: 我在computed中return了一个值,然后在data中直接将它复制给另一个属性.结果data中的属性值为undefined… 代码示例: timer为undefined… 原因: 在这里很容易想到是执行顺序的问题,computed中的属性和data中的属性最终都会加载到app这个实例下.如果data中的实例属性被创建完成的时候,computed中的实例属性还没被创建,
随机推荐
- 学习ExtJS Panel常用方法
- python中模块的__all__属性详解
- fckeditor在ie9中无法弹出对话框的解决方法(弹出层兼容问题)
- node.js中的fs.readlinkSync方法使用说明
- 驱除威胁—无线网络防黑完全攻略
- oracle12c安装报错:PRVF-0002的解决方法
- React-Native做一个文本输入框组件的实现代码
- asp.net DataSet进行排序
- Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)
- Python编程实现控制cmd命令行显示颜色的方法示例
- C++对象的浅复制和深复制详解及简单实例
- 在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
- jquery.artwl.thickbox.js 一个非常简单好用的jQuery弹出层插件
- java实现合并两个已经排序的列表实例代码
- 微信小程序 progress组件详解及实例代码
- flexigrid 参数说明
- springboot前后台数据交互的示例代码
- JS块级作用域和私有变量实例分析
- Java 实现多线程切换等待唤醒交替打印奇偶数
- JS实现动态添加外部js、css到head标签的方法