Java學習筆記01

来源:http://www.cnblogs.com/sagacity-shen/archive/2017/09/20/7555157.html
-Advertisement-
Play Games

1.原型設計: 將頁面的模塊、元素、人機交互的形式,利用線框描述的方法,將產品脫離皮膚狀態下更加具體跟生動的進行表達. 2.下麵的是使用PowerDesigner進行設計的持久層的層次結構圖: 虛線三角表示的是“實現介面” 實線三角表示的“繼承” 其中,下圖使用了依賴倒置的原則:高層模塊不應該依賴與 ...


1.原型設計:

將頁面的模塊、元素、人機交互的形式,利用線框描述的方法,將產品脫離皮膚狀態下更加具體跟生動的進行表達.

2.下麵的是使用PowerDesigner進行設計的持久層的層次結構圖:

虛線三角表示的是“實現介面” 實線三角表示的“繼承

 

其中,下圖使用了依賴倒置的原則:高層模塊不應該依賴與底層

其中AbstractBaseDao抽象類是為了有選擇性的實現特定功能,採用了設計模式中的模版模式。

上圖採用的是門面模式。

3. Hibernate(ORM,即Object-Relational Mapping)對象關係映射:

作用就是在關係型資料庫和對象之間做了一個映射。從對象(Object)映射到關係(Relation),再從關係映射到對象。這樣,我們在操作資料庫的時候,不需要再去和複雜SQL打交道,只要像操作對象一樣操作它就可以了(把關係資料庫的欄位在記憶體中映射成對象的屬性)。

從上圖中,我們可以看出Hibernate六大核心介面,兩個主要配置文件,以及他們直接的關係。Hibernate的所有內容都在這了。那我們從上到下簡單的認識一下,每個介面進行一句話總結。

1、Configuration介面:負責配置並啟動Hibernate

2、SessionFactory介面:負責初始化Hibernate

3、Session介面:負責持久化對象的CRUD操作

4、Transaction介面:負責事務

5、Query介面和Criteria介面:負責執行各種資料庫查詢

 

註意:Configuration實例是一個啟動期間的對象,一旦SessionFactory創建完成它就被丟棄了。

其中:hibernate.cfg.xml事例代碼如下:

 1 <!DOCTYPE hibernate-configuration PUBLIC
 2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 3     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 4 
 5 <hibernate-configuration>
 6     <session-factory>
 7         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
 8         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
 9         <property name="hibernate.connection.url">jdbc:mysql://localhost/XXX</property>  //XXX為本地資料庫名稱
10         <property name="hibernate.connection.username">root</property>    //連接資料庫賬號
11         <property name="hibernate.connection.password">root</property>   //連接數據密碼
12         <property name="hibernate.show_sql">true</property>
13         <property name="hibernate.hbm2ddl.auto">update</property>
14         <mapping resource="com/djdj/entity/Order.hbm.xml"/>    //mapping 為實體代碼到資料庫的映射
15     </session-factory>
16 </hibernate-configuration>


 
  //Order.hbm.xml代碼如下:

1
<?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6 <class name="com.djdj.entity.Order" table="tb_order"> //name為實體類 ,table 為在資料庫建的表名稱 7 <id name="id"> 8 <generator class="native"></generator> 9 </id> 10 <property name="orderNo"></property> 11 12 <set name="item"> 13 <key column="orderNo"></key> //其中key中column的值要跟many-to-one中column的值相等 14 <one-to-many class="com.djdj.entity.OrderItem"></one-to-many> //one-to-many 代表一對多的關係 many-to-one 多對一 many-to-many 代表多對多的關係 15 16 </set> 17 </class> 18 </hibernate-mapping>

實體類Order的代碼如下:

package com.djdj.entity;

import java.io.Serializable;
import java.util.Set;



public class Order implements Serializable{
           private int id;
           private int orderNo;
           private Set<OrderItem> item;
            
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public int getOrderNo() {
            return orderNo;
        }
        public void setOrderNo(int orderNo) {
            this.orderNo = orderNo;
        }
        public Set<OrderItem> getItem() {
            return item;
        }
        public void setItem(Set<OrderItem> item) {
            this.item = item;
        }
           
}

Hibernate調用配置文件創建資料庫表的代碼如下:

public class CreateTable {
     public static void main(String[] args) {
        //讀配置
         Configuration cfg =  new Configuration().configure();
         SchemaExport export = new SchemaExport(cfg);
         export.create(true, true);
    }
}

