gpt4 book ai didi

Hibernate实现批量添加数据的方法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Hibernate实现批量添加数据的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了Hibernate实现批量添加数据的方法。分享给大家供大家参考,具体如下:

1.Hibernate_016_BatchAddData程序目录结构:

Hibernate实现批量添加数据的方法

2.lib目录下所引入的jar包:

Hibernate实现批量添加数据的方法

3.MedicineDao.java源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.xqh.dao;
import java.util.List;
import org.hibernate.Session;
import com.xqh.model.Medicine;
import com.xqh.util.HibernateUtil;
/**
  * 药品数据库操作类
  *
  */
public class MedicineDao {
   /**
    * 批量保存药品
    *
    * @param ms
    *      List集合
    */
   public void saveMedicines(List<Medicine> ms) {
     Session session = null ;
     if (ms != null && ms.size() > 0 ) {
       try {
         session = HibernateUtil.getSession(); // 获取Session
         session.beginTransaction(); // 开启事物
         Medicine medicine = null ; // 创建药品对象
         // 循环获取药品对象
         for ( int i = 0 ; i < ms.size(); i++) {
           medicine = (Medicine) ms.get(i); // 获取药品
           session.save(medicine); // 保存药品对象
           // 批插入的对象立即写入数据库并释放内存
           if (i % 10 == 0 ) {
             session.flush();
             session.clear();
           }
         }
         session.getTransaction().commit(); // 提交事物
       } catch (Exception e) {
         e.printStackTrace(); // 打印错误信息
         session.getTransaction().rollback(); // 出错将回滚事物
       } finally {
         HibernateUtil.closeSession(session); // 关闭Session
       }
     }
   }
}

4.Medicine.java源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.xqh.model;
/**
  * 药品持久化类
  */
public class Medicine {
   private Integer id;       //id号
   private String name;      //药品名称
   private double price;      //价格
   private String factoryAdd;   //出厂地址
   public Integer getId() {
     return id;
   }
   public void setId(Integer id) {
     this .id = id;
   }
   public String getName() {
     return name;
   }
   public void setName(String name) {
     this .name = name;
   }
   public double getPrice() {
     return price;
   }
   public void setPrice( double price) {
     this .price = price;
   }
   public String getFactoryAdd() {
     return factoryAdd;
   }
   public void setFactoryAdd(String factoryAdd) {
     this .factoryAdd = factoryAdd;
   }
}

5.Medicine.hbm.xml源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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>
   < class name= "com.xqh.model.Medicine" table= "tb_medicine_batch" >
     <id name= "id" >
       <generator class = "native" />
     </id>
     <property name= "name" not- null = "true" length= "200" />
     <property name= "price" not- null = "true" />
     <property name= "factoryAdd" length= "200" />
   </ class >
</hibernate-mapping>

6.SaveMedicine.java源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.xqh.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xqh.dao.MedicineDao;
import com.xqh.model.Medicine;
public class SaveMedicine extends HttpServlet {
   private static final long serialVersionUID = 3743334039515411666L;
   public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
     // 药品名称
     String names[] = request.getParameterValues( "name" );
     // 价格
     String prices[] = request.getParameterValues( "price" );
     // 出厂地址
     String adds[] = request.getParameterValues( "factoryAdd" );
     // 有效性判断
     if (names != null && prices != null && adds != null ){
       if (names.length == prices.length && names.length == adds.length){
         // 实例化一个List集合
         List<Medicine> ms = new ArrayList<Medicine>();
         Medicine m = null ; // 药品对象
         // 依次实例化药品对象并添加到集合中
         for ( int i = 0 ; i < names.length; i++) {
           m = new Medicine(); // 实例化药品
           // 对属性赋值
           m.setName(names[i]);
           m.setPrice(Double.parseDouble(prices[i]));
           m.setFactoryAdd(adds[i]);
           ms.add(m); // 添加到集合中
         }
         // 实例化MedicineDao对象
         MedicineDao dao = new MedicineDao();
         dao.saveMedicines(ms); // 批量保存药品
         request.setAttribute( "info" , "药品信息保存成功!!!" );
       }
     }
     // 转发到result.jsp页面
     request.getRequestDispatcher( "result.jsp" ).forward(request, response);
   }
}

7.CharacterEncodingFilter.java源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
  * To change this template, choose Tools | Templates
  * and open the template in the editor.
  */
package com.xqh.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
  * 字符编码过滤器
  */
public class CharacterEncodingFilter implements Filter{
   protected String encoding = null ;
   protected FilterConfig filterConfig = null ;
   public void init(FilterConfig filterConfig) throws ServletException {
     this .filterConfig = filterConfig;
     this .encoding = filterConfig.getInitParameter( "encoding" );
   }
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
     if (encoding != null ) {
       request.setCharacterEncoding(encoding);
       response.setContentType( "text/html; charset=" +encoding);
     }
     chain.doFilter(request, response);
   }
   public void destroy() {
     this .encoding = null ;
     this .filterConfig = null ;
   }
}

8.HibernateUtil.java源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.xqh.util;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
  * Hibernate初始化类,用于获取Session、SessionFactory 及关闭Session
  */
