DS1 (6 years old) is very mouth at the moment, and every 'no' gets a huge drama, 'woe is me' reaction.
When he starts getting the whiney tone in his voice I tell him to lose that tone right away. Tantrums, out of the room into time out in the corridor straight away. If the tantrum doesn't stop in the corridor by the time I count to 5 then he goes upstairs to his room where I don't have to listen to him as much. Then I simply ignore him - being ignored is one thing he REALLY, REALLY doesn't like, but until the tantrum stops he gets absolutely no attention from me (fortunately he's not one to break things in his room). He then gets told that another tantrum will result in X being taken away from him, and then I follow through. What REALLY hurts him is when DS2 plays with X and he knows he isn't allowed to. I don't do this that often as TBH he will easily amuse himself with other toys and this really isn't a major sacrifice to him (except perhaps the IPad!)
I've also purchased a toy he really, really wants and he needs to earn a certain amount of stars to earn it.
He has a reward chart with things he has to do to earn stars, like his reading homework, getting dressed in the morning, brushing his own teeth, etc. He gets a star for the general ones if he does them every day of the week on his own without making a fuss. The homework ones has a tiered system, 4 gets 1 star, 7 gets 2 stars.
It will probably take about 5 weeks for him to earn it solely based on this. (Was a £30 toy so figure £1 per star was fair). However, he has the opportunity to earn extra stars with extra good behaviour, doing extra chores (picked the dandelion flower for me my yesterday!) etc.
He can also LOSE stars with really bad behaviour, such as too many tantrums, tantrums when we're out and about, etc. This seems to be working (so far).