In the 20th minute, Balotelli had no trouble getting past Holger Badstuber to head in a pinpoint cross from Cassano. Then in the 36th, the 21-year-old striker received the ball behind the defense and blasted a long shot into the top right corner.
While he did score against Ireland, Balotelli was criticized for wasting numerous chances against Spain, Croatia and England.
Italy will face defending champion Spain in Sunday’s final in Kiev, Ukraine — a rematch of their 1-1 draw that opened Group C.
While Italy has won four World Cups, it’s only European Championship came in 1968. Like when they won the 1982 and 2006 World Cups, the Azzurri have managed to maintain their focus despite a match-fixing and betting scandal at home.
The second goal began with a long vertical pass from Riccardo Montolivo, whose mother is German. Balotelli collected the pass with his back to the goal, controlled the ball with his chest and then sprinted forward and unleashed a blazing shot from the edge of the area as Germany goalkeeper Manuel Neuer again stood immobile.
Balotelli took off his jersey after his second goal, which drew an automatic yellow card, although he will not miss the final.
To start the second half, Germany coach Joachim Loew brought on Miroslav Klose for Mario Gomez at center forward and replaced Lukas Podolski with Marco Reus on the wing.
With Germany appearing slightly more organized, captain Philipp Lahm had a great look at the goal in the 49th but shot way over the bar.
Buffon made another impressive save in the 62nd, leaping to push a free kick from Reus off the bar.
While Italy largely sat back and protected its lead in the second half, the Azzurri did produce some dangerous counterattacks. Claudio Marchisio shot just wide in the 67th and 75th and substitute Antonio Di Natale missed another chance in the 82nd.
Di Natale came on in the 70th after Balotelli went down with a cramp to his left leg.
White-clad German fans greatly outnumbered Italian supporters, unveiling a huge banner before kickoff that featured a giant “G” for Germany. However, most of the stadium was filled with Polish fans who supported Italy.
They had plenty to cheer about.