A 301 redirect is basically telling search engines that content has moved from an old URL to a new one. In order to do this effectively the content has to no longer exist on the old domain (if a 301 redirect wasn't there, a 404 would be returned).
And yes, you should redirect each page individually. This will ensure that what PageRank the old content had is passed onto the correct new content. Redirecting everything to your homepage means that the rest of your new site is effectively starting from scratch.
If you're trying to redirect over thousands of URLs you might want to look into writing some custom Apache script to match everything together. It's a little tricky, but can potentially save you a lot of time!
Good luck,
Andrew
PS. Remember to update your Google Webmaster settings to let Google know that you moved your content to a new domain.