Java与C语言:探索各自的优势与特色

发表时间: 2024-06-19 07:06

语言上的问题,基本没有

很多人在哪里扯ORM不好,什么储存过程什么触发器

我第一家公司基本就是面向数据库编程,你能想象随时随时要维护上千行代码的储存过程吗?什么触发器,游标,自定义函数没写过,找问题你知道多难吗?测试有多麻烦吗?

我当年也不怎么喜欢用ORM,但是我一直是出于性能考虑,后来发现那点性能完全是多虑的

因为ORM不排除你用原生的T-SQL,复杂的查询你完全可以写SQL, 但是增删改呢?

做项目相比大家都遇到过 比如 某些表 20++字段很正常,

你添加/修改 传统拼SQL语句蛋疼不蛋疼,如果出于业务需求 删除字段或者添加字段 蛋疼不蛋疼。

ORM可以这样

var user= new User() { Id=0, Name="name", Age=18, Sex=1 }; //添加 _db.Insert(user).ExecuteCommand(); // 修改 _db.Update(user).Where(w=>w.Id==1).ExecuteCommand(); //修改某些字段 _db.Update<User>().Set(s=>new{s.Name="newname" }).Where(w=>w.Id==1).ExecuteCommand(); //删除 _db.Delete<User>().Where(w=>w.Id==1).ExecuteCommand(); //查询数据集这样 _db.Select<User>().ToList(); // 分页带动态条件的可以这样 _db.Select<User>() .WhereIF(1==1,w=>w.Name=="orm") .WhereIF(2==1,w=>w.Age==18) .ToPageList(1,10); //翻译成传统的大概是这样 var sql= new StringBuilder("SELECT Id,Name,Age,Sex FROM User WHERE 1=1 "); if(1==1) { sql.Append("AND Name=@Name "); } if(2==1) { sql.Append("AND Age=@Age "); } sql.Append("LIMIT @PageIndex,@PageSize"); _db.GetList(sql,new{Name="name",Age=18,PageIndex=1,PageSize=10});

某一天需求增加一个字段 Sex 我只要跑 User类里面增加一个属性就行,删除一个Age字段 删除 Age属性即可

这不比你手写字符串SQL里面小心翼翼删除SQL 跟 SQL参数要强多了

大约这种操作占你项目的 95% 功能

而翻译出来的都是的标准T-SQL语句 别以为别人一股脑全部数据都在内存 它只是翻译成TSQL了而已

而且EMIT映射 性能比 DataTable更快


ORM 的切换数据库功能就不提了,用处不是很大,极少数会用到,就是软件源代码可以出售给别人。但是别人就是不用你用的数据库,比如你用 MYSQL ,别人就要用 MSSQL。你用MSSQL 别人就要用 ORACLE