结合Service层讲解DAO层的异常处理操作

domain:只是定义一个javabean。

dao:对于数据库的操作,都放到dao层,也就是dao里面通常是对数据库的增、删、改、查等操作。

service:完成相应的业务逻辑处理,调用dao层。

(web)servlet:完成界面请求、对界面进行跳转等等。servlet调用service层。

例子:

在domain包中,新建Xxx.java;在dao包中,新建IXxxDAO.java;在impl包中,新建XxxDAOImpl类;在test包中,新建XxxDAOTest.java,在XxxDAOImpl.java中编写具体方法,核心步骤为“贾琏欲执事”。

注:

①IXxxDAO.java为接口,在其中编写需要使用的方法,主要是增(save)删(delete)改(update)查(get&list–查询全部)。 ②Xxx.java中的变量均为私有,并且与数据库中的列名,属性相同。

J2EE三层架构:

令DaoException继承RuntimeException, 处理异常的时候可以将其抛给Service层(UserService.java),如果要处理那么就try,catch,否则就令其报错

用AOP捕捉 Service中调用Dao的异常

PersonDao和PersonDaoImpl,并在PersonDaoImpl中制造异常

public interface PersonDao {
 public void savePerson();
 public void updatePerson();
}
public class PersonDaoImpl implements PersonDao {

 public void savePerson() {
  int a = 1/0;
 }

 public void updatePerson() {
  Long.parseLong("aaa");
 }

}

目标类和目标方法

public interface PersonService {
 void savePerson();
 void updatePerson();
}
public class PersonServiceImpl implements PersonService {

 private PersonDao personDao;//在这里选择set方式在spring的配置文件中进行注入

 public PersonDao getPersonDao() {
  return personDao;
 }
 public void setPersonDao(PersonDao personDao) {
  this.personDao = personDao;
 }
 public void savePerson() {
  personDao.savePerson();
 }
 public void updatePerson() {
  personDao.updatePerson();
 }
}

切面(定义一个异常类和异常方法)

public class Exception {

 /**
  * 这是一个异常通知
  */
 public void exceptionMethod(JoinPoint joinPoint,Throwable ex){
  System.out.println(ex.getMessage());
 }

}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">  

    <bean id="personDao" class="com.mo.dao.PersonDaoImpl"></bean>     

    <bean id="personService" class="com.mo.service.PersonServiceImpl">
     <!-- 用set方法注入 -->
     <property name="personDao" ref="personDao"></property>
    </bean>  

    <bean id="Exception" class="com.mo.exception.Exception"></bean>

    <aop:config>
        <!-- 切入点表达式,确定目标类 -->
        <aop:pointcut
            expression="execution(* com.mo.service.PersonServiceImpl.*(..))"
            id="perform"/>  

        <!-- ref指向的对象就是切面 -->
        <aop:aspect ref="Exception">
             <aop:after-throwing method="exceptionMethod" pointcut-ref="perform" throwing="ex"/>
        </aop:aspect>
    </aop:config>
</beans>

单元测试类

@Test
public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        PersonService personService = (PersonService)context.getBean("personService");
        personService.savePerson();
}

输出

