Hamilton and his Mercedes team bounced back from defeat against Ferrari's Sebastian Vettel in Australia, the German failing to present a major challenge this time around, not helped by losing time in traffic after making an early pitstop.
Vettel did finish the race a clear runner-up, with Red Bull's Max Verstappen completing the podium from 16th on the grid, holding off a strong late challenge from team-mate Daniel Ricciardo.
While the Shanghai track was drying quickly after morning rain, all but two cars - the Toro Rosso of Carlos Sainz and the Renault of Jolyon Palmer (which pitted at the end of the formation lap) - had intermediate tyres fitted.
When the lights went out, poleman Hamilton eased towards Turn 1 in the lead, whereas fellow front row starter Vettel only just kept the second Mercedes of Valtteri Bottas at bay.
There was progress for Red Bull, with Ricciardo picking off Ferrari's Kimi Raikkonen for fourth after the opening sequence of corners and Verstappen powering through to seventh by the end of the opening lap, having made up nine places.
Midway through the first lap, Lance Stroll, who had made his first Q3 appearance on Saturday, was punted off by Force India's Sergio Perez, the Canadian rookie's Williams beached in the gravel and forcing an appearance by the virtual safety car.
That remained for a couple of laps, with Hamilton now enjoying a healthy advantage and a number of drivers, including Vettel, opting to switch to slicks.
Most of the frontrunners were on intermediates as green flags waved again, but there was another crash moments later as Antonio Giovinazzi lost his car on the main straight, slamming into the pitwall and leading to a full safety car period.
When the race restarted on lap seven, the whole field was now on slicks, with Ricciardo Hamilton's closest rival, as Vettel lost ground through the earlier stop and Bottas spun under the safety car when trying to warm up his tyres.
In green-flag conditions, a surging Verstappen quickly passed Raikkonen for third, before picking off Ricciardo a few laps later with a dive into Turn 6.
Hamilton pulled away at the front, with Ricciardo quickly dropping off the pair and instead working to keep the Ferrari duo at bay.
Vettel picked off Raikkonen first, and he needed little time to pull off a superb outside move on Ricciardo.
As Vettel applied pressure to Verstappen, the Red Bull driver locked up into the hairpin at the end of the lap, allowing the Ferrari through before pitting shortly after.
Upon rejoining, Verstappen lit up the timing screens and, after he took fifth from Bottas with another late Turn 6 lunge, all the drivers ahead would make their stops as well.
Eventually, this left Hamilton seven seconds clear of Vettel, and the gap between the pair remained around that point for the rest of the grand prix, eventually ending up at 6.250s at the chequered flag.
It was much closer in the fight for third, as the final laps of the race featured a tense fight between Verstappen and Ricciardo.
Verstappen was frustrated at the Haas of Romain Grosjean running ahead a lap down, but whatever interference the Frenchman caused was not enough for Ricciardo to capitalise.
Ricciardo tried a last-lap lunge at the hairpin, but came up short, having to settle for fourth place, while Raikkonen led recovering compatriot Bottas in fifth.
Sainz was best of the rest for Toro Rosso in seventh, while Kevin Magnussen scored his first points for his new team Haas in eighth.
He overtook the Force India pair of Sergio Perez and Esteban Ocon, with the duo completing the top 10 as they bagged another double points finish for the Indian outfit.
There were five retirements in total, Stroll and Giovinazzi exiting in incidents and three other drivers foiled by reliability - Toro Rosso's Daniil Kvyat and the McLaren duo of Stoffel Vandoorne and Fernando Alonso, the latter pulling over with a driveshaft failure after battling Sainz.
|3||Max Verstappen||Red Bull/Renault||56||45.192s|
|4||Daniel Ricciardo||Red Bull/Renault||56||46.035s|
|7||Carlos Sainz||Toro Rosso/Renault||56||1m12.893s|
|8||Kevin Magnussen||Haas/Ferrari||55||1 Lap|
|9||Sergio Perez||Force India/Mercedes||55||1 Lap|
|10||Esteban Ocon||Force India/Mercedes||55||1 Lap|
|11||Romain Grosjean||Haas/Ferrari||55||1 Lap|
|12||Nico Hulkenberg||Renault||55||1 Lap|
|13||Jolyon Palmer||Renault||55||1 Lap|
|14||Felipe Massa||Williams/Mercedes||55||1 Lap|
|15||Marcus Ericsson||Sauber/Ferrari||55||1 Lap|
|-||Daniil Kvyat||Toro Rosso/Renault||18||Hydraulics|
|-||Stoffel Vandoorne||McLaren/Honda||17||Fuel pressure|
|-||Antonio Giovinazzi||Sauber/Ferrari||3||Spun off|