欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Hibernate hql查詢(xún)代碼實(shí)例

 更新時(shí)間:2018年02月08日 13:46:48   作者:lavimer  
這篇文章主要介紹了Hibernate hql查詢(xún)代碼實(shí)例,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下

本文研究的主要是Hibernate hql查詢(xún)的相關(guān)內(nèi)容,具體如下。

HQL介紹

Hibernate語(yǔ)言查詢(xún)(Hibernate Query Language,HQL)它是完全面向?qū)ο蟮牟樵?xún)語(yǔ)句,查詢(xún)功能非常強(qiáng)大;具備多態(tài)、關(guān)聯(lián)等特性,HQL查詢(xún)也是Hibernate官方推薦使用的查詢(xún)方法。

下面我們通過(guò)一個(gè)案例我分析相關(guān)查詢(xún)方法

Classes.java:

public class Classes {
	/*班級(jí)ID*/
	private int id;
	/*班級(jí)名稱(chēng)*/
	private String name;
	/*班級(jí)和學(xué)生的關(guān)系*/
	private Set<Student> students;
	//省略setter和getter方法
}

Student.java:

public class Student {
	/*學(xué)生ID*/
	private int id;
	/*學(xué)生姓名*/
	private String name;
	/*學(xué)生和班級(jí)的關(guān)系*/
	private Classes classes;
	//省略setter和getter方法
}

Classes.hbm.xml:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC  
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="com.lixue.bean"> 
  <!-- 設(shè)置lazy為false --> 
  <class name="Classes" table="t_classes" lazy="false"> 
    <id name="id"> 
      <generator class="native"/> 
    </id> 
    <property name="name"/> 
    <!-- 一對(duì)多映射 ,inverse="true"表示交給對(duì)端維護(hù)關(guān)系--> 
    <set name="students" inverse="true"> 
       <key column="classesid"/> 
      <one-to-many class="Student"/> 
    </set> 
  </class> 
</hibernate-mapping> 

Student.hbm.xml:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC  
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="com.lixue.bean"> 
  <class name="Student" table="t_student"> 
    <id name="id"> 
      <generator class="native"/> 
    </id> 
    <!-- 映射普通屬性 --> 
    <property name="name"/> 
    <!-- 多對(duì)一 映射,在多的一端加上外鍵--> 
    <many-to-one name="classes" column="classesid"/> 
  </class> 
</hibernate-mapping> 

1.查詢(xún)單一屬性:

/*返回結(jié)果集屬性列表,元素類(lèi)型和實(shí)體類(lèi)中的屬性類(lèi)型一致*/ 
      List<String> students = session.createQuery("select name from Student").list(); 
      /*遍歷*/ 
      for (Iterator<String> iter=students.iterator(); iter.hasNext();) { 
        String name = (String)iter.next(); 
        System.out.println(name); 
      } 

注:查詢(xún)單一屬性的時(shí)候,返回的是一個(gè)集合,集合元素的類(lèi)型是該屬性的類(lèi)型。

2.查詢(xún)多個(gè)屬性,返回對(duì)象數(shù)組:

/*查詢(xún)多個(gè)屬性,返回的是對(duì)象數(shù)組*/ 
      List<Object[]> students = session.createQuery("select id, name from Student").list(); 
      /*遍歷*/ 
      for (Iterator<Object[]> iter=students.iterator(); iter.hasNext();) { 
        Object[] obj = (Object[])iter.next(); 
        System.out.println(obj[0] + ", " + obj[1]); 
      } 

注:查詢(xún)多個(gè)屬性返回的是一個(gè)類(lèi)型為對(duì)象數(shù)組的集合,這個(gè)很好理解,當(dāng)查詢(xún)單一屬性是返回的集合元素類(lèi)型就是屬性的類(lèi)型,但是多個(gè)類(lèi)型呢?那必須是對(duì)象數(shù)組來(lái)處理啊即Object[]。

3.查詢(xún)多個(gè)屬性,返回對(duì)象類(lèi)型的集合:

