最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Hibernate+JDBC實(shí)現(xiàn)批量插入、更新及刪除的方法詳解

 更新時(shí)間:2017年11月01日 10:04:46   作者:淺淺請(qǐng)留步  
這篇文章主要介紹了Hibernate+JDBC實(shí)現(xiàn)批量插入、更新及刪除的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Hibernate與JDBC針對(duì)數(shù)據(jù)庫(kù)的批量操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了Hibernate JDBC實(shí)現(xiàn)批量插入、更新及刪除的方法。分享給大家供大家參考,具體如下:

一、批量插入(兩種方式)

1. 通過(guò)Hibernate緩存

如果這樣寫(xiě)代碼進(jìn)行批量插入(初始設(shè)想):

package com.anlw.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import com.anlw.entity.Student;
public class SessionUtil {
  Configuration conf = null;
  ServiceRegistry st = null;
  SessionFactory sf = null;
  Session sess = null;
  Transaction tx = null;
  public void HIbernateTest() {
    conf = new Configuration().configure();
    st = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
    sf = conf.buildSessionFactory(st);
    try {
      sess = sf.openSession();
      tx = sess.beginTransaction();
      for (int i = 0; i < 10; i++) {
        Student s = new Student();
        s.setAge(i + 1);
        s.setName("test");
        sess.save(s);
      }
      tx.commit();
    } catch (Exception e) {
      if (tx != null) {
        tx.rollback();
      }
    } finally {
      sess.close();
      sf.close();
    }
  }
  public static void main(String[] args) {
    new SessionUtil().HIbernateTest();
  }
}

如果數(shù)據(jù)量太大,會(huì)有可能出現(xiàn)內(nèi)存溢出的異常;

小知識(shí):

(1).Hibernate一級(jí)緩存,對(duì)其容量沒(méi)有限制,強(qiáng)制使用,由于所有的對(duì)象都被保存到這個(gè)緩存中,內(nèi)存總會(huì)達(dá)到一定數(shù)目時(shí)出現(xiàn)內(nèi)存溢出的情況;
(2).Hibernate二級(jí)緩存可以進(jìn)行大小配置;

要解決內(nèi)存溢出的問(wèn)題,就應(yīng)該定時(shí)的將Sessiion緩存中的數(shù)據(jù)刷到數(shù)據(jù)庫(kù),正確的批量插入方式:

(1).設(shè)置批量尺寸(博主至今還沒(méi)有明白下面這個(gè)屬性和flush()方法的區(qū)別)

<property name="hibernate.jdbc.batch_size">2</property>

配置這個(gè)參數(shù)的原因就是盡量少讀數(shù)據(jù)庫(kù),該參數(shù)值越大,讀數(shù)據(jù)庫(kù)的次數(shù)越少,速度越快;上面這個(gè)配置,是Hibernate是等到程序積累了100個(gè)sql之后在批量提交;

(2).關(guān)閉二級(jí)緩存(這個(gè)博主也不是很明白)

<property name="hibernate.cache.use_second_level_cache">false</property>

除了Session級(jí)別的一級(jí)緩存,Hibernate還有一個(gè)SessionFactory級(jí)別的二級(jí)緩存,如果啟用了二級(jí)緩存,從機(jī)制上來(lái)說(shuō),Hibernate為了維護(hù)二級(jí)緩存,在批量插入時(shí),hibernate會(huì)將對(duì)象納入二級(jí)緩存,性能上就會(huì)有很大損失,也可能引發(fā)異常,因此最好關(guān)閉SessionFactory級(jí)別的二級(jí)緩存;

(3).在一二設(shè)置完成的基礎(chǔ)上,清空Session級(jí)別的一級(jí)緩存;

package com.anlw.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import com.anlw.entity.Student;
public class SessionUtil {
  Configuration conf = null;
  ServiceRegistry st = null;
  SessionFactory sf = null;
  Session sess = null;
  Transaction tx = null;
  public void HIbernateTest() {
    conf = new Configuration().configure();
    st = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
    sf = conf.buildSessionFactory(st);
    try {
      sess = sf.openSession();
      tx = sess.beginTransaction();
      for (int i = 0; i < 10; i++) {
        Student s = new Student();
        s.setAge(i + 1);
        s.setName("test");
        sess.save(s);
        if(i%100 == 0){       //以每100個(gè)數(shù)據(jù)作為一個(gè)處理單元
          sess.flush();      //保持與數(shù)據(jù)庫(kù)數(shù)據(jù)的同步
          sess.clear();      //清楚Session級(jí)別的一級(jí)緩存的全部數(shù)據(jù),及時(shí)釋放占用的內(nèi)存
        }
      }
      tx.commit();
    } catch (Exception e) {
      if (tx != null) {
        tx.rollback();
      }
    } finally {
      sess.close();
      sf.close();
    }
  }
  public static void main(String[] args) {
    new SessionUtil().HIbernateTest();
  }
}