public class HibernateUtil {
   // SessionFactory对象
   private static SessionFactory factory = null ;
   // 静态块
   static {
     try {
       // 加载Hibernate配置文件
       Configuration cfg = new Configuration().configure();
       // 实例化SessionFactory
       factory = cfg.buildSessionFactory();
     } catch (HibernateException e) {
       e.printStackTrace();
     }
   }
   /**
    * 获取Session对象
    * @return Session对象
    */
   public static Session getSession() {
     //如果SessionFacroty不为空,则开启Session
     Session session = (factory != null ) ? factory.openSession() : null ;
     return session;
   }
   /**
    * 获取SessionFactory对象
    * @return SessionFactory对象
    */
   public static SessionFactory getSessionFactory() {
     return factory;
   }
   /**
    * 关闭Session
    * @param session对象
    */
   public static void closeSession(Session session) {
     if (session != null ) {
       if (session.isOpen()) {
         session.close(); // 关闭Session
       }
     }
   }
}

9.hibernate.cfg.xml源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<? xml version = '1.0' encoding = 'UTF-8' ?>
<!DOCTYPE hibernate-configuration PUBLIC
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
< hibernate-configuration >
   < session-factory >
     <!-- 方言 -->
     < property name = "dialect" >org.hibernate.dialect.MySQLDialect</ property >
     <!-- 数据库连接 -->
     < property name = "connection.url" >jdbc:mysql://localhost:3306/learn</ property >
     <!-- 数据库连接用户名 -->
     < property name = "connection.username" >root</ property >
     <!-- 数据库连接密码 -->
     < property name = "connection.password" >1120</ property >
     <!-- 数据库驱动 -->
     < property name = "connection.driver_class" >com.mysql.jdbc.Driver</ property >
     <!-- 打印SQL语句 -->
     < property name = "show_sql" >true</ property >
     <!-- 自动建表 -->
     < property name = "hibernate.hbm2ddl.auto" >update</ property >
     <!-- 映射文件 -->
     < mapping resource = "com/xqh/model/Medicine.hbm.xml" />
   </ session-factory >
</ hibernate-configuration >

10.log4j.properties源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout
#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug
### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug
### log just the SQL
#log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug
### log schema export/update ###
#log4j.logger.org.hibernate.tool.hbm2ddl=debug
### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug
### log cache activity ###
#log4j.logger.org.hibernate.cache=debug
### log transaction activity
#log4j.logger.org.hibernate.transaction=debug
### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

11.index.jsp源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<%@ page language= "java" contentType= "text/html" pageEncoding= "GBK" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<html>
   <head>
     <title>批量添加药品信息</title>
     <style type= "text/css" >
td {
   background: #EBEBEB;
   font-family: Verdana;
   font-size: 12px;
   background-color: #EBEBEB;
   color: black;
   line-height: 20px;
   height: 30px;
}
</style>
     <script type= "text/javascript" >
     function add(){
       var a = document.getElementById( "a" );
       var b = document.getElementById( "b" );
       b.innerHTML += a.innerHTML;
     }
     function reduce() {
       var a = document.getElementById( "a" );
       var b = document.getElementById( "b" );
       var stra = a.innerHTML;
       var strb = b.innerHTML;
       b.innerHTML = strb.substring( 0 , strb.length - stra.length);
     }
     function save(formName){
       for (i= 0 ;i<formName.length;i++){
         if (formName.elements[i].value== "" ){
           alert( "请填写完整信息!" );
           return false ;
         }
       }
     }
   </script>
   </head>
   <body onload= "add()" >
     <form action= "SaveMedicine" method= "post"
       onsubmit= "return save(this);" >
       <table align= "center" border= "0" cellpadding= "3" cellspacing= "1"
         width= "600" >
         <tr>
           <td align= "center" >
             <br>
             <h1>
               批量添加药品信息
             </h1>
           </td>
         </tr>
         <tr>
           <td>
             <div id= "b" ></div>
           </td>
         </tr>
         <tr>
           <td>
             <input type= "button" value= "添加一行 " onclick= "add()" >
             <input type= "button" value= "减少一行" onclick= "reduce()" >
             <input type= "submit" value= "批量添加到数据库" >
           </td>
         </tr>
       </table>
     </form>
     <div id= "a" style= "display: none" >
       <table align= "center" border= "0" >
         <tr>
           <td>
             名称:
           </td>
           <td>
             <input type= "text" name= "name" size= "13" >
           </td>
           <td>
             单价:
           </td>
           <td>
             <input type= "text" name= "price" size= "13" >
           </td>
           <td>
             厂址:
           </td>
           <td>
             <input type= "text" name= "factoryAdd" size= "30" >
           </td>
         </tr>
       </table>
     </div>
   </body>
</html>

12.result.jsp源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language= "java" contentType= "text/html" pageEncoding= "GBK" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<html>
  <head>
   <title>结果信息</title>
   <!--
   <link rel= "stylesheet" type= "text/css" href= "styles.css" >
   -->
  </head>
  <body>
   <div align= "center" >
     <font color= "red" size= "12px;" style= "font-weight: bold;" >
       ${info}
     </font>
     <br><br><br><br>
     <a href= "index.jsp" >返回</a>
   </div>
  </body>
</html>

13.数据表tb_medicine_batch结构:

Hibernate实现批量添加数据的方法

14.程序运行结果截图:

Hibernate实现批量添加数据的方法

希望本文所述对大家基于Hibernate框架的Java程序设计有所帮助.

最后此篇关于Hibernate实现批量添加数据的方法的文章就讲到这里了,如果你想了解更多关于Hibernate实现批量添加数据的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com