首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java EE之SSM框架整合开发 -- (8) MyBatis动态SQL

要构造动态sql语句为了防止sql语句结构不当,所以加上where 1=1 ,这样SQL语句不会报错,后面的逻辑很简单,判断#{usex}不为空且不为""时候在后面添加SQL。...= null">usex=#{usex} where uid = #{uid} 在 元素uname不为SQL语句自动加上...在使用,最关键也是最容易出错是collection属性属性是必选,但在不同情况下,属性值是不一样,主要有以下3种情况: 如果传入是单参数且参数类型是一个List时候...如果传入是单参数且参数类型是一个array数组时候,collection属性值为array。 如果传入参数是多个,需要把它们封装成一个Map,当然单参数可以封装成Map。...大家有不懂可以公众号留言,可以看看公共号其他相关文章,最近都是有关Mybatis框架知识,希望对您有所帮助,本系列教程所有源码见下面地址。

1.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

【框架】117:mybatis之动态sql

四、动态sql之set语句 案例:修改用户信息,如果参数user某个属性null,则不修改。 我们如果使用常规修改属性方法: ?...方法就有一个问题,我们传递参数user,只设置了username属性,其它都为空。 这样的话,数据库其它属性变成null了。 如何有选择性修改?...①案例分析 普通修改等于是将user每一个属性都做出了修改,所以为null属性也就修改成了null。 要解决这个问题,动态拼接sql判断即可。...②动态sql编写 在set标签,使用if语句优先做一个判断,如果不为空,才完成sql拼接,才修改属性。 代码编写完毕,做一个测试: ?...使用set-if标签,修改数据就会发现只修改参数不为属性了,其它属性不变。 五、动态sql之foreach语句 案例:根据多个id查询对应用户 ?

68020

MyBatis——动态SQL总结

choose中所有when条件都不满则,则执行otherwisesql。...= null and gender.length()>0″> AND gender=#{gender}    假如说name和gender值都不为null的话打印SQL为:select...prefix意义如上:   suffixoverride:去掉最后一个逗号(可以是其他标记,就像是上面前缀and一样)   suffix:后缀 (6)foreach 标签 foreach主要用在构建...item表示集合每一个元素进行迭代别名; index指定一个名字,用于表示在迭代过程,每次迭代到位置; open表示语句以什么开始; separator表示在每次进行迭代之间以什么符号作为分隔符...; close表示以什么结束; 在使用foreach时候最关键也是最容易出错就是 collection 属性属性是必须指定,但是在不同情况下,属性值是不一样,主要有一下3种情况:

63310

Java开发手册之 ORM映射

说明:参见定义POJO类以及数据库字段定义规定,在增加映射,是必须。在MyBatis Generator生成代码,需要进行对应修改。...【强制】不要用resultClass返回参数,即使所有类属性名与数据库字段一一对应,需要定义;反过来,每一个表必然有一个与之对应。 说明:配置映射关系,使字段与DO类解耦,方便维护。...说明:resultClass=”Hashtable”,会置入字段名和属性值,但是值类型不可控。 【强制】更新数据表记录,必须同时更新记录对应gmt_modified字段值为当前时间。...执行SQL ,不要更新无改动字段,一是易出错;二是效率低;三是增加binlog存储。 【参考】@Transactional事务不要滥用。...【参考】compareValue是与属性值对比常量,一般是数字,表示相等带上此条件;表示不为空且不为null执行;表示不为null执行。

23810

Java开发手册之 ORM映射

【强制】POJO类布尔属性不能加is,而数据库字段必须加is_,要求在resultMap中进行字段与属性之间映射。...说明:参见定义POJO类以及数据库字段定义规定,在增加映射,是必须。在MyBatis Generator生成代码,需要进行对应修改。...【强制】不要用resultClass返回参数,即使所有类属性名与数据库字段一一对应,需要定义;反过来,每一个表必然有一个与之对应。 说明:配置映射关系,使字段与DO类解耦,方便维护。...执行SQL ,不要更新无改动字段,一是易出错;二是效率低;三是增加binlog存储。 【参考】@Transactional事务不要滥用。...【参考】compareValue是与属性值对比常量,一般是数字,表示相等带上此条件;表示不为空且不为null执行;表示不为null执行。

68920

Controller注解

defaultValue:默认参数值,如果设置了值,required=true将失效,自动为false,如果没有传参数,就使用默认值 注意:required=false参数类型必须是对象,value...不可省略 @RequestBody 作用:主要用来接收前端传递给后端json字符串数据(请求体数据) 可以在实体类字段上加 @JsonAlias实现:json转模型,使json特定key...能转化为特定模型属性;但是模型转json,对应转换后key仍然与属性名一致 @JsonProperty注解,实现:json转模型,使json特定key能转化为指定模型属性;同样,模型转...json,对应转换后key为指定key @Valid 作用:用于验证注解是否符合要求 限制 说明 @Null 限制只能为null @NotNull 限制必须不为null @AssertFalse...0) @NotBlank 验证注解元素值不为null不为空(字符串长度不为0、集合大小不为0) @Email 验证注解元素值是Email,可以通过正则表达式和flag指定自定义email格式

53310

读 zepto 源码之工具函数

extend 函数用 for···in 对 source 属性进行遍历 如果 deep 为 false ,只进行浅复制,将 source 不为 undefined 值赋值到 target 对应属性...如果 source 属性为数组,并且 target 对应属性不为数组,将 target 对应属性设置为空数组 3.3....为类数组,用 for 循环,为对象,用 for···in 循环。...并且将对应元素(属性值)及索引(属性名)传递给回调函数,如果回调函数返回值不为 null 或者 undefined ,则将返回值存入新数组,最后将新数组扁平化后返回。...传进来参数不为数值或如'123'这样形式字符串,都会转换成NaN) 为有限数值 传进来参数为字符串形式,如'123' ,会用到下面这个条件来确保字符串为数字形式,而不是如 123abc

