新聞中心
前言

成都創(chuàng)新互聯(lián)公司專注于郫都網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供郫都營(yíng)銷型網(wǎng)站建設(shè),郫都網(wǎng)站制作、郫都網(wǎng)頁(yè)設(shè)計(jì)、郫都網(wǎng)站官網(wǎng)定制、微信小程序定制開(kāi)發(fā)服務(wù),打造郫都網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供郫都網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
ORM框架不是一個(gè)新話題,它已經(jīng)伴隨我們很多年了。它提供了概念性的、易于理解的數(shù)據(jù)模型,將數(shù)據(jù)庫(kù)中的表和內(nèi)存中的對(duì)象建立了很好的映射關(guān)系。在Java中常用的ORM框架主要有兩個(gè):Hibernate和iBatis。本篇文章主要介紹Hibernate的使用方法,后續(xù)會(huì)出介紹iBatis的文章。
傳統(tǒng)的MVC開(kāi)發(fā)模式
- M:Model包括pojo、service、dao。
- V:View 包括jsp、html、模塊引擎。
- C:Controll 包括我們動(dòng)態(tài)網(wǎng)絡(luò)資源的技術(shù):Servlet。
SSH框架在開(kāi)發(fā)中的作用
- S:Struts/SpringMVC: 實(shí)際上解決的是我們的控制器的問(wèn)題(簡(jiǎn)單的可以認(rèn)為是Servlet的封裝)。
- Spring: 整合其余的第三方框架,就是為 Srvice 層提供事務(wù)。
- Hibernate:其實(shí)就是DAO層的解決方案。
同時(shí)可以看下其余框架(SSM、SSS)的含義:
Hibernate是什么
1.Hibernate是一個(gè)非侵入式ORMapping框架
- 非侵入式框架:我們?cè)谑褂眠@個(gè)框架的時(shí)候,不需要繼承或者實(shí)現(xiàn)這個(gè)框架中的類或者接口,這種類型的框架就叫做非侵入式的框架,非侵入式的框架在使用的時(shí)候更好的和原有的框架實(shí)現(xiàn)了解耦
- 侵入式框架:我們?cè)谑褂眠@個(gè)框架的時(shí)候,需要繼承或者實(shí)現(xiàn)這個(gè)框架中的某些類或者接口,這種框架叫做侵入式框架
2.ORMapping解析
- O:Object
- R:Relation
- M:Mapping 映射
- a.Hibernate能夠?qū)ava對(duì)象通過(guò)映射的關(guān)系映射到數(shù)據(jù)庫(kù)
- b.Hibernate能夠?qū)?shù)據(jù)庫(kù)的數(shù)據(jù)通過(guò)映射關(guān)系映射到Java對(duì)象
Hibernate就是能夠通過(guò)操作Java對(duì)象來(lái)達(dá)到操作數(shù)據(jù)庫(kù)的一門(mén)技術(shù)。
Hibernate能干什么
簡(jiǎn)單的說(shuō):實(shí)現(xiàn)數(shù)據(jù)庫(kù)的所有操作(CRUD),是原有DAO層的一個(gè)解決方案,也是一個(gè)替代品。
Hibernate的簡(jiǎn)單使用
「簡(jiǎn)單使用:」
導(dǎo)包,將下載下來(lái)的required+jpa相關(guān)的包放到一個(gè)文件里面
在src下面創(chuàng)建hibernate.cfg.xml配置文件
- "-//Hibernate/Hibernate Configuration DTD//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
com.mysql.jdbc.Driver jdbc:mysql:///qianyu root root org.hibernate.dialect.MySQL5Dialect update
創(chuàng)建Java的類的對(duì)象
- public class User implements Serializable{
- private static final long serialVersionUID = -6949433888868762441L;
- private int uId;
- private String userName;
- private String userPwd;
- public User(int uId, String userName, String userPwd) {
- super();
- this.uId = uId;
- this.userName = userName;
- this.userPwd = userPwd;
- }
- public User() {
- super();
- }
- public int getuId() {
- return uId;
- }
- public void setuId(int uId) {
- this.uId = uId;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public String getUserPwd() {
- return userPwd;
- }
- public void setUserPwd(String userPwd) {
- this.userPwd = userPwd;
- }
- @Override
- public String toString() {
- return "User [uId=" + uId + ", userName=" + userName + ", userPwd=" + userPwd + "]";
- }
- }
編寫(xiě)測(cè)試類
- @Test
- public void testHelloWord() throws Exception {
- //引入配置文件
- Configuration cfg=new Configuration().configure("hibernate.cfg.xml");
- //創(chuàng)建SessionFactory對(duì)象
- SessionFactory sf=cfg.buildSessionFactory();
- //創(chuàng)建會(huì)話
- Session session=sf.openSession();
- //開(kāi)啟事務(wù)
- session.beginTransaction();
- //操作對(duì)象
- User user=new User(1,"小羽","110");
- //開(kāi)始操作
- session.save(user);
- //進(jìn)行事務(wù)的提交
- session.getTransaction().commit();
- session.close();
- }
Hibernate中的hibernate.cfg.xml配置文件的詳解
- "-//Hibernate/Hibernate Configuration DTD//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
com.mysql.jdbc.Driver jdbc:mysql:///qianyu root root org.hibernate.dialect.MySQL5Dialect update true true
Hibernate的xxx.hbm.xml配置文件的詳解
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
Hibernate中的CRUD的實(shí)現(xiàn)
- 添加數(shù)據(jù)
- session.save(user);
- session.persist(user);
- 修改數(shù)據(jù)
- session.beginTransaction();
- //查詢數(shù)據(jù)(積極的加載)
- User user=session.get(User.class,1);
- //下面支持的是懶加載
- user.setUserName("xxxxx");
- user.setUserPwd("yyyyy");
- session.getTransaction().commit();
- 數(shù)據(jù)查詢
- //查詢數(shù)據(jù)(積極的加載)
- User user=session.get(User.class,1);
- //下面支持的是懶加載
- User user2=session.load(User.class,1);
- 刪除數(shù)據(jù)
- //查詢數(shù)據(jù)(積極的加載)
- User user=session.get(User.class,1);
- session.delete(user);
Hibernate中的幫助類的編寫(xiě)
- public class HibernateUtils {
- private static Configuration cfg=null;
- private static SessionFactory sf=null;
- private static ThreadLocal
threadLocal=null; - static{
- //初始化線程的局部變量
- threadLocal=new ThreadLocal
(); - //加載配置文件
- cfg=new Configuration().configure("config/hibernate.cfg.xml");
- //生成我們的工廠
- sf=cfg.buildSessionFactory();
- }
- /**
- * 獲取session的玩法
- * @Title: getSession
- * @Description: TODO
- * @param: @return
- * @return: Session
- * @throws
- */
- public static Session getSession(){
- Session session=threadLocal.get();
- if(null==session){
- session=sf.openSession();
- session.beginTransaction();
- threadLocal.set(session);
- }
- return session;
- }
- /**
- * 關(guān)閉Session
- * @Title: close
- * @Description: TODO
- * @param:
- * @return: void
- * @throws
- */
- public static void close(){
- Session session=threadLocal.get();
- if(null!=session){
- session.getTransaction().commit();
- session.close();
- threadLocal.remove();
- }
- }
- }
注意事項(xiàng)
- 我們hibernate.cfg.xml配置文件中這個(gè)括hibernate.是可以省略
- 為什么不開(kāi)啟事務(wù)也能查詢到數(shù)據(jù)?是因?yàn)槟J(rèn)Hibernate存在只讀事務(wù),只讀事務(wù)是可以完成數(shù)據(jù)的讀的操作的,如果是要完成增刪改的話那么就需要讀寫(xiě)事務(wù),這個(gè)時(shí)候就需要開(kāi)啟事務(wù)
Save和Persist的區(qū)別
- Save在保存數(shù)據(jù)的時(shí)候,如果id是自增長(zhǎng),你給定id和不給定id都是對(duì)的。
- Persist在保存數(shù)據(jù)的時(shí)候,如果id是自增長(zhǎng)的,你給定id是會(huì)報(bào)錯(cuò)的。
結(jié)語(yǔ)
本篇關(guān)于Hibernate的介紹就先到這里結(jié)束了,后續(xù)會(huì)出更多關(guān)于Hibernate系列更多文章,謝謝大家支持!
分享名稱:連Hibernate技術(shù)都不清楚,你敢說(shuō)你自己會(huì)ORM框架?
鏈接分享:http://m.fisionsoft.com.cn/article/cdpogio.html


咨詢
建站咨詢
