一、创建maven程序,引入依赖
struts-core、apache-commons-fileupload,struts-convention.plugin
poi、poi-ooxml
spring-context、sprng-jdbc、spring-tx、spring-context-suport、aspectjweaver
spring-web、struts2-spring-plugin
hibernate-core、mysql、
spring-orm
druid
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.HibernategroupId>
<artifactId>sshartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>warpackaging>
<name>ssh Maven Webappname>
<url>http://www.example.comurl>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.7maven.compiler.source>
<maven.compiler.target>1.7maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>4.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.apache.strutsgroupId>
<artifactId>struts2-coreartifactId>
<version>2.5.22version>
dependency>
<dependency>
<groupId>org.apache.strutsgroupId>
<artifactId>struts2-convention-pluginartifactId>
<version>2.5.22version>
dependency>
<dependency>
<groupId>commons-fileuploadgroupId>
<artifactId>commons-fileuploadartifactId>
<version>1.4version>
dependency>
<dependency>
<groupId>org.apache.poigroupId>
<artifactId>poi-ooxml-schemasartifactId>
<version>4.1.2version>
dependency>
<dependency>
<groupId>org.apache.poigroupId>
<artifactId>poi-ooxmlartifactId>
<version>4.1.2version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>5.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>5.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjweaverartifactId>
<version>1.9.6version>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>5.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.apache.strutsgroupId>
<artifactId>struts2-spring-pluginartifactId>
<version>2.5.22version>
dependency>
<dependency>
<groupId>org.hibernate.ormgroupId>
<artifactId>hibernate-coreartifactId>
<version>6.0.0.Finalversion>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.29version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-ormartifactId>
<version>5.3.10version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.2.1version>
dependency>
dependencies>
<build>
<finalName>sshfinalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-pluginartifactId>
<version>3.1.0version>
plugin>
<plugin>
<artifactId>maven-resources-pluginartifactId>
<version>3.0.2version>
plugin>
<plugin>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.0version>
plugin>
<plugin>
<artifactId>maven-surefire-pluginartifactId>
<version>2.22.1version>
plugin>
<plugin>
<artifactId>maven-war-pluginartifactId>
<version>3.2.2version>
plugin>
<plugin>
<artifactId>maven-install-pluginartifactId>
<version>2.5.2version>
plugin>
<plugin>
<artifactId>maven-deploy-pluginartifactId>
<version>2.8.2version>
plugin>
plugins>
pluginManagement>
build>
project>
二、搭建Struts框架
1、引入依赖
2、在web.xml中配置核心入口(filter)
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
version="3.0">
<filter>
<filter-name>struts2filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
filter-class>
filter>
<filter-mapping>
<filter-name>struts2filter-name>
<url-pattern>/*url-pattern>
filter-mapping>
web-app>
3、在scr/main/resources下创建struts.xml
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.action.extension" value="action,do,,"/>
<package name="dmc" extends="struts-default">
package>
struts>
三:搭建spring框架
1、引入依赖
2、创建application.xml文件,建议在scr/main/resources下
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/beans/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/beans/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/beans/spring-context.xsd">
beans>
四:SS整合
所谓的ssh整合就是将sturts的action交给spring管理,原来action有sturts自己创建,随着struts2-spring-plugin整合插件包的引入,告诉sturts现在改为向Spring要action
1、引入依赖
2、在web.xml中配置监听器,在服务器启动时,就启动spring框架,确保比struts启动的早
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
version="3.0">
<filter>
<filter-name>struts2filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
filter-class>
filter>
<filter-mapping>
<filter-name>struts2filter-name>
<url-pattern>/*url-pattern>
filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
web-app>
再提供一个全局参数,指定spring配置文件
<context-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:application.xmlparam-value>
context-param>
五:搭建hibernate
1、scr/main/resources下创建hibernate.cfg.xml
DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.show_sql">trueproperty>
<property name="hibernate.format_sql">trueproperty>
<property name="hibernate.hbm2ddl.auto">updateproperty>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialectproperty>
session-factory>
hibernate-configuration>
2、封装hibernateUtil,管理sessionFactory工厂
package com.hibernate.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
/**
* @author PGG
*/
public class HibernateUtil {
private static SessionFactory factory;
static {
//方式一:
/* Configuration cfg=new Configuration();
cfg.configure();
SessionFactory factory=cfg.buildSessionFactory();
*/
//方式二
StandardServiceRegistry r = new StandardServiceRegistryBuilder().configure().build();
Configuration cfg=new Configuration();
factory=cfg.buildSessionFactory(r);
}
/**
* 获取session对象
* @return
*/
public static Session getSession(){
return factory.openSession();
}
}
注意:因为后面要实现sh整合,sh整合后,spring负责管理hibernatede 数据源,工厂,事务,所以配置文件中不需要配置数据源信息和hibernate封装了
六:sh整合
所谓的ss整合,就是由spring负责管理hibernate数据源,工厂,事务
1、引入依赖
2、实现hibernate整合的配置:管理数据源、管理工厂、管理事务
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/beans/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/beans/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/beans/spring-context.xsd">
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/hibernate?useUnicode=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
<property name="dataSource" ref="dataSource"/>
bean>
<bean id="manager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
bean>
<tx:annotation-driven transaction-manager="manager"/>
beans>
事务管理又分为三个点:
事务管理者(谁管理事务)
<bean id="manager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
bean>
事务策略(如何管理事务)
事务切入点(什么时候管理事务)
注意:事务策略和事务切入点可以使用注解
<tx:annotation-driven transaction-manager="manager"/>
注意:sh整合时,对dao的操作也有影响:因为.原来dao与数据库交互时,使用我们自己管理的工厂获得session对象
现在:sh整合后,需要使用spring管理的工厂获得session对象
dao继承父类hibernateDaoSupport,然后为Dao的父类注入SessionFactory工厂,在方法中,通过父类方法获得hibernate操作的模板对象super.getHIbernateTemplate,该模板提供了crud方法
1、创建包结构,功能类,实现orm,实现IOC,DI,excel文件
注意:在application.xml文件中,开启spring,IOC DI的注解编程
<context:component-scan base-package="com.hibernate.action,com.hibernate.service,com.hibernate.dao"/>
注意:sh整合后,dao需要到spring管理的sessionFactory中获得session对象,1:dao继承HIbernateDaoSupport 为dao(父类)注入SessionFactory(曲线救国的方式)
@Repository
public class CarDao extends HibernateDaoSupport {
/**
* 采用曲线救国的方式为为dao(父类)注入SessionFactory
* @param factory
*/
@Autowired
public void setFactory (SessionFactory factory){
super.setSessionFactory(factory);
}
}
2、设计网页,选择文件上传
<html>
<body>
<form action="upload.do" method="get" enctype="multipart/form-data">
<input type="file" name="excel"/><br/>
<button>按钮button>
form>
body>
html>
3、action处理请求(接收文件,读取excel,实现批量保存)
注意:
action注解实现的请求映射
@Action(value="upload")
public void upload(){
//poi读取excel文件
}
注意:struts文件上传
private File excel;
public void setExcel(File excel){
this.excel=excel;
}
注意:poi读取excel文件
/**
* @Action表示接收的时upload的请求
*/
@Action(value="upload")
public void upload() throws IOException {
List<Car> cars=new ArrayList<>();
//poi读取excel文件
Workbook book= WorkbookFactory.create(excel);
Sheet sheet=book.getSheetAt(0);
for(int i=1;i<=sheet.getLastRowNum();i++){
//获取行
Row r=sheet.getRow(i);
//获取列的单元格
Cell c1 = r.getCell(0);
Cell c2 = r.getCell(1);
Cell c3 = r.getCell(2);
Cell c4 = r.getCell(3);
int cno=(int)c1.getNumericCellValue();
String cname=c2.getStringCellValue();
String color=c3.getStringCellValue();
int price=(int)c4.getNumericCellValue();
Car car=new Car(cno,cname,color,price);
cars.add(car);
}
//批量保存
carService.saves(cars);
//直接响应
ServletActionContext.getResponse().getWriter().write("上传成功");
}
注意:service实现批量保存的方法需要指定事务
/**
* 批量保存
* @param cars
*/
@Transactional(isolation= Isolation.SERIALIZABLE,propagation= Propagation.REQUIRED,rollbackFor=Exception.class)
public void saves(List<Car> cars){
//循环保存
for(Car car:cars){
carDao.save(car);
}
}
1、pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.HibernategroupId>
<artifactId>sshartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>warpackaging>
<name>ssh Maven Webappname>
<url>http://www.example.comurl>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.7maven.compiler.source>
<maven.compiler.target>1.7maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>4.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.apache.strutsgroupId>
<artifactId>struts2-coreartifactId>
<version>2.5.22version>
dependency>
<dependency>
<groupId>org.apache.strutsgroupId>
<artifactId>struts2-convention-pluginartifactId>
<version>2.5.22version>
dependency>
<dependency>
<groupId>commons-fileuploadgroupId>
<artifactId>commons-fileuploadartifactId>
<version>1.4version>
dependency>
<dependency>
<groupId>org.apache.poigroupId>
<artifactId>poi-ooxml-schemasartifactId>
<version>4.1.2version>
dependency>
<dependency>
<groupId>org.apache.poigroupId>
<artifactId>poi-ooxmlartifactId>
<version>4.1.2version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>5.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>5.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjweaverartifactId>
<version>1.9.6version>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>5.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.apache.strutsgroupId>
<artifactId>struts2-spring-pluginartifactId>
<version>2.5.22version>
dependency>
<dependency>
<groupId>org.hibernate.ormgroupId>
<artifactId>hibernate-coreartifactId>
<version>6.0.0.Finalversion>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.29version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-ormartifactId>
<version>5.3.10version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.2.1version>
dependency>
dependencies>
<build>
<finalName>sshfinalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-pluginartifactId>
<version>3.1.0version>
plugin>
<plugin>
<artifactId>maven-resources-pluginartifactId>
<version>3.0.2version>
plugin>
<plugin>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.0version>
plugin>
<plugin>
<artifactId>maven-surefire-pluginartifactId>
<version>2.22.1version>
plugin>
<plugin>
<artifactId>maven-war-pluginartifactId>
<version>3.2.2version>
plugin>
<plugin>
<artifactId>maven-install-pluginartifactId>
<version>2.5.2version>
plugin>
<plugin>
<artifactId>maven-deploy-pluginartifactId>
<version>2.8.2version>
plugin>
plugins>
pluginManagement>
build>
project>
application.xml文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/beans/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/beans/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/beans/spring-context.xsd">
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/hibernate?useUnicode=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
<property name="dataSource" ref="dataSource"/>
bean>
<bean id="manager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
bean>
<tx:annotation-driven transaction-manager="manager"/>
<context:component-scan base-package="com.hibernate.action,com.hibernate.service,com.hibernate.dao"/>
beans>
hibernate.cfg.xml文件
DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.show_sql">trueproperty>
<property name="hibernate.format_sql">trueproperty>
<property name="hibernate.hbm2ddl.auto">updateproperty>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialectproperty>
<mapping class="com.hibernate.domain.Car">mapping>
session-factory>
hibernate-configuration>
struts.xml文件
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.action.extension" value="action,do,,"/>
<package name="dmc" extends="struts-default">
package>
struts>
web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
version="3.0">
<filter>
<filter-name>struts2filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
filter-class>
filter>
<filter-mapping>
<filter-name>struts2filter-name>
<url-pattern>/*url-pattern>
filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
<context-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:application.xmlparam-value>
context-param>
web-app>
CarAction
package com.hibernate.action;
import com.hibernate.domain.Car;
import com.hibernate.service.CarService;
import org.apache.poi.ss.usermodel.*;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Controller
@ParentPackage("struts-default")
public class CarAction {
@Autowired
private CarService carService;
private File excel;
public void setExcel(File excel){
this.excel=excel;
}
/**
* @Action表示接收的时upload的请求
*/
@Action(value="upload")
public void upload() throws IOException {
List<Car> cars=new ArrayList<>();
//poi读取excel文件
Workbook book= WorkbookFactory.create(excel);
Sheet sheet=book.getSheetAt(0);
for(int i=1;i<=sheet.getLastRowNum();i++){
//获取行
Row r=sheet.getRow(i);
//获取列的单元格
Cell c1 = r.getCell(0);
Cell c2 = r.getCell(1);
Cell c3 = r.getCell(2);
Cell c4 = r.getCell(3);
int cno=(int)c1.getNumericCellValue();
String cname=c2.getStringCellValue();
String color=c3.getStringCellValue();
int price=(int)c4.getNumericCellValue();
Car car=new Car(cno,cname,color,price);
cars.add(car);
}
//批量保存
carService.saves(cars);
//直接响应
ServletActionContext.getResponse().getWriter().write("上传成功");
}
}
Dao
package com.hibernate.dao;
import com.hibernate.domain.Car;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
@Repository
public class CarDao extends HibernateDaoSupport {
/**
* 采用曲线救国的方式为为dao(父类)注入SessionFactory
* @param factory
*/
@Autowired
public void setFactory (SessionFactory factory){
super.setSessionFactory(factory);
}
/**
* 保存的方法
* @param car
*/
public void save(Car car){
super.getHibernateTemplate().save(car);
}
}
service
package com.hibernate.service;
import com.hibernate.dao.CarDao;
import com.hibernate.domain.Car;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class CarService {
@Autowired
private CarDao carDao;
/**
* 批量保存
* @param cars
*/
@Transactional(isolation= Isolation.SERIALIZABLE,propagation= Propagation.REQUIRED,rollbackFor=Exception.class)
public void saves(List<Car> cars){
//循环保存
for(Car car:cars){
carDao.save(car);
}
}
}
car实体
package com.hibernate.domain;
import jakarta.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "t_Car")
public class Car implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer cno;
private String cname;
private String color;
private Integer price;
public Car() {
}
public Car(Integer cno, String cname, String color, Integer price) {
this.cno = cno;
this.cname = cname;
this.color = color;
this.price = price;
}
@Id
public Integer getCno() {
return cno;
}
public void setCno(Integer cno) {
this.cno = cno;
}
@Column(name = "carname",length = 8)
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
@Transient
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
}