2. 繞過(guò)Hibernate,直接調(diào)用JDBC API

package com.anlw.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
public class SessionUtil {
  Configuration conf = null;
  ServiceRegistry st = null;
  SessionFactory sf = null;
  Session sess = null;
  Transaction tx = null;
  public void HIbernateTest() {
    conf = new Configuration().configure();
    st = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
    sf = conf.buildSessionFactory(st);
    try {
      sess = sf.openSession();
      tx = sess.beginTransaction();
      //執(zhí)行Work對(duì)象指定的操作,即調(diào)用Work對(duì)象的execute()方法
      //Session會(huì)把當(dāng)前使用的數(shù)據(jù)庫(kù)連接傳給execute()方法
      sess.doWork(new Work() {
        @Override
        public void execute(Connection arg0) throws SQLException {//需要注意的是,不需要調(diào)用close()方法關(guān)閉這個(gè)連接
          //通過(guò)JDBC API執(zhí)行用于批量插入的sql語(yǔ)句
          String sql = "insert into student(name,age) values(?,?)";
          PreparedStatement ps = arg0.prepareStatement(sql);
          for(int i=0;i<10;i++){
            ps.setString(1, "kobe");
            ps.setInt(2,12);
            ps.addBatch();
          }
          ps.executeBatch();
        }
      });
      tx.commit();
    } catch (Exception e) {
      if (tx != null) {
        tx.rollback();
      }
    } finally {
      sess.close();
      sf.close();
    }
  }
  public static void main(String[] args) {
    new SessionUtil().HIbernateTest();
  }
}

注意:通過(guò)JDBC API中的PreparedStatement接口來(lái)執(zhí)行sql語(yǔ)句,sql語(yǔ)句涉及到的數(shù)據(jù)不會(huì)被加載到Session的緩存中,因此不會(huì)占用內(nèi)存空間,因此直接調(diào)用JDBC API批量化插入的效率要高于Hibernate緩存的批量插入;

更新&&刪除

語(yǔ)法格式:(HQL)

update  |     delete from? <ClassName> [where where_conditions]

1>在from子句中,from關(guān)鍵字是可選的,即完全可以不寫(xiě)from關(guān)鍵字
2>在from子句中,只能有一個(gè)類名,可以在該類名后指定別名
3>不能在批量HQL語(yǔ)句中使用連接,顯示或者隱式的都不行,但可以在where子句中使用子查詢
4>整個(gè)where子句是可選的,where子句的語(yǔ)法sql語(yǔ)句中where子句的語(yǔ)法完全相同
5>Query.executeUpdate()方法返回一個(gè)整型值,該值是受此操作影響的記錄數(shù)量,由于hibernate的底層操作實(shí)際上是由JDBC完成的,因此,如果有批量update或delete操作被轉(zhuǎn)換成多條update或delete語(yǔ)句,(關(guān)聯(lián)或者繼承映射),該方法只能返回最后一條sql語(yǔ)句影響的記錄行數(shù),不是所有的記錄行數(shù),需要注意;

二、批量更新(兩種方式)

1. 使用Hibernate直接進(jìn)行批量更新

(1)方式1:(Hibernate的HQL直接支持update/delete的批量更新語(yǔ)法)

package com.anlw.util;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class SessionUtil {
  Configuration conf = null;
  ServiceRegistry st = null;
  SessionFactory sf = null;
  Session sess = null;
  Transaction tx = null;
  public void HIbernateTest() {
    conf = new Configuration().configure();
    st = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
    sf = conf.buildSessionFactory(st);
    try {
      sess = sf.openSession();
      tx = sess.beginTransaction();
      //在HQL查詢中使用update進(jìn)行批量更新,下面的的語(yǔ)句是HQL語(yǔ)句,不是sql語(yǔ)句
      Query query = sess.createQuery("update Student set name = 'www'");
      query.executeUpdate();
      tx.commit();
    } catch (Exception e) {
      if (tx != null) {
        tx.rollback();
      }
    } finally {
      sess.close();
      sf.close();
    }
  }
  public static void main(String[] args) {
    new SessionUtil().HIbernateTest();
  }
}

