srping標籤和hibernate查詢

Spring的註解形式:
@Repository、@Service、@Controller,它們分別對應存儲層Bean,業務層Bean,和展現層Bean。
view層:    結合control層,顯示前臺頁面。
control層:業務模塊流程控制,調用service層接口。
service層:業務操做實現類,調用dao層接口。
dao層:     數據業務處理,持久化操做
model層: pojo,OR maping,持久層
Dao層  用到@repository
@suppresswarnings(「rawtypes」,「serial」)
能夠抑制一些能經過編譯可是存在有可能運行異常的代碼會發出警告,你肯定代碼運行時不會出現警告提示的狀況下,可使用這個註釋。
("serial") 是序列化警告,當實現了序列化接口的類上缺乏serialVersionUID屬性的定義時,rawtypes是過濾泛型警告,會出現黃色警告。可使用@SuppressWarnings將警告關閉

 

@Overridejava

在面向對象中,只有接口和共有方法,繼承方法有複寫,私有方法不能夠複寫。web

@override編輯器能夠自動判斷複寫的方法是否參數類型一致等,有了這個標識,對於私有的spring

方法進行復寫,編譯器會提示錯誤,當去掉@override,編譯器不會報錯,緣由是面向對象中,數據庫

私有方法自己就是爲了封裝在類內部,不但願別人來更改或者外部引用的編程

@Repositoryapi

用於標註數據訪問層(即DAO層),具體只需將該註解標註在DAO類中數組

爲何 @Repository 只能標註在 DAO 類上呢?這是由於該註解的做用不僅是將類識別爲Bean,同時它還能將所標註的類中拋出的數據訪問異常封裝爲 Spring 的數據訪問異常類型。 Spring自己提供了一個豐富的而且是與具體的數據訪問技術無關的數據訪問異常結構,用於封裝不一樣的持久層框架拋出的異常,使得異常獨立於底層的框架。session

注入方式:app

把DAO實現類注入到action的service接口(注意不要是service的實現類)中,注入時不要new 這個注入的類,由於spring會自動注入,若是手動再new的話會出現錯誤,
而後屬性加上@Autowired後不須要getter()和setter()方法,Spring也會自動注入。 框架

@Autowired

@Autowired註解是按類型裝配依賴對象,默認狀況下它要求依賴對象必須存在,若是容許null值,能夠設置它required屬性爲false。若是咱們想使用按名稱裝配,能夠結合@Qualifier註解一塊兒使用。以下: 
    @Autowired  @Qualifier("personDaoBean") 
    private PersonDao  personDao; 

@Resource

bean注入,即鏈接接口

@Resource註解和@Autowired同樣,也能夠標註在字段或屬性的setter方法上,但它默認按名稱裝配。名稱能夠經過@Resource的name屬性指定,若是沒有指定name屬性,當註解標註在字段上,即默認取字段的名稱做爲bean名稱尋找依賴對象,當註解標註在屬性的setter方法上,即默認取屬性名做爲bean名稱尋找依賴對象。 
    @Resource(name=「personDaoBean」) 
    private PersonDao  personDao;//用於字段上 

注意:若是沒有指定name屬性,而且按照默認的名稱仍然找不到依賴對象時, @Resource註解會回退到按類型裝配。但一旦指定了name屬性,就只能按名稱裝配了。

@Resource的做用至關於@Autowired,只不過@Autowired按byType自動注入,而@Resource默認按 byName自動注入罷了。@Resource有兩個屬性是比較重要的,分是name和type,Spring將@Resource註解的name屬性解析爲bean的名字,而type屬性則解析爲bean的類型。因此若是使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。若是既不指定name也不指定type屬性,這時將經過反射機制使用byName自動注入策略。
  @Resource裝配順序
  1. 若是同時指定了name和type,則從Spring上下文中找到惟一匹配的bean進行裝配,找不到則拋出異常
  2. 若是指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常
  3. 若是指定了type,則從上下文中找到類型匹配的惟一bean進行裝配,找不到或者找到多個,都會拋出異常
  4. 若是既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;若是沒有匹配,則回退爲一個原始類型進行匹配,若是匹配則自動裝配; 

