首页
学习
活动
专区
工具
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

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

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

99220

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

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

Hibernate Session总结

程序执行 Transaction commit() 方法方法会先 flush(),然后再提交事务 持久化对象状态 临时对象 ID 通常为 null 不处于 Session 缓存 在数据库没有对应记录...持久化对象 ID 不为 null 位于 Session 缓存 持久化对象和数据库相关记录对应 Session 在 flush 缓存,会根据持久化对象属性变化,来同步更新数据库 同一个 Session...实例缓存,数据库表每条记录对应唯一持久化对象 删除对象 数据库没有其 ID 对应记录 不再处于 Session 缓存 一般情况下应用程序不再使用对象 游离对象 ID 不为 null...从数据库中加载一个持久化对象,数据库没有对应 id 对象,get() 方法返回 null,load() 方法抛出一个异常 load() 有延迟加载策略,即执行方法后返回一个代理对象,直到用到对象时候才会持久化... update() 方法关联一个游离对象, 如果在 Session 缓存已经存在相同 OID 持久化对象, 会抛出异常 delete() delete() 方法既可以删除一个游离对象,可以删除一个持久化对象

36760
领券