/*我們給實(shí)體對(duì)象設(shè)置對(duì)應(yīng)的構(gòu)造函數(shù),然后通過(guò)查詢(xún)對(duì)象的方式就可以返回一個(gè)實(shí)體對(duì)象類(lèi)型的集合*/ 
      List students = session.createQuery("select new Student(id, name) from Student").list(); 
      /*遍歷*/ 
      for (Iterator iter=students.iterator(); iter.hasNext();) { 
        Student student = (Student)iter.next(); 
        System.out.println(student.getId() + ", " + student.getName()); 
      } 

注:除了我們第二種方式返回的是一個(gè)對(duì)象數(shù)組,我們還可以給實(shí)體對(duì)象設(shè)置對(duì)應(yīng)的構(gòu)造函數(shù),然后通過(guò)查詢(xún)對(duì)象的方式進(jìn)行查詢(xún),然后返回的就是實(shí)體類(lèi)型的集合。

4.使用別名進(jìn)行查詢(xún):

/*可以使用別名*/ 
      List<Object[]> students = session.createQuery("select s.id, s.name from Student s").list(); 
      /*遍歷*/ 
      for (Iterator<Object[]> iter=students.iterator(); iter.hasNext();) { 
        Object[] obj = (Object[])iter.next(); 
        System.out.println(obj[0] + ", " + obj[1]); 
      } 

5.查詢(xún)實(shí)體對(duì)象:

/*返回的是實(shí)體對(duì)象類(lèi)型的集合*/ 
      List<Student> students = session.createQuery("from Student").list(); 
      /*遍歷*/ 
      for (Iterator<Student> iter=students.iterator(); iter.hasNext();) { 
        Student student = (Student)iter.next(); 
        System.out.println(student.getName()); 
      }

注:查詢(xún)實(shí)體可以直接使用from 類(lèi)名的形式。

/*使用select就必須使用別名*/ 
      List<Student> students = session.createQuery("select s from Student s").list(); 
      /*遍歷*/ 
      for (Iterator<Student> iter=students.iterator(); iter.hasNext();) { 
        Student student = (Student)iter.next(); 
        System.out.println(student.getName()); 
      }

注:如果要使用select關(guān)鍵字,那么就必須使用別名。另外一點(diǎn)千萬(wàn)要注意:hql不支select * 的形式。

6.N+1問(wèn)題:

/** 
       * 采用list查詢(xún)實(shí)體對(duì)象會(huì)發(fā)出一條查詢(xún)語(yǔ)句,取得實(shí)體對(duì)象數(shù)據(jù) 
       * 
       * Hibernate: select student0_.id as id0_, student0_.name as name0_, 
       * student0_.createTime as createTime0_, student0_.classesid as classesid0_ 
       * from t_student student0_ 
       */ 
      List<Student> students = session.createQuery("from Student").list(); 
      /*遍歷*/ 
      for (Iterator<Student> iter=students.iterator(); iter.hasNext();) { 
        Student student = (Student)iter.next(); 
        System.out.println(student.getName()); 
      }

注:使用.list()的方式進(jìn)行對(duì)象查詢(xún),只會(huì)發(fā)出一條語(yǔ)句,即取得實(shí)體對(duì)象數(shù)據(jù)的語(yǔ)句。

/** 
       * 會(huì)出現(xiàn)N+1問(wèn)題,所謂的N+1指的是發(fā)出了N+1條sql語(yǔ)句 
       * 
       * 1:發(fā)出一條查詢(xún)id列表的語(yǔ)句 
       * Hibernate: select student0_.id as col_0_0_ from t_student student0_ 
       * 
       * N:根據(jù)id發(fā)出N條sql語(yǔ)句,加載相關(guān)的對(duì)象 
       * Hibernate: select student0_.id as id0_0_, student0_.name as name0_0_, 
       * student0_.createTime as createTime0_0_, student0_.classesid as classesid0_0_ 
       * from t_student student0_ where student0_.id=? 
       * 
       */ 
      Iterator<Student> iter = session.createQuery("from Student").iterate(); 
      /*遍歷*/ 
      while (iter.hasNext()) { 
        Student student = (Student)iter.next(); 
        System.out.println(student.getName()); 
      } 

注:通過(guò)iterator()方式進(jìn)行對(duì)象查詢(xún),會(huì)發(fā)出N+1條語(yǔ)句,首先會(huì)發(fā)出一條語(yǔ)句查詢(xún)出實(shí)體對(duì)象的ID,然后在根據(jù)各自的ID發(fā)出N條語(yǔ)句去查詢(xún)N個(gè)對(duì)象,這中形式性能是比較差的。