對於上述的spring和bean的理解,可參照以下內容

http://blog.csdn.net/chenssy/article/details/8222744

查詢,需求廣泛明確將符合條件的記錄都顯示出來,此處會用到list對象

List CorpStateList = new ArrayList();

List是一個接口,而ArrayList 是一個類。 ArrayList 繼承並實現了List。
List list = new ArrayList();這句建立了一個ArrayList的對象後把上溯到了List。此時它是一個List對象. 爲何通常都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢? 
問題就在於List有多個實現類,使用List list = new LinkedList(); ,便於程序代碼的重構. 這就是面向接口編程的好處

該方法代碼相似於

public List search(Guitar searchGuitar){

   List match=new LinkedList();

   Guitar guitar=new Guitar();

   ......通過一系列語句處理

   match.add(guitar);

   return  match;

}

在查詢類中,變量類型用枚舉而不用string,可避免查詢條件輸入大小寫或拼錯的問題

public enum Wood{

FENDER,MARTIN;

public String toString(){

  Switch(this){

       case FENDER: return "Fender";

        case MARTIN: return "Martin";

}}}

enum類型是定義一個類型(type)名稱,像Wood,接着是該元素容許的一組值,

而後能夠這樣引用指定值,用Wood.MARTIN代替取其值

 

在CorpDaoImpl.java文件中引用了

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.stereotype.Repository;

註解:

HibernateTemplate提供了很是多的經常使用方法來完成數據庫的基本操做,使得持久層訪問摸板化,只要建立HibernateTemplate 實例後,注入一個SessionFactory的引用就能夠了.無須手動建立sessionFactory,更加智能的管理Hibernate 的Session

Hibernate的複雜用法HibernateCallback
HibernateTemplate還提供一種更加靈活的方式來操做數據庫,經過這種方式能夠徹底使用Hibernate的操做方式。
HibernateTemplate的靈活訪問方式是經過以下兩個方法完成:
 
(1)Object execute(HibernateCallback action)
  
(2)List execute(HibernateCallback action)

這兩個方法都是爲了Spring在接管Hibernate以後,能夠對HibernateDaoSupport進行靈活的擴展而用的。
兩者的主要區別在於,execute返回的是一個Object,而executeFind方法返回的是一個List.
 
在new HibernateCallback的內部類的doInHibernate方法中,它的返回值,就是execute或executeFind方法的返回值

這兩個方法都須要一個HibernateCallback的實例,HibernateCallback實例可在任何有效的Hibernate數據訪問中使用。
程序開發者經過HibernateCallback,能夠徹底使用Hibernate靈活的方式來訪問數據庫,解決Spring封裝Hibernate後靈活性不足的缺陷。
HibernateCallback是一個接口,該接口只有一個方法doInHibernate(org.hibernate.Session session),
該方法只有一個參數Session。一般,程序中採用實現HibernateCallback的匿名內部類來獲取HibernateCallback的實例,
方法doInHibernate的方法體就是Spring執行的持久化操做。

StringBuffer類append方法的用法和用途

StringBuffer hql = new StringBuffer();
             hql.append(" WITH  corp (CORPID, corpname, parentcorpid,corpstate) AS ( ");

注:

1. 先實例化
2.類.append("字符串") 有不少重載,具體查API
3.用途是當須要大量的字符串拼接時使用 優勢效率比+=要高不少 (+=內存中是至關於建立副本從新賦值,StringBuffer是指針的引用)
select * from a union all select * from b
結果返回的是a和b全部的記錄,含重複的數據,union不含重複的數據
Stringbuffer 有append()方法 
Stringbuffer實際上是動態字符串數組 
append()是往動態字符串數組添加,跟「xxxx」+「yyyy」至關那個‘+’號 
跟String不一樣的是Stringbuffer是放一塊兒的 
String1+String2 和Stringbuffer1.append("yyyy")雖然打印效果同樣,但在內存中表示卻不同 
String1+String2 存在於不一樣的兩個地址內存 Stringbuffer1.append(Stringbuffer2)放再一塊兒DetachedCirteria用法在WarningDaoImpl.java文件中,
相關文章
相關標籤/搜索