1.10
思路:个人认为,模式是死的,人是活的。编程就是要把死的模式玩活。
a.原MVC的缺陷,不能满足如银行转账等需要统一事务处理的业务,因此引出在modle层中分出业务逻辑层。
b.Junit测试框架的使用。
思考:在开发中为什么要引入业务层?
MVC:model view controller
在Model的工厂前添加业务层。主要用来封装将要用到的业务看成一个整体。同时提交或同事失败。
存款流程: 存款表 和 账户表 先插入存款然出在存入账户
自动提交失效:conn.setAutoCommit(false)
提交事务: conn.commit();
回滚事务: conn.rollback();
添加的业务逻辑的代码:
public void saveInAccount(InAccount inAccount) {
DBManager dbManager=null;
Connection conn=null;
InAccountDao inAccountDao=null;
AccountDao accountDao=null;
//获取DBManager对象
dbManager=DBManager.getDbManager();
//获取连接
conn=dbManager.getConnection();
//获取InAccountDao接口的对象
inAccountDao=DaoFactory.getInAccountDao();
accountDao=DaoFactory.getAccountDao();
try{
///
//设置连接为非自动提交
dbManager.beginTransaction(conn);
//1 存款(insert) 插入到inaccount表
inAccountDao.saveInAccount(conn,inAccount); //还没有提交
//2 查询账户余额(select) //account表
Account account=accountDao.findBalancebyAccountid(conn,inAccount.getAccountid());
//输出余额
System.out.println("**** "+account.getBalance());
//3 更新账户余额(update)
//计算当前账号的金额
Double balance=inAccount.getInbalance()+account.getBalance();
//修改余额
account.setBalance(balance);
accountDao.updateAccount(conn,account);
//真正提交
dbManager.commitTransaction(conn);
///
}catch(Exception e){
dbManager.rollbackTransaction(conn);
e.printStackTrace();
}finally{
dbManager.closeResource(conn, null,null);
}
}
MVC异常处理:
程序中的异常一般都在 控制层进行统一处理
异常类型:
Throwable :
Exception :a. RuntimeException 运行时异常,不用捕获和声明
b. 检查异常 需要捕获和声明 //检查异常可以转换为非检查异常
自定义异常
思路:即,每个分层都对应一个异常处理类,在该层进行异常捕获,并抛出到上一层,直到控制层为止,并在控制层进行统一的异常处理,然后转到异常处理页面。显示汉字异常信息。
目录结果如下:
junit测试框架
什么是Junit?
JUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:
1、用于测试期望结果的断言(Assertion)
2、用于共享共同测试数据的测试工具
3、用于方便的组织和运行测试的测试套件
4、图形和文本的测试运行器
安装:导入junit。Jar到项目中。
最新版是4.4 下载网址:从Junit(http://www.junit.org/index.htm或http://download.sourceforge.net/junit/)下载最新的软件包.
使用:
老式的:
实现extends TestCase类。
然后在要测试的方法中调用方法进行测试:this.assertEquals(expected, actual);
实例:
Compute c=null;
protected void setUp() throws Exception {
System.out.println("setUp");
c=new Compute();
}
protected void tearDown() throws Exception {
System.out.println("tearDown");
}
//测试add方法的正确性
public void testAdd(){
System.out.println("testAdd");
//this.assertEquals(0, c.add(0, 0));
this.assertEquals(3, c.add(1, 2));
this.assertEquals(9, c.add(4, 5));
}
新式的:
JUnit 4 使用 Java 5 中的注解(annotation),以下是JUnit 4 常用的几个 annotation 介绍
@Before:初始化方法
@After:释放资源
@Test:测试方法,在这里可以测试期望异常和超时时间
@Ignore:忽略的测试方法
@BeforeClass:针对所有测试,只执行一次,且必须为static void
@AfterClass:针对所有测试,只执行一次,且必须为static void
一个JUnit 4 的单元测试用例执行顺序为:
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
每一个测试方法的调用顺序为:
@Before –> @Test –> @After
增强:可以单独运行某个方法
实例:
static Compute c=null;
// 1 BeforeClass 该方法最先执行,只执行一次
@BeforeClass
public static void beforeClass(){
c=new Compute();
System.out.println("beforeClass");
}
// 5 AfterClass 该方法最后执行,只执行一次
@AfterClass
public static void afterClass(){
System.out.println("afterClass");
}
// 2 Before注解表示在运行测试方法前执行
@Before
public void beforeMethod(){
System.out.println("beforeMethod");
}
//4 after注解表示在运行测试方后执行
@After
public void afterMethod(){
System.out.println("afterMethod");
}
//3 Test注解要运行测试的方法
@Test
public void add(){
System.out.println("Add");
Assert.assertEquals(0, c.add(0, 0));
}
@Test
public void mul(){
System.out.println("Mul");
Assert.assertEquals(0, c.mul(0, 0));
Assert.assertEquals(3, c.mul(1, 3));
Assert.assertEquals(20, c.mul(4, 5));
}