79300

MyBatis学习总结(三)——多表关联查询与动态SQL

此外,如果标签返回内容是以AND 或OR 开头,则它会剔除掉。 2.4、if+set设置值 update语句中没有使用if标签,如果有一个参数为null,都会导致错误。...-- 在这里还可以引用其他 sql 片段 --> 注意:①、最好基于 单表来定义 sql 片段,提高片段可重用性      ②、在 sql 片段不要包括...foreach元素属性主要有:item,index,collection,open,separator,close。 下面对属性进行简单介绍: item:表示集合每一个元素进行迭代别名。...2.如果传入是单独参数数组,collection属性值为array。 3.如果传入多个参数,我们把多个参数放入map,单参数可以放入map。...--根据roleId获取用户列表: 数据库字段信息与对象属性不一致需要通过resultMap来映射 --> <!

7.8K31

Mybatis系列第十讲 动态SQL,这么多种你都会?

=null"> AND age = #{age} 上面查询用户列表,参数为一个map,mapid不为时候,将其作为条件查询,如果name不为空...,将name作为条件,如果age不为空,将age作为条件进行查询 只传入id时候,sql如下: SELECT id,name,age FROM t_user WHERE 1 = 1 AND id...符号,mybatis已经考虑到这种问题了,属于通用性问题,mybatis通过where 元素来解决,使用where元素时候,mybatis会将where内部拼接sql进行处理,会将这部分sql...set元素 现在我们想通过用户id更新用户信息,参数为UserModel对象,对象属性如果不为空,就进行更新,我们可以这么写: AND id = #{id} 我们来看一下,所有属性都传值了,sql变成了下面这样:

58221

第33次文章:SORM框架(三)

3.插入操作 下面我们介绍一下插入操作insert方法,源码如下: /** * 将一个对象存储到数据库 * 把对象不为null属性往数据库存储!如果数字为null则放0....null属性值 List params = new ArrayList();//存储sql参数对象 //获取所有不为属性 Field[]...} tips:在插入一个对象时候,对象就代表着表格一行记录。...我们首先需要知道此对象,各个属性值,也就是我们需要向sql语句中传递参数列表,所以需要将对象不为null属性值获取出来,然后对属性名称拼接sql字符串,最后调用excuteDML方法,向方法传入拼接好...我们首先根据需要删除对象,获取表主键,因为在删除,我们只有根据主键值来作为根据,才不会误删其他记录。

99220

MyBatis:映射配置文件

如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接要确保不能忘记添加必要空格,还要注意去掉列表最后一个列名逗号。...test 属性联合使用: SQL语句 普通 Sql 对于只有一个参数,后面的 #{param} 表示占位符,里面的 param 可以为任意值,对于多个参数则须写清对应... where id=#{id} suffix:后缀 suffixoverride:去掉最后一个逗号(可以是其他标记...通常处理 Sql in 语句。...使用可迭代对象或者数组,index 是当前迭代序号,item 值是本次迭代获取到元素。使用 Map 对象(或者 Map.Entry 对象集合),index 是键,item 是值。

85010

空字符串使用Equals方法导致NullPointException

前言 今天在处理线上问题发现一个空指针问题:从数据库查询出一个实体对象Model,获取对象某个String类型字段去和某值使用Stringequals方法对比,根据异常提示代码行号,下意识断定是由于原作者从数据库查询未做...Model判空校验且后续代码中使用ModelGetter()导致,经过排查SQL日志发现Model并不为空,为空Model其中一个属性属性在后续代码中使用了equals()方法导致NullPointException..., 24, 1d); //假设取出数据Name字段为null boolean notEmpty = employee.getName().equals("Ltx");...System.out.println("是否为空:" + notEmpty); } } 执行结果 原因 equals方法前一定不允许有Null,因为null不是对象,不能使用equals...在使用equlas方法,一定要将确信不为值放equals方法前,如在使用枚举值对比,一般都将枚举值放前边。

33030

Mybatis Mapper.xml使用总结

=null and idParam gt 0"> 3.判断List是否不为空 "#{}和${}"区别 "#{}"将传入数据都当成一个字符串,会对自动传入数据加一个双引号。可以有效防止sql注入。...在使用时不需要关心参数值类型,mybatis会自动进行java类型和jdbc类型转换。 "#{}"可以接收简单类型值或pojo属性值,如果传入简单类型值,#{}括号可以是任意名称。 <!...{}可以接收简单类型值或pojo属性值,如果传入简单类型值,${}括号名称只能是value。方式无法防止Sql注入。 <!...●item:表示集合每一个元素进行迭代别名, ●index:指 定一个名字,用于表示在迭代过程,每次迭代到位置, ●open:表示语句以什么开始, ●separator:表示在每次进行迭代之间以什么符号作为分隔

1.9K40

Mybatis系列第10篇:动态SQL,这么多种你都会?

mybatis中一个比较强大功能就是动态sql,记得在刚开始工作那会,当时使用jdbc开发系统,在java代码搞了很多判断去拼接sql,代码看起来比较乱,不方便维护和扩展。...=null"> AND age = #{age} 上面查询用户列表,参数为一个map,mapid不为时候,将其作为条件查询,如果name...不为空,将name作为条件,如果age不为空,将age作为条件进行查询 只传入id时候,sql如下: SELECT id,name,age FROM t_user WHERE 1 = 1 AND...set元素 现在我们想通过用户id更新用户信息,参数为UserModel对象,对象属性如果不为空,就进行更新,我们可以这么写: AND id = #{id} 我们来看一下,所有属性都传值了,sql变成了下面这样:

1.1K30
领券