/*通過(guò)List查詢(xún)把查詢(xún)出的集合存放在一級(jí)緩存即session級(jí)緩存中*/ 
      List<Student> students = session.createQuery("from Student").list(); 
      /*遍歷*/ 
      for (Iterator<Student> iter=students.iterator(); iter.hasNext();) { 
        Student student = (Student)iter.next(); 
        System.out.println(student.getName()); 
      } 
      System.out.println("-----------------------------------------------------"); 
      /** 
       * 避免了N+1問(wèn)題 
       * 
       * 因?yàn)閳?zhí)行l(wèi)ist操作后會(huì)將數(shù)據(jù)放到session的緩存中(一級(jí)緩存),所以采用iterate的時(shí)候 
       * 首先會(huì)發(fā)出一條查詢(xún)id列表的語(yǔ)句,再根據(jù)id到緩存中加載相應(yīng)的數(shù)據(jù),如果緩存中存在與之匹配的數(shù)據(jù) 
       * 則不再發(fā)出根據(jù)id查詢(xún)的sql語(yǔ)句,直接使用緩存中的數(shù)據(jù) 
       * 
       * Iterate方法如果緩存中存在數(shù)據(jù),它可以提高性能,否則出現(xiàn)N+1問(wèn)題 
       * 
       */ 
      Iterator<Student> iter = session.createQuery("from Student").iterate(); 
      /*遍歷*/ 
      while (iter.hasNext()) { 
        Student student = (Student)iter.next(); 
        System.out.println(student.getName()); 
      } 

注:其實(shí)Hibernate提供iterator()的方式查詢(xún)是為了提高性能的,那為什么反而幫了倒忙呢?原因是iterator()是從一級(jí)緩存中取數(shù)據(jù)的,如果緩存中有數(shù)據(jù),那么它的效率毫無(wú)疑問(wèn)會(huì)相當(dāng)?shù)慕o力,但是當(dāng)我第一次查詢(xún)的時(shí)候緩存中怎么可能會(huì)有數(shù)據(jù)呢,所以就導(dǎo)致了所謂的N+1問(wèn)題。上面這段代碼可以避免N+1問(wèn)題,它的思路是先用list()進(jìn)行查詢(xún),因?yàn)閘ist()查詢(xún)出來(lái)以后,在一級(jí)緩存匯總就存在了數(shù)據(jù),使用iterator()的時(shí)候,效率就會(huì)非常的高。

7.條件查詢(xún):

/*根據(jù)條件進(jìn)行查詢(xún)(這里通常都使用別名,比較方便 )*/ 
      List<Object[]> students = session.createQuery("select s.id, s.name from Student s where s.name like '%0%'").list(); 
      /*遍歷*/ 
      for (Iterator<Object[]> iter=students.iterator(); iter.hasNext();) { 
        Object[] obj = (Object[])iter.next(); 
        System.out.println(obj[0] + ", " + obj[1]); 
      }

注:條件查詢(xún)和原生的sql相同,都是where關(guān)鍵字。另外通常使用別名比較方便,上述程序是查詢(xún)多個(gè)屬性,所以返回的是對(duì)象數(shù)組類(lèi)型的集合,對(duì)象數(shù)組中的元素就是對(duì)應(yīng)的屬性。

8.占位符的形式查詢(xún):

/*鏈?zhǔn)骄幊?/ 
      List<Object[]> students = session.createQuery("select s.id, s.name from Student s where s.name like ?") 
          .setParameter(0, "%0%") 
          .list(); 
      /*遍歷*/ 
      for (Iterator<Object[]> iter=students.iterator(); iter.hasNext();) { 
        Object[] obj = (Object[])iter.next(); 
        System.out.println(obj[0] + ", " + obj[1]); 
      } 

注:可以通過(guò)占位符的形式進(jìn)行傳參,這種方式可以防止SQL注入。

9.自定義參數(shù)的形式:

