建设公司网站新闻素材管理烟台牟平住房建设局网站
news/
2025/9/22 23:17:31/
文章来源:
建设公司网站新闻素材管理,烟台牟平住房建设局网站,北京备案网站,做维修注册网站where标签 在上一节SQL 语句中加入了一个条件“11”#xff0c;如果没有加入这个条件#xff0c;那么可能就会变成下面这样一条错误的语句。
SELECT id,name,url,age,country FROM website AND name LIKE CONCAT(%,#{name},%)显然以上语句会出现 SQL 语法异常#xff0c;但…where标签 在上一节SQL 语句中加入了一个条件“11”如果没有加入这个条件那么可能就会变成下面这样一条错误的语句。
SELECT id,name,url,age,country FROM website AND name LIKE CONCAT(%,#{name},%)显然以上语句会出现 SQL 语法异常但加入“11”这样的条件又非常奇怪所以 MyBatis 提供了 where 标签。 where 标签主要用来简化 SQL 语句中的条件判断可以自动处理 AND/OR 条件语法如下
whereif test判断条件AND/OR .../if
/where
if 语句中判断条件为 true 时where 关键字才会加入到组装的 SQL 里面否则就不加入。where 会检索语句它会将 where 后的第一个 SQL 条件语句的 AND 或者 OR 关键词去掉。
示例
select idselectWebsite resultTypenet.cc.po.Websiteselect id,name,url from websitewhereif testname ! nullAND name like #{name}/ifif testurl! nullAND url like #{url}/if/where
/select
测试
public class Test {public static void main(String[] args) throws IOException {// 读取配置文件mybatis-config.xmlInputStream config Resources.getResourceAsStream(mybatis-config.xml); // 根据配置文件构建SqlSessionFactory ssf new SqlSessionFactoryBuilder().build(config);// 通过SqlSessionFactory创建SqlSessionSqlSession ss ssf.openSession();Website site new Website();site.setname(编程);ListWebsite siteList ss.selectList(net.cc.mapper.WebsiteMapper.selectWebsite, site);for (Website ws : siteList) {System.out.println(ws);}}
}
set标签
在 Mybatis 中update 语句可以使用 set 标签动态更新列。set 标签可以为 SQL 语句动态的添加 set 关键字剔除追加到条件末尾多余的逗号。
示例
?xml version1.0 encodingUTF-8?
!DOCTYPE mapper
PUBLIC -//mybatis.org//DTD Mapper 3.0//EN
http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacenet.cc.mapper.WebsiteMapperselect idselectWebsite resultTypenet.cc.po.WebsiteSELECT * FROM websitewhereif testid!null and id!id#{id}/if/where/select!--使用set元素动态修改一个网站记录 --update idupdateWebsiteparameterTypenet.cc.po.WebsiteUPDATE websitesetif testname!nullname#{name}/ifif testurl!nullurl#{url}/if/setWHERE id#{id}/update
/mapper
测试
public class Test {public static void main(String[] args) throws IOException {InputStream config Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory ssf new SqlSessionFactoryBuilder().build(config);SqlSession ss ssf.openSession();Website site new Website();site.setId(1);site.setUrl(www.cc.net);// 执行update语句前ListWebsite siteList ss.getMapper(WebsiteMapper.class).selectWebsite(site);for (Website st : siteList) {System.out.println(st);}int num ss.getMapper(WebsiteMapper.class).updateWebsite(site);System.out.println(影响数据库行数 num);// 执行update语句后ListWebsite siteList2 ss.getMapper(WebsiteMapper.class).selectWebsite(site);for (Website st : siteList2) {System.out.println(st);}ss.commit();ss.close();}
}
foreach标签
对于一些 SQL 语句中含有 in 条件需要迭代条件集合来生成的情况可以使用 foreach 来实现 SQL 条件的迭代。 Mybatis foreach 标签用于循环语句它很好的支持了数据和 List、set 接口的集合并对此提供遍历的功能。语法格式如下。
foreach itemitem indexindex collectionlist|array|map key open( separator, close)参数值
/foreach
foreach 标签主要有以下属性说明如下。
item表示集合中每一个元素进行迭代时的别名。index指定一个名字表示在迭代过程中每次迭代到的位置。open表示该语句以什么开始既然是 in 条件语句所以必然以(开始。separator表示在每次进行迭代之间以什么符号作为分隔符既然是 in 条件语句所以必然以,作为分隔符。close表示该语句以什么结束既然是 in 条件语句所以必然以)开始。 使用 foreach 标签时最关键、最容易出错的是 collection 属性该属性是必选的但在不同情况下该属性的值是不一样的主要有以下 3 种情况
如果传入的是单参数且参数类型是一个 Listcollection 属性值为 list。如果传入的是单参数且参数类型是一个 array 数组collection 的属性值为 array。如果传入的参数是多个需要把它们封装成一个 Map当然单参数也可以封装成 Map。Map 的 key 是参数名collection 属性值是传入的 List 或 array 对象在自己封装的 Map 中的 key。
示例
select idselectWebsiteparameterTypenet.cc.po.WebsiteresultTypenet.biancheng.po.WebsiteSELECT id,name,url,age,countryFROM website WHERE age inforeach itemage indexindex collectionlist open(separator, close)#{age}/foreach
/select 测试
public class Test {public static void main(String[] args) throws IOException {// 读取配置文件mybatis-config.xmlInputStream config Resources.getResourceAsStream(mybatis-config.xml); // 根据配置文件构建SqlSessionFactory ssf new SqlSessionFactoryBuilder().build(config);// 通过SqlSessionFactory创建SqlSessionSqlSession ss ssf.openSession();ListInteger ageList new ArrayListInteger();ageList.add(10);ageList.add(12);ListWebsite siteList ss.selectList(net.cc.mapper.WebsiteMapper.selectWebsite, ageList);for (Website ws : siteList) {System.out.println(ws);}}
}
在使用 foreach 标签时应提前预估一下 collection 对象的长度。因为大量数据的 in 语句会影响性能且还有一些数据库会限制执行的 SQL 语句长度。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910715.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!