(2)方式2:(強(qiáng)烈不推薦)

package com.anlw.util;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import org.hibernate.CacheMode;
import org.hibernate.Query;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
import com.anlw.entity.Student;
public class SessionUtil {
  Configuration conf = null;
  ServiceRegistry st = null;
  SessionFactory sf = null;
  Session sess = null;
  Transaction tx = null;
  public void HIbernateTest() {
    conf = new Configuration().configure();
    st = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
    sf = conf.buildSessionFactory(st);
    try {
      sess = sf.openSession();
      tx = sess.beginTransaction();
      //查詢表中的所有數(shù)據(jù)
      ScrollableResults student = sess.createQuery("from Student")
          .setCacheMode(CacheMode.IGNORE)
          .scroll(ScrollMode.FORWARD_ONLY);
      int count = 0;
      while(student.next()){
        Student s = (Student)student.get(0);
        s.setName("haha");
        if(++count%3 == 0){
          sess.flush();
          sess.clear();
        }
      }
      tx.commit();
    } catch (Exception e) {
      if (tx != null) {
        tx.rollback();
      }
    } finally {
      sess.close();
      sf.close();
    }
  }
  public static void main(String[] args) {
    new SessionUtil().HIbernateTest();
  }
}

通過(guò)這種方式,雖然可以執(zhí)行批量更新,但效果非常不好,執(zhí)行效率不高,需要先執(zhí)行數(shù)據(jù)查詢,然后再執(zhí)行數(shù)據(jù)更新,而且這種更新將是逐行更新,即每更新一行記錄,都要執(zhí)行一條update語(yǔ)句,性能非常低;

2. 繞過(guò)Hibernate,調(diào)用JDBC API

(1)方式1:

package com.anlw.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
public class SessionUtil {
  Configuration conf = null;
  ServiceRegistry st = null;
  SessionFactory sf = null;
  Session sess = null;
  Transaction tx = null;
  public void HIbernateTest() {
    conf = new Configuration().configure();
    st = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
    sf = conf.buildSessionFactory(st);
    try {
      sess = sf.openSession();
      tx = sess.beginTransaction();
      //執(zhí)行Work對(duì)象指定的操作,即調(diào)用Work對(duì)象的execute()方法
      //Session會(huì)把當(dāng)前使用的數(shù)據(jù)庫(kù)連接傳給execute()方法
      sess.doWork(new Work() {
        @Override
        public void execute(Connection arg0) throws SQLException {//需要注意的是,不需要調(diào)用close()方法關(guān)閉這個(gè)連接
          String sql = "update student set name = 'oracle'";
          //創(chuàng)建一個(gè)Satement對(duì)象
          Statement st = arg0.createStatement();
          //調(diào)用JDBC的update進(jìn)行批量更新
          st.executeUpdate(sql);
        }
      });
      tx.commit();
    } catch (Exception e) {
      if (tx != null) {
        tx.rollback();
      }
    } finally {
      sess.close();
      sf.close();
    }
  }
  public static void main(String[] args) {
    new SessionUtil().HIbernateTest();
  }
}

(2)方式2:

package com.anlw.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
public class SessionUtil {
  Configuration conf = null;
  ServiceRegistry st = null;
  SessionFactory sf = null;
  Session sess = null;
  Transaction tx = null;
  public void HIbernateTest() {
    conf = new Configuration().configure();
    st = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
    sf = conf.buildSessionFactory(st);
    try {
      sess = sf.openSession();
      tx = sess.beginTransaction();
      //執(zhí)行Work對(duì)象指定的操作,即調(diào)用Work對(duì)象的execute()方法
      //Session會(huì)把當(dāng)前使用的數(shù)據(jù)庫(kù)連接傳給execute()方法
      sess.doWork(new Work() {
        @Override
        public void execute(Connection arg0) throws SQLException {//需要注意的是,不需要調(diào)用close()方法關(guān)閉這個(gè)連接
          String sql = "update student set name = ? where name=?";
          PreparedStatement ps = arg0.prepareStatement(sql);
          for(int i=0;i<10;i++){
            ps.setString(1,"tom");
            ps.setString(2, "oracle");
            ps.addBatch();
          }
          ps.executeBatch();
        }
      });
      tx.commit();
    } catch (Exception e) {
      if (tx != null) {
        tx.rollback();
      }
    } finally {
      sess.close();
      sf.close();
    }
  }
  public static void main(String[] args) {
    new SessionUtil().HIbernateTest();
  }
}