/*鏈?zhǔn)骄幊?/ 
      List<Object[]> students = session.createQuery("select s.id, s.name from Student s where s.name like :myname") 
          .setParameter("myname", "%0%") 
          .list(); 
      /*對(duì)象數(shù)組*/ 
      for (Iterator<Object[]> iter=students.iterator(); iter.hasNext();) { 
        Object[] obj = (Object[])iter.next(); 
        System.out.println(obj[0] + ", " + obj[1]); 
      } 

注:like :myname冒號(hào)后面是沒(méi)有空格的,否則會(huì)出錯(cuò)。

10.查詢(xún)條件為in的形式:

[java] view plain copy
/*采用in的方式,形參只要一個(gè)即可*/ 
      List<Object[]> students = session.createQuery("select s.id, s.name from Student s where s.id in(:ids)") 
          .setParameterList("ids", new Object[]{1, 2, 3, 4, 5}) 
          .list(); 
      /*遍歷*/ 
      for (Iterator<Object[]> iter=students.iterator(); iter.hasNext();) { 
        Object[] obj = (Object[])iter.next(); 
        System.out.println(obj[0] + ", " + obj[1]); 
      }

注:in后面的括號(hào)中只要有一個(gè)形參即可,我們?cè)O(shè)置參數(shù)值的時(shí)候,可以通過(guò)對(duì)象數(shù)組就行傳值。

11.使用數(shù)據(jù)庫(kù)個(gè)性化函數(shù):

/*查詢(xún)2009-08的學(xué)生,可以調(diào)用mysql的日期格式化函數(shù)*/ 
      List<Object[]> students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?") 
          .setParameter(0, "2009-08") 
          .list(); 
      /*遍歷*/ 
      for (Iterator<Object[]> iter=students.iterator(); iter.hasNext();) { 
        Object[] obj = (Object[])iter.next(); 
        System.out.println(obj[0] + ", " + obj[1]); 
      } 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      /*查詢(xún)2009-08-01 到2009-08-20的學(xué)生,可以調(diào)用mysql的日期格式化函數(shù)*/ 
      List<Object[]> students = session.createQuery("select s.id, s.name from Student s where s.createTime between ? and ?") 
          .setParameter(0, sdf.parse("2009-08-01 00:00:00")) 
          .setParameter(1, sdf.parse("2009-08-20 23:59:59")) 
          .list(); 
      /*遍歷*/ 
      for (Iterator<Object[]> iter=students.iterator(); iter.hasNext();) { 
        Object[] obj = (Object[])iter.next(); 
        System.out.println(obj[0] + ", " + obj[1]); 
      }

12.使用原生態(tài)的SQL語(yǔ)句:

/*使用select * 必須使用原生態(tài)的SQL語(yǔ)句,另外它類(lèi)似于hql查詢(xún)多個(gè)屬性,所以返回的是一個(gè)對(duì)象數(shù)組類(lèi)型的集合*/ 
      List<Object[]> students = session.createSQLQuery("select * from t_student").list(); 
      /*遍歷*/ 
      for (Iterator<Object[]> iter = students.iterator(); iter.hasNext();) { 
        Object[] obj = (Object[]) iter.next(); 
        System.out.println(obj[0] + ", " + obj[1]); 
      }

注:hql不支持select * 的查詢(xún)形式,但是Hibernate支持原生態(tài)的SQL語(yǔ)句,我們可以利用SQL語(yǔ)句進(jìn)行查詢(xún),另外它類(lèi)似于HQL的查詢(xún)多個(gè)屬性,所以返回的是一個(gè)對(duì)象數(shù)組類(lèi)型的集合。

13.分頁(yè)查詢(xún)

/*分頁(yè)查詢(xún),setFirstResult(1)表示從第一條數(shù)據(jù)開(kāi)始查詢(xún);setMaxResult(2)表示每頁(yè)顯示2條數(shù)據(jù)*/ 
      List students = session.createQuery("from Student") 
            .setFirstResult(1) 
            .setMaxResults(2) 
            .list(); 
      /*遍歷*/ 
      for (Iterator iter=students.iterator(); iter.hasNext();) { 
        Student student = (Student)iter.next(); 
        System.out.println(student.getName()); 
      } 

14.導(dǎo)航查詢(xún)

