1.事务控制 JDBC默认的是自动的事务提交 相关API:控制事务提交的对象为连接 Connection //设置事务提交方式为手动 conn.setAutoCommit(false);//true---自动提交 false---手动提交 //事务提交 conn.commit(); //事务回滚 conn.rollback(); 2.业务类方法的书写步骤 //1.获取Connection conn = JdbcUtil2.getConnection(); System.out.println("这是service获得连接:"+conn); //2.设置事务提交为手动提交 conn.setAutoCommit(false); //3.调用DAO中的方法完成业务操作 dao.insert(clazz); //4.提交事务 or 回滚事务 conn.commit(); conn.rollback 3.当前的事务控制存在问题 首先service层获得的连接与Dao不是一条 其次通过单例可以解决这样的问题,但是会存在线程不安全的情况。 为了解决线程安全,且可以控制事务的问题 我们需要使用线程局部表变量,ThreadLocal \~\~\~ #### 九、线程局部变量 \~\~\~java 线程局部变量,再多线程环境下,可以为每个使用该变量的线程 分配线程内部独有的 线程变量值。 1.API: ThreadLocal th = new ThreadLocal(); th.set(obj);//往线程局部变量中设置 obj = th.get();//返回该线程局变量的值 th.remove();//移除该线程局变量的值 2.作用: 1)保证 同一个线程内部 使用相同的值 2)保证不用线程使用不用的值 3.原理: 当调用 set方法时,会将当前线程对象当做Key,将set中的参数当做value 放入到一个map集合中 ,这个集合由Thread进行管理的。 当使用get方法时,以当前线程为key来向该map集合取值。 4.使用ThreadLoacl来修改getConnection方法 //创建连接的方法 private static ThreadLocal\
注意:1)在控制事务时,dao内不要关闭连接 2)在关闭连接后,要清空线程局部变量中的废连接 \~\~\~ #### 十、JDBC的 分层分包: 都在域名倒写的包下 比如 com.zzu.xjh
1)sql 存放了关于该项目相关的一些sql语句文档
2)conf 放置了配置文件
3)util 放置了该项目的工具类
4)test 放置了该项目相关的测试类
5)entity 放置了该项目的实体类
6)dao 放置该项目的DAO接口 在该包下应有一个impl包 里面放置 对应dao的实现类
7)service 放置该项目的service 接口 在该包下应有一个impl包 里面放置 对应service 的实现类
8)conroller/action 放置该项目的控制器
9)view (可能出现) ``` import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class JdbcTemplate