回顾,项目的开发步骤:
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) 测试整个项目
原文地址:http://ziqilvip.blog.51cto.com/6809318/1660383