/*導(dǎo)航查詢(xún),s.classes.name從學(xué)生導(dǎo)航到班級(jí)在導(dǎo)航到班級(jí)名稱(chēng)(這是從多的一端導(dǎo)航到少的一端,反過(guò)來(lái)也可以)*/ 
      List<Student> students = session.createQuery("from Student s where s.classes.name like '%2%'") 
            .list(); 
      /*遍歷*/ 
      for (Iterator<Student> iter=students.iterator(); iter.hasNext();) { 
        Student student = (Student)iter.next(); 
        System.out.println(student.getName()); 
      }

注:上述查詢(xún)語(yǔ)句中的s.classes.name是從學(xué)生導(dǎo)航到班級(jí)classes在獲取班級(jí)的名稱(chēng)name。也可以反過(guò)來(lái)導(dǎo)航:從班級(jí)導(dǎo)航到學(xué)生在得到某個(gè)屬性。另外程序中查詢(xún)語(yǔ)句的意思是要查詢(xún)班級(jí)名稱(chēng)中含有2的所有學(xué)生。

15.內(nèi)連接查詢(xún)

/*內(nèi)連接,使用join關(guān)鍵字即可*/ 
    List<Object[]> students = session.createQuery("select c.name, s.name from Student s join s.classes c") 
          .list(); 
    /*遍歷*/ 
    for (Iterator<Object[]> iter=students.iterator(); iter.hasNext();) { 
      Object[] obj = (Object[])iter.next(); 
      System.out.println(obj[0] + ", " + obj[1]); 
    } 

注:內(nèi)連接關(guān)鍵字為join,另外還是用了別名和導(dǎo)航進(jìn)行連接。上述查詢(xún)語(yǔ)句的意思為:從學(xué)生表和班級(jí)表中查詢(xún)中班級(jí)名稱(chēng)和學(xué)生名稱(chēng)(內(nèi)連接是查詢(xún)出必須有值得屬性,比如沒(méi)有班級(jí)沒(méi)有學(xué)生或者學(xué)生沒(méi)有班級(jí)是查詢(xún)不出來(lái)的)。

16.左連接

/*左連接使用關(guān)鍵字left join*/ 
      List<Object[]> students = session.createQuery("select c.name, s.name from Student s left join s.classes c") 
            .list(); 
      /*遍歷*/ 
      for (Iterator<Object[]> iter=students.iterator(); iter.hasNext();) { 
        Object[] obj = (Object[])iter.next(); 
        System.out.println(obj[0] + ", " + obj[1]); 
      }

注:使用左連接的關(guān)鍵字為left join。上述查詢(xún)語(yǔ)句的意思為:從學(xué)生和班級(jí)表中,查詢(xún)出班級(jí)名稱(chēng)和學(xué)生名稱(chēng),因?yàn)槭亲筮B接,所以沒(méi)有班級(jí)的學(xué)生也會(huì)被查詢(xún)出來(lái)。

17.右連接

[java] view plain copy
/*右連接關(guān)鍵字為right join*/ 
      List<Object[]> students = session.createQuery("select c.name, s.name from Student s right join s.classes c") 
            .list(); 
      /*遍歷*/ 
      for (Iterator<Object[]> iter=students.iterator(); iter.hasNext();) { 
        Object[] obj = (Object[])iter.next(); 
        System.out.println(obj[0] + ", " + obj[1]); 
      }

注:使用右連接的關(guān)鍵字為right join。上述查詢(xún)語(yǔ)句的意思為:從學(xué)生和班級(jí)表中,查詢(xún)出班級(jí)名稱(chēng)和學(xué)生名稱(chēng),因?yàn)槭怯疫B接,所以沒(méi)有學(xué)生的班級(jí)會(huì)被查詢(xún)出來(lái)。

18.統(tǒng)計(jì)查詢(xún)

Long count = (Long)session.createQuery("select count(*) from Student").uniqueResult();

注:hql中唯有統(tǒng)計(jì)查詢(xún)才可以帶*號(hào)。uniqueResult()表示只有一條結(jié)果集,返回的是Long類(lèi)型。

19.復(fù)合查詢(xún)

/*查詢(xún)語(yǔ)句*/ 
      String hql = "select c.name, count(s) from Classes c join c.students s group by c.name order by c.name"; 
       
      List<Object[]> students = session.createQuery(hql).list(); 
      /*遍歷*/ 
      for (int i=0; i<students.size(); i++) { 
        Object[] obj = (Object[])students.get(i); 
        System.out.println(obj[0] + ", " + obj[1]); 
      }

