前言
.NET C#到Java没那么难,都是面向对象的语言,而且语法还是相似的,先对比一下开发环境,再到Servlet,再到MVC,都是一样一样的,只是JAVA的配制项比较多而已,只要配好一个,后面都是copy,简直so easy,而且用myeclipse可以省一些配制
Java与.NET的区别不在它们的本身,最大的区别在于他们背后的力量,相信大家都能感觉得到,我就不多说。
系列目录
五、.NET C#到Java没那么难,Nosql篇
六、.NET C#到Java没那么难,微服务篇
七、.NET C#到Java没那么难,大数据篇
.NET C#到Java没那么难,DB篇
目录
1.ADO.NET 和 JDBC
2.DBHelper 和 DBUtils
3.EF 和 Hibernate
4.Dapper 和 Mybatis
1.ADO.NET 和 JDBC
(1).ADO.NET和JDBC数据库对象
ADO.NET | JDBC |
Connection | Connection |
Command、DataAdapter | Statement、PreparedStatement |
DataReader 在线数据集 | ResultSet |
DataTable、DataSet 离线数据集 | RowSet |
Transaction | Transaction |
(2)ADO.NET连接字符串 和 JDBC数据库驱动和Url
2.JDBC数据库驱动和Url
数据库 | 驱动类名 | URL格式 |
Oracle | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:@hostip:1521:dbname |
Sybase | com.sybase.jdbc2.jdbc.SybDriver | jdbc:sybase:Tds:hostip:4100/dbname |
Mysql | com.mysql.jdbc.Driver | jdbc:mysql://hostip:3306/dbname?useUnicode=true&characterEncoding=GBK |
SQLServer 2000 | com.microsoft.jdbc.sqlserver.SQLServerDriver | jdbc:microsoft:sqlserver://hostip:1433;DatabaseName=dbname |
SQLServer 2005 | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://hostip:1433;DatabaseName=dbname |
SQLServer 7.0 | net.sourceforge.jtds.jdbc.Driver | jdbc:jtds:sqlserver://hostip:1433/dbname |
DB2 | com.ibm.db2.jcc.DB2Driver | jdbc:db2://hostip:50000/dbname |
Informix | com.informix.jdbc.IfxDriver | jdbc:informix-sqli://hostip:port/dbname:informixserver=<dbservername> |
(3).总结
1.ADO.NET最大的优点是对断开连接访问数据库方式的强有力支持。相比起来,JDBC也引入类似的功能,RowSet,但是比起ADO.NET来,还是不够。
2.ADO.NET不包括分布式事务的接口,ADO.NET的分布式事务是通过MS DTC统一管理的。JDBC本身就提供了对分布式事务支持的接口,不同的JDBC Driver实现了这一个接口,就支持分布式事务了。
3.ADO.NET中,不同的ADO .NET Provider的参数格式不一样的。OleDb和Odbc都是使用匿名参数,SqlClient使用“@”开头的命名参数,OracleCLient使用“:”开头的命名参数
4.JDBC中,参数计数是从1开始的,最初使用者容易犯错。ADO.NET没有此问题
5.ADO.NET是从ODBC,JDBC,OLEDB 发展过来,而JDBC是ODBC的JAVA版本
6.ADO.NET封装程度比较高,用起来很方便
2.DBHelper 和 DBUtils
DBHelper有动软的SQLHelper,DbProviderFactory封装的DBHelper,微软EnterpriseLibary封装的DBHelper
主要是封装的ADO.NET的代码,简化dal层的操作
支持多种数据库,需要自己反射把DataTable转换成Model
Dbutils由Apache公司开发
主要是封装了JDBC的代码,简化dao层的操作,有对象映射的功能。
支持多种数据库,可以直接把数据转换成Model
源码预览
View Code
3.EF 和 Hibernate
(1).对象关系配制
EF支持Fluent API和Attribute方式
Hibernate支持XML和注解的方式
(2).Linq 和 HQL,Criteria 面向对象的查询方法
Linq相比于HQL更强大,支持编译时排错,有智能提示;Criteria相当于Where,Select 等各种方法
(3).原生SQL支持
EF:context.Database.SqlQuery()
Hibernate:getSession().createSQLQuery()
(4).缓存
一级缓存:EF和Hibernate都默认支持一级缓存
二级缓存:Hibernate支持二级缓存,一般使用Nosql来代替二级缓存
(5).更新部分字段
EF:
先让EF跟踪实体,然后修改实体即可
EntityEntry<News> entry = cnotext.Entry<News>(news);
entry.State = EntityState.Unchanged;
entry.Property(t => t.xxxx).IsModified = true; //设置要更新的属性
context.SaveChanges();
Hibernate:
1.使用HQL语句,因为实体字段没有状态
2.修改hbm的class 的dynamic-update="true",在dao先find出来,再修改保存,影响性能
(6).主从级联保存
EF和Hibernate都支持主从级联保存
(7).批量更新和删除
ORM框架在批量数据处理的时候是有弱势。
ORM是针对某一对象(单个对象)简单的查\改\删\增,不是批量修改、删除,适合用ORM;而对于批量修改、删除,不适合用ORM
EF:可以使用SQL实现批量更新和删除,context.Database.ExecuteSqlCommand()
Hibernate:可以使用HQL实现批量更新和删除,getSession().createQuery(hql).executeUpdate()
(8).附上封装好的Hibernate BaseDao
BaoDao
(9).源码下载
4.扩展阅读
update 和 merge、saveOrUpdate的区别
Dapper和Mybatis的比较放在下一篇吧,也许直接到微服务篇了
时间仓促,很多东西没有写到,欢迎大家指点
未完,待续,欢迎评论拍砖
作 者: 易 磊(Rabbit_Yi)
出 处: http://www.cnblogs.com/rabbityi/
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章下部【推荐】或【关注我】。您的鼓励是作者坚持原创和持续写作的最大动力!
http://www.cnblogs.com/rabbityi/p/7132789.html