A lot of people conflate ORM's leaking because of poor designed library with ORM being a bad abstraction in general.
There is no real abstraction. You write standard SQL and it maps your recordset to an object. You know exactly what code is running.
There are extensions that will take a POCO object and create an insert statement and I believe updates, but where ORMs usually get obtuse and do magic are Selects. It’s hard to generate a suboptimal Insert or Update.
There are times I dislike things about it, and it can be quite heavy, but it’s very easy to mix and match ActiveRecord ORM code and raw SQL even within a single model class.
> Micro ORMs.
And there's the mystical fourth option of simply not bothering with objects in the first place. No objects, no need to do object-relational mapping.
Nothing says the structure which make sense for an application can't be a generic array of generic dictionaries.
If your favourite programming language forces you to go through the silly hoops of data mapping in order to do useful things with query output, I can understand why an ORM might make sense for you.
Micro ORMs.