mybatis.xml中有if判断条件判断参数不为空时,赋值为0的Integer参数被MyBatis判断为空,因此不执行<if test="param != null and param != ''"></if>的SQL. 所以在做项目时一定要注意,用到MyBatis时,避免用0来做值. 解决方法: <if test="status !=null and (status!='' or status == 0)"> AND t1.`…
MyBatis条件查询对字段判断是否为空一般为: <if test="testValue!=null and testValue != ''"> and test_value = #{testValue} </if> 如果传入参数为Integer类型且值为0时,会把0转为空串 源码真实情况是: MyBatis解析的所有sqlNode节点,针对if节点会交给IfSqlNode来处理,进过层层处理,最终都会调用OgnlOps.class类的doubleValue(O…
我们的项目中,有关于金额的计算,所以,一般在java环境中我们使用bigdecimal来做运算和存储金额信息.数据库sqlServer2008用的float类型 问题是,当我将金额赋值成0时,很意外的发现数据库存储的是null. 我的持久层框架用的mybatis. 在查阅了一翻资料后发现,原来是我在判断金额类型时,一个不规范的错误导致的,直接上代码. --有问题代码 PS我的maypper文件 <?xml version="1.0" encoding="UTF-8&qu…
原文地址:http://blog.csdn.net/isea533/article/details/44002219 深入了解MyBatis参数 相信很多人可能都遇到过下面这些异常: "Parameter 'xxx' not found. Available parameters are [...]" "Could not get property 'xxx' from xxxClass. Cause: "The expression 'xxx' evaluated…
MyBatis参数的传递有几种不同的方法,本文通过测试用例出发,对其中的方式进行总结和说明,并对其部分源码进行分析. 一.测试用例(环境参考之前博客SSM接口编程一文 http://www.cnblogs.com/gzy-blog/p/6052185.html) 1.1 没有注解,即dao层的代码如下: public User findById(int id); public User findByIdAndName1(int id, String name); public User find…
1.mybatis 参数为list时,校验list是否为空 2. mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * from table where id=? 然而${} 则是不能防止SQL注入打印出来的语句 select * from table where id=2 实实在在的参数. 最简单的区别就是${}解析穿过来的参数值不带单引号,#{}解析传过来参数带单引号. 最后总结一下必须使用$引用参数的情况,那就是参…
一.参数list时,先判断是否为空,否则会报错. 二.mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * from table where id=? 然而${} 则是不能防止SQL注入打印出来的语句 select * from table where id=2 实实在在的参数. 最简单的区别就是${}解析穿过来的参数值不带单引号,#{}解析传过来参数带单引号. 最后总结一下必须使用$引用参数的情况,那就是参数的int型…
最近在工作中遇到一个mybatis参数问题,主要是列表查询按照状态进行过滤,其中已完成状态值是0,被退回是1.如图所示 , 然后Mapper里面是和平常一样的写法<if test="status != null and status != ''>AND t1.status =#{status}</if>,发先现参数为1时过滤正常,参数为0时无法正常过滤,经过多次测试,终于找到了原因: mybatis的Integer类型参数如果有为0的可能,在if标签判断中还应该单独加入判…
问题-MyBatis不识别Integer值为0的数据 问题:使用MyBatis的过程中,发现一个值为0的数据,Mybatis所识别,最后定位才发现,是自己的写法有问题, <if test="form.passLine != null and  form.passLine != '' "> and is_live =  #{form.passLine,jdbcType=INTEGER} </if> 更正成: <span style="color:#…
之前写拷贝构造函数的时候,以为参数为引用,不为值传递,仅仅是为了减少一次内存拷贝.然而今天看到一篇文章发现自己对拷贝构造的参数理解有误. 参数为引用,不为值传递是为了防止拷贝构造函数的无限递归,最终导致栈溢出.     下面来看一个例子: class test { public: test() { cout << "constructor with argument\n"; } ~test() { } test(test& t) { cout << &q…
mybatis中 <if></if>标签中进行判断时,如果传入的时字符格式和数字进行判断需要将数字进行转译,否则默认是数字和数字进行比较,这是就会出现参数格式异常如<if test="department != 0 and department != null" > 中不对0进行转译就会出现这个错误可以将0用“”引起来,外面的“”改编成‘’或者将0变成‘0’.toString(),如下所示:(将0直接以‘’处理就会变成String格式和char格式进…
php 直接获取url参数赋值成变量.省去繁琐的获取参数,再一个个赋值 parse_url() 该函数可以解析 URL,返回其组成部分.它的用法如下: array parse_url(string $url) 此函数返回一个关联数组,包含现有 URL 的各种组成部分.如果缺少了其中的某一个,则不会为这个组成部分创建数组项.组成部分为: scheme - 如 http host - 如 localhost port - 如 80 user pass path - 如 /parse_str.php…
mybatis 参数为String,if test读取该参数代码: <select id="getMaxDepartId" parameterType="java.lang.String" resultType="java.lang.String">        SELECT MAX(DEPART_ID) FROM T_P_DEPART         <where>            <if test=&qu…
Mybatis参数预编译 一.数据库预编译介绍 1.数据库SQL语句编译特性: 数据库接受到sql语句之后,需要词法和语义解析,优化sql语句,制定执行计划.这需要花费一些时间.但是很多情况,我们的一条sql语句可能会反复执行,或者每次执行的时候只有个别的值不同(比如query的where子句值不同,update的set子句值不同,insert的values值不同). 2.减少编译的方法 如果每次都需要经过上面的词法语义解析.语句优化.制定执行计划等,则效率就明显不行了.为了解决上面的问题,于是…
一.参数list时,先判断是否为空,否则会报错. 二.mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * from table where id=? 然而${} 则是不能防止SQL注入打印出来的语句 select * from table where id=2 实实在在的参数. 最简单的区别就是${}解析穿过来的参数值不带单引号,#{}解析传过来参数带单引号. 最后总结一下必须使用$引用参数的情况,那就是参数的int型…
参考:http://blog.csdn.net/beyondhaven/article/details/4204345 参考:http://blog.csdn.net/joeblackzqq/article/details/7460704 1.函数模板的声明和模板函数的生成 1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数. 函数模板的声明形式为: template<typename 数据类型…
①数据库与php连接   图表 header("content-type:text/html;charset=utf-8"); //第一种方式: //1,生成连接,连接到数据库上的服务器 // localhost:主机位置,如果是网络上的要写Ip地址 // root:服务器管理员 ”123“ 密码 @$test=mysql_connect("localhost","root","123"); //2,选择数据库 mysql_s…
python中将函数赋值给变量时需要注意的一些问题 变量赋值是我们在日常开发中经常会遇到的一个问题,本文主要给大家介绍的是关于python将函数赋值给变量时需要注意的一些问题,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 见过两种函数赋值给变量的形式,一种是 a=f 另一种是     a=f() 这两种形式是有区别的,分别总结一下. 1.a=f型属于将变量指向函数. 用代码验证一下:     >>> f = abs >>> f(-10) 10 说明变量…
fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题. 先记下这个坑,改天在看看是怎么导致的,暂时通过避免使用Integer作为键(使用String)避免中文乱码问题.…
通过uni-app中当uni.navigateTo传的参数为object时,通过传递的不同参数,在显示单页面内通过v-if判断显示出对应的内容(可实现多页面效果) 起始页跳转到对应页面,并传递参数(object),如下图所示: <template> <div> <div class="item" v-for="(item,index) in className" :key="index" @click="n…
mybatis对传入参数进行判断时,会使用if标签, 一般是判断不为null和'', 如下: <if test="name != null and 那么 != ''"> name =#{name,jdbcType=VARCHAR}, </if> 1. String类型是符合的,但是如果是Integer类型的话,如果变量的值是0,即 num = 0, mybatis在进行 num != '' 的时候会认为  num 的值是空字符串, 即 num == '' 为tr…
Spring整合Mybatis调用 public boolean editItemSales(int i_id, int i_sales) { Map<String, Object> map = new HashMap<String, Object>(); map.put("i_id", i_id); map.put("i_sales", i_sales); try{ super.getSqlSession().update("co…
单个参数:myBatis不会做特殊处理 #{参数名}: 取出参数值 多个参数: myBatis会做特殊处理 多个参数会被封装成一个MAP key:param1 param2.... param10,或者参数的索引也可以 value: 使我们传入的参数的值 异常: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [arg1, arg0, param1, pa…
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性…
需求是查询级别为0的用户 User对象里的level字段的值为0,查询时居然没有查到为level为0的用户. <select id="selectSelective" parameterType="com.agri.entity.User" resultMap="map"> select * from sys_user where del_flag = 1 <if test="level != null and lev…
1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后,在每个测试方法中,就不必再编写这些代码,最终,在执行测试方法之前,会自动调用添加了@Before注解的方法,在执行测试方法之后,会自动调用添加了@After注解的方法: private AbstractApplicationContext ac; private UserMapper userMap…
1. sql语句如下: SELECT * FROM tb_crm_user WHERE id = #{userId, jdbcType=INTEGER} AND user_name = #{userName, jdbcType=VARCHAR} 2. 接口如下: TbCrmUser queryTbCrmUser(int userId, String userName); 3. 调用接口方式如下: int userId = 1000059081;String userName = "积极"…
单个参数:mybatis不会做特殊处理 取值方式:#{参数名} 这里参数名不必与方法的形参名称一致,可以用任意参数名来接受实参 例子:方法:update(Integer id) sql映射文件取值#{a},这样也可以取到值 多个参数:mybatis会做特殊处理,即把多个参数封装成一个map ,key:param1....paramN,value:传入的参数值,#{}就是就是从map中获取指定的key的value,即#{param1},#{param2}等 多个参数处理:自定义封装参数的key 方…
参考:github,   https://github.com/liuxiaochen0625/MyBatis-Spring-Boot-master.git 从controller组装tk.mybatis.mapper.entity.Example 对象,操作起来较为麻烦,不符合我们日常书写习惯,因而改造一下. 调用方法: WhereBuilder builder = new WhereBuilder(UserInfo.class); Example example = builder.and(…
传入集合list // 账户类型包括门店和分公司 List<Object> scopeList = new ArrayList<Object>(); scopeList.add(UserConstants.UserScope.STORE); scopeList.add(UserConstants.UserScope.BRANCH_COMPANY); params.put("scopeList", scopeList); PageResult<UserDto…