#千锋逆战班# 第40天SQL语句之DQL封装、事务、项目结构 #学习总结#

有关昨天的DML封装:DML封装

1、DQL封装

//封装执行DQL语句的方法
public  <T> List<T> execute_DQL(Class<T> cls,String sql,Object...objs) throws Exception{
		//获取数据库连接
		Connection con = DBUtils.getConnection();
			
		//获取操作对象PreparedStatement
		PreparedStatement ps = con.prepareStatement(sql);
		
			//设置sql语句参数
		setParams(ps,objs);
			
			//获取执行的到的结果集
		ResultSet rs = ps.executeQuery();
			//获取数据库的所有字段
		ResultSetMetaData md = ps.getMetaData();
			//设置一个集合来存储数据库存储的结果集
		List<T> list = new ArrayList<>();	
		T t;
		String name;
		Field field;
			
		while(rs.next()) {	//遍历结果集
				//通过反射构建一个对象
			t = cls.newInstance();
				
				//遍历所有数据库字段
			for(int i=0;i<md.getColumnCount();i++) {
					
				name = md.getColumnLabel(i+1);	//获取别名
				try {
					field = cls.getDeclaredField(name);//获取对象的属性,因为可能会找不到对象的属性,所以try捕捉异常
					field.setAccessible(true);	//打开权限
						
					Object value = rs.getObject(name);	//获取该字段的值
					if(value==null) {	//如果为空,获取下一个字段
							continue;
					}
					field.set(t, value);	//设置这个对象的这个属性值
						
				}catch(NoSuchFieldException ex) {
						
				}
			}
			list.add(t);
		}
			
		return list;
}

2、事务

  • 什么是事务:保证我们运行多条语句,能够同时成功、同时失败、不会被其他的sql语句影响

  • Java代码实现事务

    //JDBC控制事务语句
    Connection.setAutoCommit(false); start transaction	//开启不自动关闭事务
    Connection.rollback();  rollback	//事务回滚
    Connection.commit();  commit	//事务提交
    
  • 事务的4个性质:

    Atomicity(原子性)
    表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败

    Consistency(一致性)
    表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前状态.
    事务执行前和执行后来源和去向保持平衡。

    Isolation(隔离性)
    事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它
    之后的状态,事务不会查看中间状态的数据。并发时每个事务是隔离的,相互不影响。

    Durability(持久性)
    持久性事务完成之后,它对于系统的影响是永久性的。

  • 事务的隔离级别

    read uncommitted 未提交读
    所有事务都可以看到没有提交事务的数据。

    read committed 提交读
    事务成功提交后才可以被查询到。

    repeatable 重复读
    同一个事务多个实例读取数据时,可能将未提交的记录查询出来,而出现幻读。mysql默认级别

    Serializable可串行化
    强制的进行排序,在每个读读数据行上添加共享锁。会导致大量超时现象和锁竞争。

    要想避免以上现象,通过更改事务的隔离级别来避免:
    READ UNCOMMITTED 脏读、不可重复读、虚读有可能发生。
    READ COMMITTED 避免脏读的发生,不可重复读、虚读有可能发生。
    REPEATABLE READ 避免脏读、不可重复读的发生,虚读有可能发生。
    SERIALIZABLE 避免脏读、不可重复读、虚读的发生。

3、项目结构(图片借鉴自课堂)

在这里插入图片描述
在这里插入图片描述

  • 面向接口开发
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值