回顾,项目的开发步骤:
1) com.zhtm.sql包            建表SQL语句
2) com.zhtm.conf包                创建.properties文件
3) com.zhtm.util包            创建JdbUtil工具类        

static{
    InputStream is = JdbcUtil.class.getResourceAsStream("/com/zhtm/conf/db.properties");
    prop.load(is);
}
public static Connection getConnection() throws Exception{}
public static void release(rs, stm, conn) throws Exception{}

4) com.zhtm.test包        测试JdbcUtil的创建连接方法
5) com.zhtm.entity包        创建实体类
                    根据表结构,创建实体类
                    字段                    属性
                                                get/set方法
6) com.zhtm.dao包            创建PersonDao类

public void insert(Person p) throws Exception{}
public void update(Person p)throws Exception{}
public void delete(int no)throws Exception{}
public List<Person> selectAll()throws Exception{}
public Person selectOne(int no) throws Exception{}

注意:写1个方法,测试1个方法


JDBC中的分层:
一、数据访问层DAO【重点】
    作用: 对数据库进行增删改查操作。(ORM)
    包:com.zhtm.dao
    类命名规范:表名+Dao
    
二、业务层Service【重点】
    作用:专注于实现用户的业务需求。通常业务步骤 最终落实到 增删改查操作上。
    注意:业务层 必须进行事务的处理,确保所有步骤都成功业务成功;有一个步骤失败,该业务失败。
    包结构:com.zhtm.service
    类命名规范:和实际需求相关(BankService)
    
    JDBC中,默认1条SQL语句执行后,事务会自动提交。
    
    事务的提交/回滚:
        1) 修改事务的提交方式 为手动提交         

conn.setAutoCommit(false);            //true,代表自动提交

        2) 事务提交/回滚

 conn.commit();
 conn.rollback();

            
    业务方法的书写步骤【重点】:
        1) 调用工具类,获取连接
        2) 设置事务的提交方式 为手动提交
        3) 分别调用DAO的不同方法,实现业务步骤
        4) 事务提交/回滚
        5) 调用工具类的方法,释放资源
        
    彻底解决事务控制以及多线程并发访问的问题【重难点】:
        使用线程局部变量 ThreadLocal类:  
            ThreadLocal t = new ThreadLocal();
            t.set(obj);  //往线程变量中设值
            obj = t.get();    //获取线程局部变量的值
            t.remove();    //删除线程局部变量的值
            
    解决方案:
        1) 修改JdbcUtil的代码:
                a) 增加成员变量

private static final ThreadLocal<Connection> t = new ThreadLocal<Connection>();

                b) 修改getConnection方法

Connection conn = t.get();
      if (conn == null){
      //注册驱动
      //创建连接
      //给线程局部变量设值
      t.set(conn);
}

                c) 修改release方法

if (conn!=null){
    conn.close();
    t.remove();//删除线程局部变量中的值 *****必须要有*****
}

        2) 在DAO层不能关闭conn,应该在service层。
    
三、显示层View
    作用:专注于 提供用户的输入/输出界面。
    该层不属于JDBC的内容,属于CoreJava的内容。
    
四、分层的好处
    1、各司其职
    2、有利于团队建设
    
总结,项目开发步骤:
    1) com.zhtm.sql包            建表语句
    2) com.zhtm.conf包        创建配置文件db.properties
    3) com.zhtm.util包            创建JdbcUtil
    4) com.zhtm.test包            测试JdbcUtil的getConnection方法
    5) com.zhtm.entity包         根据表结构,创建实体类
    6) com.zhtm.dao包          先创建接口,后定义实现类
        注意,写1个方法,测试1个方法。
    7) com.zhtm.service包        先创建接口,后定义实现类
        注意,写1个方法,测试1个方法。
    8) com.zhtm.view包        创建显示显示面类
    9) 测试整个项目