基于mybatis的SQL代码书写

本文介绍了在Mybatis中如何进行SQL整行信息查询,包括动态调用表名和字段名,以及如何使用SQL语句根据出生日期计算年龄。在处理日期时,通过date_format进行格式化以匹配数据库中的值。同时,展示了动态SQL的例子,说明了在查询条件不确定时,如何使用${}传递参数来动态查询字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值