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

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

1.Hibernate_016_BatchAddData程序目录结构:

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

3.MedicineDao.java源代码:

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源代码:

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源代码:

<?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源代码:

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源代码:

/*

* 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源代码:

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源代码:

<?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源代码:

### 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源代码:

<%@ 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 >

<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源代码:

<%@ 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结构:

14.程序运行结果截图:

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

以上是 Hibernate实现批量添加数据的方法 的全部内容, 来源链接: utcz.com/p/209872.html

回到顶部