I would have a separate topic for each openHAB item. A good way to organise things might be;
E.g.
/openhab/garage/humidity
/openhab/kitchen/temp
etc...
The MQTT binding will attempt to convert the message payload to the specified openHAB item type as best it can. So if you receive "12.34" for a Number item, it will automatically convert it. For something like a garage door you will probably want to specify a Contact item in openHAB. In that case you would need to be publishing "OPEN" or "CLOSED" as your payload.
If you can't control what is being published you can use transformation services to transform the raw message received on the MQTT topic to something openHAB can parse. For example I have the following;
Switch Alarm_Burglar "Burglar Alarm" <alarm> (Alarm) { mqtt="<[mosquitto:/openhab/piface/out/1:state:JS(gpio_to_switch.js)]" }
Switch Alarm_Fire "Fire Alarm" <fire> (Alarm) { mqtt="<[mosquitto:/openhab/piface/out/2:state:JS(gpio_to_switch.js)]" }
And in my /configurations/transform folder I have a file gpio_to_switch.js;
if (input == "1") {
"ON";
} else {
"OFF";
}
There are a number of transform services available, regex, XLST, and JS.
Hope this helps.