请教大牛,sqlsql查询语句实例里面如何写if条件

Mybatis中动态SQL多条件查询
mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件。
choose(when otherwise)相当于Java中的switch语句,通常when和otherwise一起使用。
where:简化SQL语句中的where条件。
set 解决SQL语句中跟新语句
我们课已通过几个例子来看一下这几个元素的运用场景:
&select id="queryEmp" &resultType="cn.test.entity.Emp"&
&&&&&&&&&&select * from emp where 1=1
&&&&&&&&&&&if test="deptNo!=null"&
&&&&&&&&&&and deptno=#{deptNO}
&&&&&&&&&&&/if&
&&&&&&&&&&&if test="deptName!=null"&
&&&&&&&&&&and deptno=#{deptName}
&&&&&&&&&&&/if&
&&&&&&&&&&&/select&
注:&if test="deptNo!=null"&中 的deptNo是指实体类中的属性或字段;
&select id="queryEmp" &resultType="cn.test.entity.Emp"&
&&&&&&&&&&select * from emp where 1=1
&&&&&&&&&&&choose&
&&&&&&&&&&&when test="deptNo!=null"&
&&&&&&&&&&and deptno=#{deptNo}
&&&&&&&&&&&/when&
&&&&&&&&&&&when test="deptName!=null"&
&&&&&&&&&&and deptname=#{deptName}
&&&&&&&&&&&/when&
&&&&&&&&&&&otherwise&
&&&&&&&&&&and personnum&#{personNum}
&&&&&&&&&&&/otherwise&
&&&&&&&&&&&/choose&
&&&&&&&&&&&/select&
注:上面也说了,choose相当于Java中的switch语句;当第一个when满足时;就只执行第一个when中的条件。当when中的条件都不满足时;就会执行默认的的;也就是otherwise中的语句。
&select id="queryEmp" &resultType="cn.test.entity.Emp"&
&&&&&&&&&&select * from emp
&&&&&&&&&&&where&
&&&&&&&&&&&if test="deptNo!=null"&
&&&&&&&&&&and deptno=#{deptNO}
&&&&&&&&&&&/if&
&&&&&&&&&&&if test="deptName!=null"&
&&&&&&&&&&and deptno=#{deptName}
&&&&&&&&&&&/if&
&&&&&&&&&&&/where&
&&&&&&&&&&&/select&
注: where下面第一个if语句中以and开头,也可以省略第一个and ,如果第一个if语句中有and;mybatis会将第一个and忽略。
&update id="updateEmp" parameterType="cn.test.entity.Emp" flushCache="true"&
&&&&&&&&&&update emp
&&&&&&&&&&&set&
&&&&&&&&&&&if test="empName!=null"&empname=#{empName},&/if&
&&&&&&&&&&&if test="job!=null"&job=#{job}&/if&
&&&&&&&&&&&/set&
&&&&&&&&&&where empno=#{empNo}
&&&&&&&&&&&/update&
注: &在mybatis中的SQL语句结尾不能加“;”,这样会导致mybatis无法识别字符;导致SQL语句的语法错误;出现 java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符的错误。的异常。
动态SQL语句***
1)&if& 习惯按null来判断
a.&WHERE 1=1 b&where&去掉开头的and或者or
3)set,去掉最后的逗号,没有就不管
4)foreach 遍历,collection数组类型,item当前循环的实例,open开头的字符串,close结尾的字符串,separator分隔符。最常用用在in子查询串
&foreach collection="array" item="id" open="(" close=")" separator=","&
阅读(...) 评论()求 sql 大牛问题!_百度知道
求 sql 大牛问题!
首先我有一张用户表,表里有一个字段区分是管理员、教职工、学员好的用户表表述完毕然后我有一张班级表,班级学员表class_id、user_id班级表id不用多说用户表user_id指的是用户中类型...
首先我有一张用户表,表里有一个字段区分是管理员、教职工、学员
好的用户表表述完毕然后我有一张班级表,班级学员表
class_id、user_id
班级表id不用多说 用户表user_id指的是用户中类型为学员的用户班级职工表 class_id、user_id 班级表id不用多说 用户表user_id指的是用户中类型为教职工的用户截至表结构表述完成好的重点来了 如何用一个sql语句 查询出班级中所有的 学员和教职工 信息(注明:学员不可能是教职工)目前只有这点分
所有都当悬赏了
mysql数据库
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自知道合伙人认证行家
软件应用类行家
采纳数:4019
获赞数:7115
15年数据库维护及数据库应用系统开发经验,从事零售业、服务业及财务管理类系统开发与维护。
select&*&from&用户表&where&user_id&in&(select&user_id&from&班级学员表&where&class_id&=&班级编号)or&user_id&in&(select&user_id&from&班级职工表&where&class_id&=&班级编号);
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。51CTO旗下网站
零基础Python数据库怎么学?大牛带你扬帆起航
因为做数据分析特别是当你的数据量非常大时候或者后端开发的时候,肯定是要用数据库的,所以学好数据库非常有必要。好接下来几篇,我将给大家介绍一下Python在数据库里面的使用,小伙伴们,我们快开始吧~~
作者:菜鸟学Python来源:| 10:23
前面写了几篇关于数据分析的文章,用爬虫爬取了全网6500多只基金的作数据分析,算是数据分析篇开了个头。当时留下了几个问题,其中一个问题就是我们的数据存储用的是文件,其实正宗的做法就是用数据库存储。因为做数据分析特别是当你的数据量非常大时候或者后端开发的时候,肯定是要用数据库的,所以学好数据库非常有必要。好接下来几篇,我将给大家介绍一下Python在数据库里面的使用,小伙伴们,我们快开始吧~~
数据库的分类
Python如何操作数据库
数据库环境的搭建
数据库可视化的工具
实例写一个小的数据库
1.数据库的分类
关系数据库和非关系数据库
1).什么是关系数据库
关系型数据库,是指采用了关系模型来组织数据的数据库,简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。象银行系统会大量的用关系数据库.比如大家经常用的MySQL就是典型的关系数据库.
容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
使用方便:通用的SQL语言使得操作关系型数据库非常方便
易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率
2).什么是非关系数据库
关系数据库虽然很好,但是随着互联网大规模的爆发,弱点也越来越明显,比如事务的一致性,多表联查,高并发等等瓶颈很明显。
于是NoSQL一词横空出世,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。比如MongoDb就是典型的NoSQL型数据库(键值对大家想到了什么,对json格式).
写到这里让我想起了当年的IP和ATM技术之争,其实没有那个技术能称王称霸数年,独领风骚只是一时而已,顺势而为才是王道.技术没有最好,只有最适合时代而已.
2.Python如何操作数据库
市面上现在主流的数据库有Oracle,MySQL,Mongodb,Redis,SQLite,SQL
Server等等,有同学会问这么多数据库,我的代码怎么移植啊,放心Python有一个标准数据库接口为DB-API,Python
DB-API为开发人员提供了数据库应用编程接口,也就是说使用它连接各数据库后,就可以用相同的方式操作各数据库。
Python DB-API使用流程也非常简单:
a).引入 API 模块
b).获取与数据库的连接
c).执行相关的语句进行查询,搜索和存储过程
d).关闭数据库连接
写到这里,我突然想起来一个故事(把大象放进冰箱),三步搞定,哈哈
3.数据库环境的搭建,SQLite起步
明白了上面的道理之后,小伙伴肯定会迫不及待的动手操练起来,马上就要开启数据库之旅,我们还是选择从简单的开始,先从SQLite开始学习使用,为啥要选SQLite呢,数据库的学习看似复杂,其实就是一层纸,越过这个障碍,再学其他的数据库都非常容易的.
SQLite是一个非常简单,免费,快速而强大的小型数据库(麻雀虽小五脏俱全),不需要复杂的安装和管理,轻轻松松使用,非常适合小白入门.而且在linux和Mac上都自带SQLite3,是不是很爽啊.
(win的同学肯定不乐意了,其实win下安装非常简便,大家可以百度一下,最多3分钟搞定)
我们来看一下SQLite3长啥样吧,打开Mac终端敲sqlite3:
4.数据库可视化工具
有的时候需要用可视化的工具来查看我们的数据库,特别是数据表格很大的时候,能查看SQLite的数据库文件工具很多,我这里推荐使用DB Browser for SQLite,可以非常直观的去处理SQLite 文件.
大家可以去sqlitebrowser的官网下载,有win,linux,mac版本,mac版本大概13M,选择一下下载即可.
5.创建一个数据库
我们先来创建一个数据库,创建数据库的方法有很多种,我们可以用sqlite3命令行创建,也可以用Python代码去写一个新的数据库,也可以用DB Browser for SQlite图形可视化创建,对于零基础的小白,我们先用最简单的图形界面创建吧.
1).打开DB Browser
step1:点击新建数据库
step2:取一个名字,比如Students
step3:点击save
一个数据库可以用很多表,我们新建一个叫demo的表,里面的列分别是
id:INTEGER(相当于int型)
name:TEXT(相当于string型)
sex:TEXT(相当于string型)
age:INTEGER(相当于int型)
关于SQLite里面的语法,下一篇会细细讲,这里大家有一个大体的认识就可以了.
3).编辑表的内容
step1:点击Brower data
step2:点击新建记录
step3:增加每一行的内容
然后保存退出,就会在上面第一步保存的地方(Desktop),出现了一个Students.db
6.命令行查询数据库内容
刚才我们新建了一个Students.db文件,里面其实是一个3*4的二维表格,大家是不是想用sqlite方式看一下呢,好,我们下面打开一个终端,然后用sqlite3 Students.db打开看一下
会出现一个demo表格
敲select *
会出现demo表格里面的内容
sql语句一定以;结尾
是不是和我们用图形界面创建的表的内容,一模一样啊.有同学问,SQLite里面的数据格式是一个二维表,我们的NumPy,Pandas不是专门修理二维表的吗,比如CSV,Excel文件,哇这位同学你太有才了,是的,数据分析很重要的一个过程就是,把数据清洗成表结构,存入数据库,其实CSV文件是可以直接秒变SQL
7.SQLite-Python|主角登场
经过前面6个主题的铺垫,抛砖引玉了这么久,我们的Python主角也该上场了.我们最最重要的目的就是用Python来读写数据库,今天我们先来读一下.
1).Pip 安装SQLite3模块
有很多种方法可以安装,简单的用pip install sqlite3或者pycharm里面安装一下
2).读取数据库demo表格
a).sqlite3.connect打开数据库文件
b).获得游标cursor
c).执行一个SQL语句,这里是查询全表
d).打印每一行的数据
e).不要忘记关闭游标和数据库
好了,Python数据库入门篇就先讲到这里了,是不是很简单,今天很多内容没有展开讲,为的就是让小白用户能通俗的进入数据库的殿堂,后面会由浅入深的慢慢一层一层讲。
数据库其实没有想象的那么神秘,那么难的。大家动手搭建个环境就可以入手了,而且可视化工具虽然很方便,当然还是建议大家从命令行入手,这样对你系统的了解数据库的操作很有帮助。
数据分析之数据库篇我的项目主要用的是MySQL和Mongodb,这两者各有千秋,都是我的最爱,应用的场景稍微不一样,我们后面会讲到的。
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
关注头条热点头条热点
24H热文一周话题本月最赞
讲师:5113人学习过
讲师:98人学习过
讲师:25人学习过
CTO专属活动
精选博文论坛热帖下载排行
本书使用通俗易懂的语言,通过大量的实例,从实际应用的角度出发,全面系统地介绍了网络服务操作系统平台、电子邮件系统、Web站点和FTP站点...
订阅51CTO邮刊纠纷处理 (9:00-18:00)
图书审核 (9:00-18:00)
成功加入购物车
Tom2的书摊
&(美)Hector Garcia-Molina 等著
&机械工业出版社
出版时间:&
(美)Hector Garcia-Molina 等著
机械工业出版社
出版时间:&
请选择所在地
仅1件在售,欲购从速
扫码下方二维码分享到微信
打开微信,点击右上角的 “+”,使用 “扫一扫” 即可将网页分享到朋友圈。
卖家超过10天未登录
商品分类:【干货】大牛公司内部总结:Spring Boot 连接MySql数据库-科技网_长理职培
当前位置:&>&
【干货】大牛公司内部总结:Spring Boot 连接MySql数据库
发布时间: 23:50:35
Spring Boot可以大大简化持久化任务,几乎不需要写SQL语句,在之前章节"Spring Boot 构建框架"中我们新建了一个Spring Boot应用程序,本章在原有的工程中与数据库建立连接。
Spring Boot有两种方法与数据库建立连接,一种是使用JdbcTemplate,另一种集成Mybatis,下面分别为大家介绍一下如何集成和使用这两种方式。
1. 使用JdbcTemplate
mysql mysql-connector-java org.springframework.boot spring-boot-starter-jdbc `alert("Hello CSDN");` package com .example . importjava .util .I importjava .util .List; importjava .util .Map; importjava .util .Map.E importjava .util .Set; importorg .springframework .beans .factory .annotation .A importorg .springframework .jdbc .core .JdbcT importorg .springframework .web .bind .annotation .PathV importorg .springframework .web .bind .annotation .RequestM importorg .springframework .web .bind .annotation .RestC @RestController @RequestMapping( "/mydb") publicclass DBController { @Autowired privateJdbcTemplate jdbcT @RequestMapping( "/getUsers") publicListgetDbType(){ Stringsql ="select * from appuser"; Listlist=jdbcTemplate .queryForList(sql); for ( Mapmap: list) { Setentries =map.entrySet( ); if(entries !=null) { Iterator iterator =entries .iterator( ); while(iterator .hasNext( )) { Entry entry =(Entry ) iterator .next( ); Object key =entry .getKey( ); Object value =entry .getValue(); System .out .println(key +":"+value); } } } returnlist; } @RequestMapping( "/user/{id}") publicMapgetUser(@PathVariable Stringid){ Mapmap=null; Listlist=getDbType(); for ( Mapdbmap : list) { Setset=dbmap .keySet(); for ( Stringkey : set) { if(key .equals( "id")){ if(dbmap .get(key) .equals(id)){ map= } } } } if( map==null) map=list.get( 0); returnmap; } }
运行App输入地址输出数据库数据。
2. 集成Mybatis
具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加群。在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加群。如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的可以加群。java架构群: 一起交流
添加mybatis依赖,在pom.xml文件中增加如下:
org.mybatis.spring.boot
mybatis-spring-boot-starter
在resource文件夹下添加application.properties配置文件并输入数据库参数,如下:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-idle=10
spring.datasource.max-wait=1000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
server.port=8012
server.session.timeout=10
server.tomcat.uri-encoding=UTF-8
依次添加mapper的接口类和xml文件,类分别如下:
AppMessageMapper.java
package com.example.demo.
import java.util.L
import com.example.demo.bean.AppM
public interface AppMessageMapper {
int deleteByPrimaryKey(String id);
int insert(AppMessage record);
int insertSelective(AppMessage record);
AppMessage selectByPrimaryKey(String id);
int updateByPrimaryKeySelective(AppMessage record);
int updateByPrimaryKey(AppMessage record);
List selectAll(); List getMessById(String id);
AppMessageMapper.
package com.example.demo.controller;import java .util.List;import org .springframework.beans.factory.annotation.Autowired;import org .springframework.web.bind.annotation.RequestBody;import org .springframework.web.bind.annotation.RequestMapping;import org .springframework.web.bind.annotation.RequestMethod;import org .springframework.web.bind.annotation.RequestParam;import org .springframework.web.bind.annotation.RestController;import com.example.demo.bean.AppMessage;import com.example.demo.service.AppMessageService;@RestController @RequestMapping( "/appmessage") public class APPMessageController { @Autowired private AppMessageService service ;@RequestMapping( "/getThree") public List getThreeForMessage(){ List list = service .getMessage() ; return list ;} @RequestMapping( "/getAll") public List getAllMessage(){ List list = service .getAllMessage() ;int num = list .size() ;if(null!=list && num> 3){ for (int i = 0; i < num-3; i++) {list .remove( 0) ;} } return list ;} @RequestMapping( "/getByID") public List getMessageById(@RequestParam( "id") String id){ List list = service .getMessageById(id) ;int num = list .size() ;if(null!=list && num> 5){ for (int i = 0; i < num-5; i++) {list .remove( 0) ;} } return list ;} @RequestMapping(value = "/add",method = RequestMethod.POST) // 或者采用@PostMapping("/add")方法,更加节省代码的编写量 public int addMessage(@RequestBody AppMessage appMessage){ return service.addMessage(appMessage); } @RequestMapping(value="/delMessageById",method=RequestMethod.POST) // 或者采用@PostMapping("/delMessageById")方法,更加节省代码的编写量 public int delMessageById(@RequestParam("id") String id){ return service.delMessage(id); }
SpringBoot扫描包提示找不到mapper的问题,异常信息:
Consider defining a bean of type in your configuration
Spring Boot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描,"Application类"是指Spring Boot项目入口类。如果Application类所在的包为:com.yoodb.blog,则只会扫描com.yoodb.blog包及其所有子包,如果service或dao所在包不在com.yoodb.blog及其子包下,则不会被扫描。
方式一:使用注解@ComponentScan(value="com.yoodb.blog"),其中,com.yoodb.blog为包路径。
方式二:将启动类Application放在上一级包中,注意的是Application启动类必须要保证在包的根目录下。1、免责声明:本站提供内容均来源于网络,文章内容中所占立场,均不代表本网站所占立场,若该网页内容涉嫌侵权,请联系我们处理,联系QQ: 2.免费发布广告:本站日浏览量上百万,欢迎免费注册发布您的广告,网址:}

我要回帖

更多关于 sql数据库查询语句大全 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信