王世充原来是隋朝的官员,隋炀帝在世时,任命王世充为洛阳守将。隋朝灭亡后,王世充在洛阳一带称帝,建立政权为郑国。当时,秦军正在河东一带作战,秦军主要军事力量都转移到了河东,王世充借机夺取了河南部分领土。李渊夺取中原后,决定先讨伐郑王王世充,再讨伐夏王窦建德。李世民率领8万军队前去攻打王世充,为了让窦建德不和王世充联盟,李世民派遣使者前去说服窦建德和唐朝交好。王世充得知李世民前来攻打他,事先做好了安排和部署,他让自己的儿子和兄长们分别驻扎在虎牢关、洛阳等重地,自己率领3万士兵前去迎战。
李世民决定先瓦解王世充的周边城镇,经过八个多月的战争,李世民军队占领了虎牢关,随后河南五十多个州县都投降于李世民。此时,王世充孤立无援,他派遣使者前去向窦建德求救。窦建德想和王世充合作,先灭掉唐朝,再灭掉郑国,自己就可以称霸天下。窦建德率领10多万兵力前去解救王世充,窦建德先后攻下了郑州、荥阳等地,随后驻扎到了虎牢关的东面。李世民决定实行包围战,秦军占领虎牢关阻止窦建德军队向西前进。虎牢关地势险要,特别难攻克,窦建德军队和李世民军队大战了很多次,都未能突破。窦建德在原地驻扎了一个多月,士兵们丧失了斗志,李世民借用这一弱点,引诱窦建德出战。窦建德军队全部出动,李世民率领骑军直冲窦军军营,窦建德和大臣们正在讨论事情,根本没有防备李世民突袭,窦军军心大乱。随后,窦建德被俘虏,王世充投降,李世民获得胜利。