測試代碼如下:

public class Test {

    public static void main(String[] args) {
         //讀取配置
         Configuration cfg =  new Configuration().configure();
         //獲取SessionFactory
         SessionFactory factory =cfg.buildSessionFactory();
         //獲取session
         Session session=null;
         
         try{
             session =factory.openSession();
             //開啟事務
             session.beginTransaction();
             

// //中間進行數據操作代碼的編寫
//
session.getTransaction().commit(); }catch (Exception e) { e.printStackTrace(); }finally{ session.close(); //離線不更改 //u.setName("1"); } } }

以User為例,實現增刪查改的代碼如下:

             //設置user
//             User user = new User();
//             user.setName("st2");
//             user.setPwd("1112");
             //save 之前是瞬時對象 ,之後為持久化對象:和資料庫數據相關
//             session.save(user);
             
             //查詢對象
//             User u=(User)session.get(User.class, 2);
             //load獲取代理對象,效率高,只有真正在使用過程中獲取真實對象,get直接獲取真實對象。
//             User u=(User)session.load(User.class, 2);
//             System.out.println(u.getName());
             
             //刪除對象        
//             User u=(User)session.get(User.class, 2);
//             System.out.println(u.getName());
            // session.delete(u);
             
             //修改對象
             User u=(User)session.get(User.class, 2);
             System.out.println(u.getName());
             u.setName("sys");
             session.update(u);

級聯操作:

Casade用來說明當對主對象進行某種操作時是否對其關聯的從對象也作類似的操作,常用的cascade:

         none,all,save-update,delete, lock,refresh,evict,replicate,persist,

         merge,delete-orphan(one-to-many)。一般對many-to-one,many-to-many不設置級聯,在<one-to-one>和<one-to-many>中設置級聯。

                                                                                                                                                                                                                                                                                   sagacity_shen

                                                                                                                                                                                                                                                                           初定於  2017-09-20 00:58:34


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引用ZXing類庫 實現功能: 1生成帶有Logo二維碼 2 將二維碼繪製到圖片上 3 圖片上繪製文字 1 public string CreateQrCode(string md5Str,string name,int sex) 2 { 3 string str = sex == 1? "先生": ...
  • 花了幾個小時寫了一個小程式,沒什麼技術含量,第一次寫博客。本人是個菜鳥,想記錄一下自己的學習。 運行效果如圖: 代碼如下: string url = "https://www.cnblogs.com/"; int pagNum = 10; string html = ""; //string pat ...
  • 1 概述 1 概述 VS2017可以調試JS,本篇文章簡要概述VS2017關於啟用和關閉VS調試功能。 2 具體內容 2 具體內容 當開啟VS2017JS調試功能時,我們用VS2017打開解決方案時,會出現如下界面: 關閉VS2017 js調試功能: 工具=》選項 調試=》去掉"啟用ASP.NET的 ...
  • 想想某一天,你在看LOL攻略的時候,系統突然崩潰了,接著瀏覽器出現了密密麻麻的LOL帳號和密碼,你一定在想:“天啊,這次要發財了,說不定裡面有超凡號或者王者號,我得趕緊全部記下來。”然而說完你就驚呆了,那麼多的帳號密碼,而且全部寫在了Json裡面,一個一個複製粘貼要記到什麼時候啊。。。如果這時候我在 ...
  • 公司內部一個項目是用WPF作為GUI 訪問web介面的形式獲取數據, 但是由於數據量比較大,也沒做分頁,於是就需要一個loading的控制項,網上查了很多資料但都比較淺。這裡完成需求後,總結一下。 首先。loading控制項的實現基本上都是1.控制項顯示;2.後臺訪問查詢;3.UI渲染;4.控制項隱藏。 想 ...
  • 需求:實時解析RichTextBox中輸入的內容,不允許換行。 設計:由於Wpf對東亞語言支持不太好,首先拋棄監聽KeyUp或KeyDown的想法,選擇訂閱PreviewTextInput事件,然後在事件里讀取文本,解析文本,最後清空控制項中的文本,再按照順序把解析的文本集合添加到控制項中。 實現:按照 ...
  • 生成日誌: ...
  • 對於微軟官方提供的鏡像microsoft/aspnetcore2.0來說,它沒有安裝libgdiplus包,所以當你使用了draw去畫圖時,就會出現一些問題,我們一般會安裝第三方的包包,ZKWeb.System.Drawing,而發佈到docker里之後,運行時,會出現找不到dll的情況! 原因: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...