注:hql同樣支持分組、排序等等。上述語(yǔ)句的意思是:查詢(xún)每個(gè)班級(jí)的名稱(chēng)并且查詢(xún)出每個(gè)班級(jí)的學(xué)生人數(shù),按班級(jí)名稱(chēng)分組,按班級(jí)名稱(chēng)排序

總結(jié)

以上就是本文關(guān)于Hibernate hql查詢(xún)代碼實(shí)例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • 淺談SpringBoot中properties、yml、yaml的優(yōu)先級(jí)

    淺談SpringBoot中properties、yml、yaml的優(yōu)先級(jí)

    優(yōu)先級(jí)低的配置會(huì)被先加載,所以?xún)?yōu)先級(jí)高的配置會(huì)覆蓋優(yōu)先級(jí)低的配置,本文就來(lái)介紹一下SpringBoot中properties、yml、yaml的優(yōu)先級(jí),感興趣的可以了解一下
    2023-08-08
  • 一文帶你了解Java設(shè)計(jì)模式之原型模式

    一文帶你了解Java設(shè)計(jì)模式之原型模式

    原型模式其實(shí)就是從一個(gè)對(duì)象在創(chuàng)建另外一個(gè)可定制的對(duì)象,不需要知道任何創(chuàng)建的細(xì)節(jié)。本文就來(lái)通過(guò)示例為大家詳細(xì)聊聊原型模式,需要的可以參考一下
    2022-09-09
  • Java中Calendar時(shí)間操作常用方法詳解

    Java中Calendar時(shí)間操作常用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java中Calendar時(shí)間操作常用方法,calendar中set方法和靜態(tài)屬性帶來(lái)的一些坑,感興趣的小伙伴們可以參考一下
    2016-05-05
  • spring使用@Async注解導(dǎo)致循環(huán)依賴(lài)問(wèn)題異常的排查記錄

    spring使用@Async注解導(dǎo)致循環(huán)依賴(lài)問(wèn)題異常的排查記錄

    這篇文章主要介紹了spring使用@Async注解導(dǎo)致循環(huán)依賴(lài)問(wèn)題異常的排查記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 詳解AngularJs與SpringMVC簡(jiǎn)單結(jié)合使用

    詳解AngularJs與SpringMVC簡(jiǎn)單結(jié)合使用

    本篇文章主要介紹了AngularJs與SpringMVC簡(jiǎn)單結(jié)合使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • SpringMVC常用注解載入與處理方式詳解

    SpringMVC常用注解載入與處理方式詳解

    這篇文章主要介紹了SpringMVC常用注解載入的方式和處理的方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Spring 異常單元測(cè)試的解決

    Spring 異常單元測(cè)試的解決

    這篇文章主要介紹了Spring 異常單元測(cè)試的解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • 一文搞懂MyBatis一級(jí)緩存和二級(jí)緩存

    一文搞懂MyBatis一級(jí)緩存和二級(jí)緩存

    本文主要介紹了一文搞懂MyBatis一級(jí)緩存和二級(jí)緩存,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 學(xué)習(xí)Java之二叉樹(shù)的編碼實(shí)現(xiàn)過(guò)程詳解

    學(xué)習(xí)Java之二叉樹(shù)的編碼實(shí)現(xiàn)過(guò)程詳解

    本文將通過(guò)代碼來(lái)進(jìn)行二叉樹(shù)的編碼實(shí)現(xiàn),文中的代碼示例介紹的非常詳細(xì),對(duì)我們學(xué)習(xí)Java二叉樹(shù)有一定的幫助,感興趣的同學(xué)跟著小編一起來(lái)看看吧
    2023-08-08
  • java實(shí)現(xiàn)追加內(nèi)容到文件末尾的常用方法分析

    java實(shí)現(xiàn)追加內(nèi)容到文件末尾的常用方法分析

    這篇文章主要介紹了java實(shí)現(xiàn)追加內(nèi)容到文件末尾的常用方法,結(jié)合具體實(shí)例分析了java文件流及寫(xiě)入指針等相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10

最新評(píng)論