事务的原子性
事务用于保证数据的原子性,它由一组相关的DML语句组成,该组DML语句要么全部成功,要么就全部失败。
package com.javakc.one2many;
public class OrderDetailsModel {
private String id;
private String orderId;
private String goodsName;
private int price;
private int realPrice;
private int num;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getRealPrice() {
return realPrice;
}
public void setRealPrice(int realPrice) {
this.realPrice = realPrice;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
package com.javakc.one2many;
public class OrderModel {
private String id;
private String c_name;
private String c_address;
private String c_phoneNumber;
private String sellerShop;
private int totalAmount;
private String buyingTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getC_name() {
return c_name;
}
public void setC_name(String c_name) {
this.c_name = c_name;
}
public String getC_address() {
return c_address;
}
public void setC_address(String c_address) {
this.c_address = c_address;
}
public String getC_phoneNumber() {
return c_phoneNumber;
}
public void setC_phoneNumber(String c_phoneNumber) {
this.c_phoneNumber = c_phoneNumber;
}
public String getSellerShop() {
return sellerShop;
}
public void setSellerShop(String sellerShop) {
this.sellerShop = sellerShop;
}
public int getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(int totalAmount) {
this.totalAmount = totalAmount;
}
public String getBuyingTime() {
return buyingTime;
}
public void setBuyingTime(String buyingTime) {
this.buyingTime = buyingTime;
}
}
package com.javakc.one2many;
import com.javakc.db.Utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.Set;
public class Service1<reture> {
public static boolean insert(OrderModel om, Set<OrderDetailsModel> details) throws SQLException, ClassNotFoundException {
boolean flag = false;
Connection conn = Utils.getConn();
try {
//1,订单记录
String sql = "insert into t_order(id,c_name,c_address,C_phoneNumber,sellerShop,totalAmount,BuyingTime)"
+ "values(?,?,?,?,?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, om.getId());//订单编号
pstmt.setString(2, om.getC_name());//收货人姓名
pstmt.setString(3, om.getC_address());//收货人地址
pstmt.setString(4, om.getC_phoneNumber());//收货人电话
pstmt.setString(5, om.getSellerShop());//卖家店铺
pstmt.setInt(6, om.getTotalAmount());//总金额
pstmt.setString(7, om.getBuyingTime());//购买时间
pstmt.executeUpdate();
//多个订单明细记录
sql = "insert into t_order_details (id,orderId,goodsName,price,realPrice,num)values(?,?,?,?,?,?,?)";
PreparedStatement pstmt2 = conn.prepareStatement(sql);
Iterator<OrderDetailsModel> it = details.iterator();
while (it.hasNext()) {
OrderDetailsModel d = it.next();
pstmt2.setString(1, d.getId());//订单明细编号
pstmt2.setString(2, d.getOrderId());//订单编号
pstmt2.setString(3, d.getGoodsName());//商品名称
pstmt2.setInt(4, d.getPrice());//商品价格
pstmt2.setInt(5, d.getRealPrice());//实际价格
pstmt2.setInt(6, d.getNum());//商品数量
pstmt2.addBatch();
}
//执行批量insert销售明细记录
pstmt2.executeBatch();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return flag;
}
reture flag;
}
package com.javakc.one2many;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;
public class Test {
/**
* Model+List
*
* @param args
*/
public static void main(String[] args) throws SQLException, ClassNotFoundException {
//创建销售单
OrderModel om = new OrderModel();
om.setId("1");
om.setC_name("晓小强");
om.setC_address("北京");
om.setC_phoneNumber("1231243");
om.setSellerShop("电脑");
om.setTotalAmount(123);
om.setBuyingTime("2020-10-10");
//创建多个销售明细单
Set<OrderDetailsModel> details = new HashSet<OrderDetailsModel>();
OrderDetailsModel s1 = new OrderDetailsModel();
s1.setId("M1");
s1.setOrderId("D1");
s1.setGoodsName("吸尘器");
s1.setPrice(1899);
s1.setRealPrice(959);
s1.setNum(1);
OrderDetailsModel s2 = new OrderDetailsModel();
s2.setId("M2");
s2.setOrderId("D1");
s2.setGoodsName("净化器");
s2.setPrice(2999);
s2.setRealPrice(1999);
s2.setNum(2);
OrderDetailsModel s3 = new OrderDetailsModel();
s3.setId("M3");
s3.setOrderId("D1");
s3.setGoodsName("榨汁机");
s3.setPrice(369);
s3.setRealPrice(279);
s3.setNum(1);
details.add(s1);
details.add(s2);
details.add(s3);
boolean flag=Service1.insert(om, details);
System. out . println("是否操作成功: "+flag);
}
}
出现错误,事务回滚,不添加数据库。