SQL整行信息查询
在数据库中如果要查询如下的一条信息,SQL代码应该如下所示:
基于SSM框架使用springboot以IDEA作为开发工具的话,mapper层代码应如下所示:
@Select("select * from enchange_train where train_no=#{train_no}")
public Enchange_Train getEnchangeTrainByTrainNo(@Param("train_no") String train_no);
按照上述代码在controller层传入train_no的值为200004,结果如下所示:
Enchange_Train{train_no='200004', train_name='mwl', train_type='教学沙龙',
train_address='21', speaker='21',hours=0, start_time=2018-01-31 12:00:00.0,
end_time=2018-02-04 12:00:00.0, limit_number=4,
reported_number=0, state='开放', url='', remarks=''}
从上面的输出结果可以看出:开始时间和结束时间两个属性的值与数据库中的值有些许不同,就是controller中输出的结果信息日期显示12:00:00.0,最后末尾处多显示一个0,为此,我们需要对日期进行格式化,格式化后的SQL代码如下:
@Select("select train_no,train_name,train_type,train_address,
speaker,hours,date_format(start_time,'%Y-%c-%d %h:%i:%s') as start_time,
date_format(end_time,'%Y-%c-%d %h:%i:%s') as end_time,limit_number,reported_number,
state,url,remarks from enchange_train where train_no=#{train_no}")
public Enchange_Train getEnchangeTrainByTrainNo(@Param("train_no") String train_no);
上述输出结果如下:
train_address='21', speaker='21',hours=0, start_time=2018-1-31 12:00:00,
end_time=2018-2-04 12:00:00,limit_number=4, reported_number=0,
state='开放', url='', remarks=''}
可以看出上述结果的输出与数据库中的信息是一样的。
使用date_format进行日期的格式化,通常有以下几种方式;date_format函数使用可参考以下链接:https://www.cnblogs.com/duhuo/p/5650876.html
DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')
输出结果如下:
Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46
Mybatis动态调用表名和字段名
在进行数据查询时候,我们可能会遇到动态查询字段名,也就是我们所要查询的结果是不确定的。举个例子来说,我们在进行数据统计与分析时,用户在前台下拉表中选择“成绩”属性时,我们就是要将成绩,作为一个要查询的一个参数作为查询条件进行数据的查询,查询的结果就是成绩这一属性的所有信息。同理用户选择班级,出来的是所有的班级的信息。
在这里设计到的就是动态查询表明或字段名,因为有的时候我们查询的表和字段名都不是固定的一张表或一些字段名。在这里我们不能像上述代码一样通过#{}进行传递参数,而是要通过${}进行传递参数。
比如我们要实现对提升培训表中学时的统计,对学时这一属性进行分组并进行统计。SQL代码如下:
@Select("select ${groupname} as groupitemnum,count(${groupname})as groupnum
from ${trainname} group by ${groupname}")
public List<GroupInfo> groupitemnum(@Param("trainname")
String trainname,@Param("groupname") String groupname);
将trainname=enchange_train,groupname=hours,传递进去,在数据库中检索查询可以得到如下信息:
mybatis动态调用表名和字段名的更多理解可参考以下链接:
https://www.cnblogs.com/heyonggang/archive/2016/10/12/5953070.html
SQL实现根据出生日期计算年龄
SQL代码如下:
SELECT tno ,tname ,birthday_time,NOW(),
(year(now()) - year(birthday_time)) AS age from teacher
查询结果如下,查询结果中显示了,当前的时间,数据库中的时间以及计算后得到的用户的年龄。
创建视图的SQL代码如下:
SELECT
teacher.tno AS tno,
teacher.tname AS tname,
(year(now()) - year(`teacher`.`birthday_time`)) AS age
FROM
teacher