唐武德四年(公元621年)五月二十八日,窦建德倾巢而出,从板渚出牛口列成战阵,北靠黄河,西临汜水,南连鹊山。十几万大军确实声势浩大,连绵十几公里,擂鼓前进,喊杀声震天。
这种场面十分骇人,让唐军诸将都十分惊慌。李世民带几名骑兵登上高丘观察敌阵,并对将领们说:“敌人从山东起兵,还没有碰见过强大的对手,如今身涉险境却很喧嚣,是没有纪律,逼近城池排列战阵,有轻视我们的意思。我们如果按兵不动,他们的勇气自然就会衰竭,列阵时间一长士卒饥饿,势必就会自动撤退,我们再追上去攻击,必然会取胜。我和各位相约,一过正午,肯定能打败他们!”
当时窦建德轻视唐军,派三百骑兵涉过汜水,在离唐营一里地方停止。派人通报李世民说:“敢不敢挑选几百名精兵过来交锋!”李世民派王君廓带领二百名长枪手应战。双方相互交锋,骤进骤退,最终不分胜负,各自返回营地。
这时,窦建德将领王琬骑着昔日隋炀帝的坐骑青骢马,铠甲兵器都很新,远离阵前向众人夸耀。李世民说:“他骑的真是匹好马!”尉迟敬德请求去夺马,李世民制止他说:“怎么能为了一匹马损失一员猛士呢?”尉迟敬德不听,和高甑生、梁建方一起骑马直冲入敌阵,活捉了王琬,牵着他的坐骑奔回唐营。
由于之前提到了李世民及其麾下武将勇力的事迹,这里就顺带提一提《隋唐演义》中的描写与史实的关系。隋唐演义中前十二位好汉诸如李元霸、宇文成都、罗成等等都是虚构的,或者并无此人,或是有各种原型进行艺术加工。其实根据历史记载,诸如秦琼、尉迟敬德就已经是那个时代最强的战将。根据当时的习惯写作手法,《隋唐演义》将李世民表现成为道德典范,而文武策略、战场拼杀都必须非常依赖麾下的能臣武将,这个是不符合实际的。“仁者不带兵”,当战争需要,李世民会毫不犹豫的展现出他冷酷无情的一面。只是他并不滥杀、嗜杀而已。此外,论武艺与马术,特别是箭术,李世民也是可以居那个时代强者之列的。所以史书上经常记载他亲临战阵并热衷于战斗,用榜样的力量来激励唐军奋勇作战,而不完全是在后方组织与协调军队。
唐军与夏军从清晨对阵一直到中午,夏军由于挑战失败,士气继续低落,而中午也出现了大量口渴与疲劳的迹象。“士卒饥倦,皆坐列,又争饮水,逡巡欲退。”李世民命令将领宇文士及带三百骑兵经过窦建德军阵西边向南奔驰,告诫他:“敌人如果不动,你就带兵返回,如果动了,就领兵东进。”到窦建德阵前,敌阵果然动了。显然,士气低落的夏军开始躲避宇文士及的攻击。
李世民立即下令把更多的精锐骑兵集中在窦建德已经有动摇迹象的左翼上。李世民率先出发,大军跟随在后,向东涉过汜水,直扑敌阵,开始总攻击。窦建德的军队由于猝不及防,加上疲惫,已经出现了部分的崩溃,但其精锐骑兵还是进行了有效的对抗,掩护形势窘迫的窦建德后撤靠近东面的山坡。该处处于泗水流域东部的悬崖地区,是一个不错的防御地形。
同时由于窦建德骑兵数量众多,唐军的骑兵突击稍显不利,李世民立即命令其他骑兵支援。唐军淮阳王李道玄挺身冲锋陷阵,直冲出敌阵后方,又重新返回冲入阵中,几番进出,身上聚集的箭像刺猬毛一样,勇气仍然不减,向窦建德军阵连续放箭。一时间战场尘土飞扬遮天蔽日,血腥的格斗达到了白热化的地步。
但夏军的防御阵地转移的代价则是造成了较大的混乱。李世民现在决定出动自己的王牌,他亲自率领最精锐的一千名玄甲骑兵,在程知节(就是程咬金)、秦琼等悍将的伴随下对窦建德的军阵发动最后猛烈的冲击。玄甲军们卷起旗帜,一直等到骑兵冲锋穿透了整个夏军的军阵直达悬崖附近,才在夏军的阵后展开之前卷起的唐军大旗。窦建德的军队本来就士气低落,现在看见唐军的旗帜纷纷飘扬在自己的阵后更是惊恐万分。这时,从侧翼迂回的唐军骑兵也已经到达,和玄甲骑兵进行合击,窦建德大军迅速全面崩溃。
根据统计,有3000多名夏军在唐军的冲杀中被直接杀死,50000名以上的夏军被唐军俘虏,李世民当天就遣散了这些俘虏,让他们返回家乡。窦建德则被长矛刺中,一直逃到牛口渚躲避。唐车骑将军白土让、杨武威追逐窦建德,窦建德落马被俘。
窦建德大军的溃败消息很快传到了洛阳,早已筋疲力尽的王世充于6月4日投降。虎牢关之战的伟大胜利让唐军在一场战役中打垮了两个强大的对手,再加上唐军名将李靖在南方的胜利,使得唐王朝统一中国已经没有任何悬念。3500名精锐骑兵(应该还要加上本来虎牢关的守备军)击溃12万大军,这场中世纪早期骑兵的经典战例,可载入世界军事史册,也是李世民个人军事生涯上的最高峰。