/ by zero

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解使用Spring MVC统一异常处理实战

    1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大. 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的.下面将介绍使用Spring MVC统一处理异常的解决和实现过程. 2 分析 Spring MVC处理异常有3种方

  • SpringBoot Service和Dao的编写详解

    本文主要介绍了SpringBoot Service和Dao的编写详解,分享给大家,具体如下: 效果图 配置环境 创建数据库 数据库中文编码 建表 create table `student` ( `id` int(11) Not NULL AUTO_INCREMENT COMMENT '主键自增id', `name` varchar(250) NOT NULL DEFAULT ' ' COMMENT '姓名', PRIMARY KEY(`id`) )ENGINE=INNODB DEFAULT C

  • 浅谈Action+Service +Dao 功能

    1. Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只完成增删改查,虽然可以1-n,n-n,1-1关联,模糊.动态.子查询都可以.但是无论多么复杂的查询,dao只是封装增删改查.至于增删查改如何去实现一个功能,dao是不管的. 总结这三者,通过例子来解释: Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责: Service是厨师

  • 结合Service层讲解DAO层的异常处理操作

    domain:只是定义一个javabean. dao:对于数据库的操作,都放到dao层,也就是dao里面通常是对数据库的增.删.改.查等操作. service:完成相应的业务逻辑处理,调用dao层. (web)servlet:完成界面请求.对界面进行跳转等等.servlet调用service层. 例子: 在domain包中,新建Xxx.java:在dao包中,新建IXxxDAO.java:在impl包中,新建XxxDAOImpl类:在test包中,新建XxxDAOTest.java,在XxxDA

  • Spring main方法中如何调用Dao层和Service层的方法

    目录 Spring main方法调用Dao层和Service层的方法 如何在普通类中直接访问service层或dao层 第一种方案 第二种方案 Spring main方法调用Dao层和Service层的方法 在web环境中,一般serviceImpl中的dao之类的数据库连接都由容器启动的时候创建好了,不会报错. 但是在main中,没有这个环境,所以需要获取环境: ApplicationContext ctx = new FileSystemXmlApplicationContext("src/

  • springmvc 中dao层和service层的区别说明

    springmvc dao层和service层的区别 首先解释面上意思,service是业务层,dao是数据访问层 这个问题我曾经也有过,记得以前刚学编程的时候,都是在service里直接调用dao,service里面就new一个dao类对象,调用,其他有意义的事没做,也不明白有这个有什么用,参加工作久了以后就会知道,业务才是工作中的重中之重. 我们都知道,标准主流现在的编程方式都是采用MVC综合设计模式,MVC本身不属于设计模式的一种,它描述的是一种结构,最终目的达到解耦,解耦说的意思是你更改

  • java 使用BeanFactory实现service与dao层解耦合详解

    目录 BeanFactory实现service与dao层解耦合 整体的实现思路是 DAO层实现类CreatFactory.java BeanFactory实现service与dao层解耦合 在实际网站开发过程中,在service会new一个dao从而调用该dao中的方法,如下代码,但是一旦更换数据库需要改变dao的指向,此时就需要重新部署新的项目 UserDao UserDao=new UserDaoImpl(); 在本文中使用BeanFactory的方式,在xml中配置dao的指向,一旦发生变

  • 关于MVC的dao层、service层和controller层详解

    目录 MVC的dao层.service层和controller层 1.dao层 2.service层 3.controller层 4.view层 5.它们之间的关系 关于dao层/mapper层的一些笔记 1.BaseMapper 2.@mapper MVC的dao层.service层和controller层 1.dao层 dao层主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,dao层的设计首先是设计dao层的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可以

  • springboot启动扫描不到dao层接口的解决方案

    今天启动springboot项目时失败了 解决 检查原因发现是启动类的MapperScan("")的值写到类名了,改成类所在的包名错误就修复了. springboot 扫描不到dao层和controller 一.提示 A component required a bean of type 'com.imooc2.product.category.dao.ProductCategoryDao' that could not be found即dao层找不到了 解决:使用@MapperSc

  • Spring Dao层@Repository与@Mapper的使用

    目录 SpringDao层@Repository与@Mapper 1.@Mapper 2.@Repository 3.其他扫描手段 4.小结 @Mapper和@Repository的区别 1.相同点 2.不同点 Spring Dao层@Repository与@Mapper 使用注解的方式开发Dao层的时候,常常会混淆这两个注解,不知道怎么添加,这里做个记录. 1.@Mapper @Mapper 是 Mybatis 的注解,和 Spring 没有关系,@Repository 是 Spring 的注

  • 使用JDBC实现数据访问对象层(DAO)代码示例

    JAVA是面向对象的语言,开发者在操作数据的时候,通常更习惯面对一个特定类型的对象,如一个用户就是一个User类的对象.DAO层需要做的,就是为上层提供充分的对象支持,让上层再也看不到具体的数据,而是一个个活生生的对象. 增加,删除,查询和修改操作是DAO需要做的最基本的4项操作.查询一般需要提供遍历查询和id查询,对于遍历查询,DAO需要提供User泛型的list对象,对于id查询则提供已经装配好数据的User对象,至于增加和修改操作,上层一般会提供一个User对象,DAO把User对象中的数

  • 对dbunit进行mybatis DAO层Excel单元测试(必看篇)

    DAO层测试难点 可重复性,每次运行单元测试,得到的数据是重复的 独立性,测试数据与实际数据相互独立 数据库中脏数据预处理 不能给数据库中数据带来变化 DAO层测试方法 使用内存数据库,如H2.优点:无需清空无关数据:缺点:单元测试中需要进行数据库初始化过程,如果初始化过程复杂,单元测试工作量增大 使用dbunit.优点:数据库初始化简单,大大减轻单元测试工作量:缺点:目前官方提供jar包只支持xml格式文件,需要自己开发Excel格式文件 基于dbunit进行DAO单元测试 应用环境:Spri

  • MyBatis开发Dao层的两种方式实现(原始Dao层开发)

    本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方式) 本次使用的mybatis版本为mybatis-3.2.7,开发工具为eclipse,数据库为mysql,jdk版本jdk1.8.0_151. SqlSession使用范围 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlS

随机推荐