Hello there,
I am so sorry you are going through this awful situation.
I have to say, your boyfriend sounds a lot like mine in that when I am nice, understanding, sensitive, thoughtful etc towards him, he usually ends up behaving like a stupid, nasty jerk.
I always used to be so sympathetic towards him-I listened to any problems/complaints he may have had and tried to remedy whatever the problem was and made an effort to understand him. Of course in return, I thought he would do the same thing for me but....not a chance!
I now absolutely refuse to be the caring undersatnding girlfriend to a guy who will mock any problem or complaint that I have.
I make a point of not being so overly nice to him-I'm still nice but I don't allow myself to be walked over like I did before. If he has a problem, I will only listen if I feel like it. If he is sulking, I let him get on with it and don't make the first move to make the peace like I used to do 100pc of the time! If he doesn't listen to my concerns-there are consequences for him etc.
Some men have a really mean streak and instinctively want to hurt the person who is being really nice to them-I would suggest being tougher on him.
Stand your ground, shout if you want, don't apologize to a man who never apologizes and start worrying about yourself and not him.
I have done these things and it is so liberating. I still love the guy because of course, he has a wonderful side(don't they all

, but in changeing my attitiude, I realised that his behaviour was unworthy of respect and therefore my respect for him as a person dropped to a level where I felt superior to him emotionally and spiritually and just saw him for the person he is, instead of putting him on a pedestal like I had for years.
Becasue of this, I feel like a stronger, more self-reliant person and he is still a massive part of my life, but he is no longer the centre of it.
I have to say, be tough-some people do not repay kindness with kindness and if that is the case, try not to be that way.
Wishing you lots of strength