Предисловие
Когда мы делаем проектирование на основе сервиса, особенно когда большие данные вставляются в партиях, обычные фреймворки ORM (Mybatis, Hibernate, JPA) не могут удовлетворить требования к эффективности программы. Конечно, для нас невозможно использовать местный JDBC для работы, так что, хотя эффективность будет высокой, сложность увеличится.
Учитывая всестороннее, мы используем JDBctemplate весной и названный ParameterJdbctemplate для выполнения партийных операций.
Перед трансформацией
Прежде чем мы начнем объяснение, давайте сначала посмотрим, как JPA эксплуатировался партиями.
Пользователь объекта:
открытый класс AppStudent {Private Integer ID; частная целочисленная классика; Приватное название строки; частный целый возраст; // псевдокод, пропущенные конструкции и получить, установить методы}Dynamicquery Pseudocode:
@RepositoryPublic Class DynamicQueryImpl реализует DynamicQuery {@persistenceContext Private EntityManager EM; Public EntityManager getEntityManager () {return em; } // Фактически, это просто для цикла и использования постоянного метода EntityManager для сохранения @Override public <t> void savelist (list <t> resultlist) {for (int i = 0; i <resoudllist.size (); i ++) {t t = resultlist.get (i); em.persist (t); }}}После трансформации
Jdbctemplate
Основные методы, предоставленные JDBctemplate:
Нам просто нужно использовать @autowired для инъекции в классе jdbctemplate:
@AutowiredPrivate jdbctemplate jdbctemplate;
Операция пакетной вставки:
public void batchsave () {list <Object []> batchargs = new ArrayList <Object []> (); batchargs.add (новый объект [] {1, "xiao ming", 21}); batchargs.add (новый объект [] {2, "xiaohong", 22}); batchargs.add (новый объект [] {3, "Люси", 23}); String sql = "Вставка в пользовательские (имя пользователя, пароль) значения (?,?)"; jdbctemplate.batchupdate (sql, batchargs);}Вышеуказанное в основном реализует функцию пакетной вставки, но когда существует много полей базы данных, может быть не так хорошо кодировать ее в форме заполнителя. Здесь Spring также обеспечивает SimpleJdbctemplate (Spring3.1+ помечен как устаревший позже, но она полностью удалена весной 4.3. Последний может полностью удовлетворить потребности) и шаблон natedParameterJdbctemplate.
NatedParameterjdbctemplate
Я считаю, что студенты, которые использовали Hibernate, знают, что его можно использовать в HQL? Или: * Для настройки параметров запроса извне. В Spring JDBC Framework также предоставляется способ привязки параметров SQL с использованием названных параметров.
Нам просто нужно использовать @autowired для инъекции в классе по имени Pparameterjdbctemplate:
@Autowiredprivate nameparameterjdbctemplate nameparameterjdbctemplate;
Операция пакетной вставки:
public void pactorsave () {list <user> list = new ArrayList <user> (); // Добавить новый список пользователей. ADD (New AppStudent (1, "Zhang San", 21)); list.add (новый Appstudent (1, "li Si", 22)); list.add (новый Appstudent (1, "Wang Ermazi", 23)); // batch to Array sqlParameterSource [] beansources = sqlparametersourceutils.createbatch (list.toarray ()); String sql = "Вставка в app_student (class_id, name, age) значения (: classid ,: name ,: age)"; nameparameterjdbctemplate.batchupdate (sql, beansources);}Наконец, мы используем System.currentTimeMillis () для сравнения и печати времени выполнения до и после конкретного преобразования.
long start = System.currentTimeMillis (); // Реконструировать код до и после и дополнить его самим end = System.currentTimeMillis (); System.out.println («Второе время:»+(конечная группа));
Быстрый определенно быстрый. Что касается того, насколько быстро это должно сделать соответствующее сравнение на основе объема данных и конфигурации машины.
Исходный код проекта: https://gitee.com/52itstyle/spring-data-jpa
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.