前言
.NET C#到Java沒那么難,都是面向對象的語言,而且語法還是相似的,先對比一下開發(fā)環(huán)境,再到Servlet,再到MVC,都是一樣一樣的,只是JAVA的配制項比較多而已,只要配好一個,后面都是copy,簡直so easy,而且用myeclipse可以省一些配制
Java與.NET的區(qū)別不在它們的本身,最大的區(qū)別在于他們背后的力量,相信大家都能感覺得到,我就不多說。
系列目錄
一、.NET C#到Java沒那么難,開發(fā)環(huán)境篇
五、.NET C#到Java沒那么難,Nosql篇
六、.NET C#到Java沒那么難,微服務篇
七、.NET C#到Java沒那么難,大數(shù)據(jù)篇
.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數(shù)據(jù)庫對象
ADO.NET | JDBC |
Connection | Connection |
Command、DataAdapter | Statement、PreparedStatement |
DataReader 在線數(shù)據(jù)集 | ResultSet |
DataTable、DataSet 離線數(shù)據(jù)集 | RowSet |
Transaction | Transaction |
(2)ADO.NET連接字符串 和 JDBC數(shù)據(jù)庫驅動和Url
2.JDBC數(shù)據(jù)庫驅動和Url
數(shù)據(jù)庫 | 驅動類名 | 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最大的優(yōu)點是對斷開連接訪問數(shù)據(jù)庫方式的強有力支持。相比起來,JDBC也引入類似的功能,RowSet,但是比起ADO.NET來,還是不夠。
2.ADO.NET不包括分布式事務的接口,ADO.NET的分布式事務是通過MS DTC統(tǒng)一管理的。JDBC本身就提供了對分布式事務支持的接口,不同的JDBC Driver實現(xiàn)了這一個接口,就支持分布式事務了。
3.ADO.NET中,不同的ADO .NET Provider的參數(shù)格式不一樣的。OleDb和Odbc都是使用匿名參數(shù),SqlClient使用“@”開頭的命名參數(shù),OracleCLient使用“:”開頭的命名參數(shù)
4.JDBC中,參數(shù)計數(shù)是從1開始的,最初使用者容易犯錯。ADO.NET沒有此問題
5.ADO.NET是從ODBC,JDBC,OLEDB 發(fā)展過來,而JDBC是ODBC的JAVA版本
6.ADO.NET封裝程度比較高,用起來很方便
2.DBHelper 和 DBUtils
DBHelper有動軟的SQLHelper,DbProviderFactory封裝的DBHelper,微軟EnterpriseLibary封裝的DBHelper
主要是封裝的ADO.NET的代碼,簡化dal層的操作
支持多種數(shù)據(jù)庫,需要自己反射把DataTable轉換成Model
Dbutils由Apache公司開發(fā)
主要是封裝了JDBC的代碼,簡化dao層的操作,有對象映射的功能。
支持多種數(shù)據(jù)庫,可以直接把數(shù)據(jù)轉換成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語句,因為實體字段沒有狀態(tài)
2.修改hbm的class 的dynamic-update="true",在dao先find出來,再修改保存,影響性能
(6).主從級聯(lián)保存
EF和Hibernate都支持主從級聯(lián)保存
(7).批量更新和刪除
ORM框架在批量數(shù)據(jù)處理的時候是有弱勢。
ORM是針對某一對象(單個對象)簡單的查\改\刪\增,不是批量修改、刪除,適合用ORM;而對于批量修改、刪除,不適合用ORM
EF:可以使用SQL實現(xiàn)批量更新和刪除,context.Database.ExecuteSqlCommand()
Hibernate:可以使用HQL實現(xiàn)批量更新和刪除,getSession().createQuery(hql).executeUpdate()
(8).附上封裝好的Hibernate BaseDao
BaoDao
(9).源碼下載
4.擴展閱讀
update 和 merge、saveOrUpdate的區(qū)別
Dapper和Mybatis的比較放在下一篇吧,也許直接到微服務篇了
時間倉促,很多東西沒有寫到,歡迎大家指點
未完,待續(xù),歡迎評論拍磚
作 者: 易 磊(Rabbit_Yi)
出 處: http://www.cnblogs.com/rabbityi/
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點擊文章下部【推薦】或【關注我】。您的鼓勵是作者堅持原創(chuàng)和持續(xù)寫作的最大動力!
http://www.cnblogs.com/rabbityi/p/7132789.html