三、批量刪除(兩種方式)

1. 使用Hibernate直接進(jìn)行批量刪除

(1)方式1:(Hibernate的HQL直接支持update/delete的批量更新語(yǔ)法)

package com.anlw.util;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class SessionUtil {
  Configuration conf = null;
  ServiceRegistry st = null;
  SessionFactory sf = null;
  Session sess = null;
  Transaction tx = null;
  public void HIbernateTest() {
    conf = new Configuration().configure();
    st = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
    sf = conf.buildSessionFactory(st);
    try {
      sess = sf.openSession();
      tx = sess.beginTransaction();
      //在HQL查詢中使用delete進(jìn)行批量刪除,下面的的語(yǔ)句是HQL語(yǔ)句,不是sql
      Query query = sess.createQuery("delete Student");//也可以是delete from,from關(guān)鍵字是可選的,可以不要,加條件的時(shí)候可以指定類的別名
      query.executeUpdate();
      tx.commit();
    } catch (Exception e) {
      if (tx != null) {
        tx.rollback();
      }
    } finally {
      sess.close();
      sf.close();
    }
  }
  public static void main(String[] args) {
    new SessionUtil().HIbernateTest();
  }
}

(2)方式2:(強(qiáng)烈不推薦)

package com.anlw.util;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import org.hibernate.CacheMode;
import org.hibernate.Query;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
import com.anlw.entity.Student;
public class SessionUtil {
  Configuration conf = null;
  ServiceRegistry st = null;
  SessionFactory sf = null;
  Session sess = null;
  Transaction tx = null;
  public void HIbernateTest() {
    conf = new Configuration().configure();
    st = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
    sf = conf.buildSessionFactory(st);
    try {
      sess = sf.openSession();
      tx = sess.beginTransaction();
      //查詢表中的所有數(shù)據(jù)
      ScrollableResults student = sess.createQuery("from Student")
          .setCacheMode(CacheMode.IGNORE)
          .scroll(ScrollMode.FORWARD_ONLY);
      int count = 0;
      while(student.next()){
        Student s = (Student)student.get(0);
        sess.delete(s);
      }
      tx.commit();
    } catch (Exception e) {
      if (tx != null) {
        tx.rollback();
      }
    } finally {
      sess.close();
      sf.close();
    }
  }
  public static void main(String[] args) {
    new SessionUtil().HIbernateTest();
  }
}

通過(guò)這種方式,雖然可以執(zhí)行批量刪除,但效果非常不好,執(zhí)行效率不高,需要先執(zhí)行數(shù)據(jù)查詢,然后再執(zhí)行數(shù)據(jù)刪除,而且這種刪除將是逐行刪除,即每刪除一行記錄,都要執(zhí)行一條delete語(yǔ)句,性能非常低;

2. 繞過(guò)Hibernate,調(diào)用JDBC API

(1)方式1:

package com.anlw.util;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
import com.anlw.entity.Student;
public class SessionUtil {
  Configuration conf = null;
  ServiceRegistry st = null;
  SessionFactory sf = null;
  Session sess = null;
  Transaction tx = null;
  public void HIbernateTest() {
    conf = new Configuration().configure();
    st = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
    sf = conf.buildSessionFactory(st);
    try {
      sess = sf.openSession();
      tx = sess.beginTransaction();
      sess.doWork(new Work() {
        @Override
        public void execute(Connection arg0) throws SQLException {
          String sql = "delete from student where age > 5"; //mysql中刪除語(yǔ)句不能省略from
          Statement st = arg0.createStatement();
          st.executeUpdate(sql);
        }
      });
      tx.commit();
    } catch (Exception e) {
      if (tx != null) {
        tx.rollback();
      }
    } finally {
      sess.close();
      sf.close();
    }
  }
  public static void main(String[] args) {
    new SessionUtil().HIbernateTest();
  }
}

2)方式2:

package com.anlw.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
import com.anlw.entity.Student;
public class SessionUtil {
  Configuration conf = null;
  ServiceRegistry st = null;
  SessionFactory sf = null;
  Session sess = null;
  Transaction tx = null;
  public void HIbernateTest() {
    conf = new Configuration().configure();
    st = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
    sf = conf.buildSessionFactory(st);
    try {
      sess = sf.openSession();
      tx = sess.beginTransaction();
      sess.doWork(new Work() {
        @Override
        public void execute(Connection arg0) throws SQLException {
          String sql = "delete from student where age = ?"; //mysql中刪除語(yǔ)句不能省略from
          PreparedStatement ps = arg0.prepareStatement(sql);
          for(int i=0;i<10;i++){
            if(i%2 == 0){
              ps.setInt(1, i);
              ps.addBatch();
            }
            ps.executeBatch();
          }
        }
      });
      tx.commit();
    } catch (Exception e) {
      if (tx != null) {
        tx.rollback();
      }
    } finally {
      sess.close();
      sf.close();
    }
  }
  public static void main(String[] args) {
    new SessionUtil().HIbernateTest();
  }
}

希望本文所述對(duì)大家基于Hibernate的java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • java使用反射給對(duì)象屬性賦值的兩種方法

    java使用反射給對(duì)象屬性賦值的兩種方法

    JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法,下面這篇文章主要給大家介紹了關(guān)于java使用反射給對(duì)象屬性賦值的兩種方法,需要的朋友可以參考下
    2023-04-04
  • 一文詳解Java中的Stream的匯總和分組操作

    一文詳解Java中的Stream的匯總和分組操作

    這篇文章主要為大家詳細(xì)介紹了Java8中的Stream的匯總和分組的操作,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-09-09
  • 基于RxPaparazzo實(shí)現(xiàn)圖片裁剪、圖片旋轉(zhuǎn)、比例放大縮小功能

    基于RxPaparazzo實(shí)現(xiàn)圖片裁剪、圖片旋轉(zhuǎn)、比例放大縮小功能

    這篇文章主要為大家詳細(xì)介紹了基于RxPaparazzo實(shí)現(xiàn)圖片裁剪、圖片旋轉(zhuǎn)、比例放大縮小功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)組的方法小結(jié)

    Java數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)組的方法小結(jié)

    在現(xiàn)代軟件開(kāi)發(fā)中,數(shù)組是常用的數(shù)據(jù)結(jié)構(gòu)之一,然而,在關(guān)系數(shù)據(jù)庫(kù)中直接存儲(chǔ)數(shù)組并不是一個(gè)簡(jiǎn)單的任務(wù),本文將詳細(xì)介紹幾種在Java中將數(shù)組存儲(chǔ)到數(shù)據(jù)庫(kù)的方法,包括使用JPA、JSON、XML、以及關(guān)系型數(shù)據(jù)庫(kù)的數(shù)組類型等,需要的朋友可以參考下
    2024-09-09
  • java中對(duì)象的比較equal、Comparble、Comparator的區(qū)別

    java中對(duì)象的比較equal、Comparble、Comparator的區(qū)別

    本文主要介紹了java中對(duì)象的比較equal、Comparble、Comparator的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • swagger如何返回map字段注釋

    swagger如何返回map字段注釋

    這篇文章主要介紹了swagger如何返回map字段注釋的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Mybatis的collection三層嵌套查詢方式(驗(yàn)證通過(guò))

    Mybatis的collection三層嵌套查詢方式(驗(yàn)證通過(guò))

    這篇文章主要介紹了Mybatis的collection三層嵌套查詢方式(驗(yàn)證通過(guò)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java 實(shí)戰(zhàn)項(xiàng)目之疫情防控管理系統(tǒng)詳解

    Java 實(shí)戰(zhàn)項(xiàng)目之疫情防控管理系統(tǒng)詳解

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)疫情防控管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • java?LeetCode刷題稍有難度的貪心構(gòu)造算法

    java?LeetCode刷題稍有難度的貪心構(gòu)造算法

    這篇文章主要為大家介紹了java?LeetCode刷題稍有難度的貪心構(gòu)造題解示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • SpringMVC中controller返回json數(shù)據(jù)的方法

    SpringMVC中controller返回json數(shù)據(jù)的方法

    這篇文章主要為大家詳細(xì)介紹了SpringMVC中controller返回json數(shù)據(jù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09

最新評(píng)論

博野县| 鞍山市| 隆安县| 周口市| 昌吉市| 吕梁市| 呼和浩特市| 吉安市| 和政县| 景洪市| 英吉沙县| 安国市| 时尚| 新竹县| 渭南市| 永顺县| 丰县| 营口市| 河北省| 南投市| 周口市| 高淳县| 若羌县| 文昌市| 伊春市| 盐津县| 邹平县| 曲麻莱县| 九寨沟县| 崇明县| 黄陵县| 德兴市| 读书| 鹤壁市| 璧山县| 故城县| 乐安县| 和顺县| 北碚区| 新绛县| 盖州市|