全局异常与mybatisplus

  • 全局异常处理
    当前端发生异常时,前端用户无法处理
@DeleteMapping("/{id}")
public SysResult deleteUserById(@PathVariable Integer id){
    try{
        userService.deleteUserById(id);
        return SysResult.success();
    }catch (Exception e){
        e.printStackTrace();
        return SysResult.fail();
    }
}
  • Spring的全局异常处理机制
    说明:如果代码中加了大量的try-catch,则不便于维护
    要求:返回统一的业务数据Sysresult,返回值都是json串
    拦截:指定遇到某种异常实现AOP处理(Advice,通知)
    特点:只拦截Controller层抛出异常
//标识全局异常处理机制
@RestControllerAdvice
public class SystemExe {
    @ExceptionHandler({RuntimeException.class})
    public SysResult fail(Exception e){
        e.printStackTrace();
        return SysResult.fail();
    }
}
  • 事务控制
    事务特性: 一致性、原子性、隔离性、持久性
    Spring中的默认事务策略:
    解决方法:方法前加注解@Transactional
    作用:1.默认只拦截运行时异常;2.注解后的属性,rollbackFor:指定异常的类型回滚;noRollbackFor:指定异常不回滚
//依旧会删除成功
@DeleteMapping("/{id}")
@Transactional
public SysResult deleteUserById(@PathVariable Integer id){
    userService.deleteUserById(id);
    int a=1/0;
    return SysResult.success();
}
  • MybatisPlus
    mybatis:半自动化的ORM映射框架,sql手写,结果集映射自动
    mybatisplus:全自动的ORM映射框架,是mybatis的增强
    Spring+MybatisPlus
    pojo:
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@TableName("demo_user")
public class User implements Serializable {
    @TableId(type = IdType.AUTO)//主键自增
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
}

usermapper:

public interface UserMapper extends BaseMapper<User> {
    @Select("select * from demo_user")
    List<User> findAll();
}

applicaion.yml:

mybatis-plus:
  type-aliases-package: com.jt.pojo
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true
  • SpringBoot测试API
    需要在某个位置使用Spring容器中的对象
    效果: 只要@Test测试方法执行,则整个Spring容器启动,以实现依赖注入
    注意: 1.只能在测试类中使用;2.测试类的包路径必须与主启动类相同
@SpringBootTest
class SpringbootSsmApplicationTests {
    @Autowired
    private UserMapper userMapper;
    @Test
    void contextLoads() {
        userMapper.findAll();
    }
    @Test
    void insertUser(){
        User u = new User(null,"ZziQon",10,"男");
        userMapper.insert(u);
    }
}
  • MybatisPlus实例
    调用步骤:
    1 用户执行userMapper.insert(user);
    2 根据继承的关系 BaseMapper.insert(user).
    3 MP在内部生成Sql之后交给Mybatis调用最终实现数据操作.
    QueryWrapper:条件构造器,即where后面的语句,默认的关系连接符为and
    调用关键字:
    gt:>;lt:<;eq:=;ge:>=;le:<=;ne:<>;like:首尾模糊;likeLeft:首部模糊
    in:多值传递;orderByDesc:降序排
@Test
void selectById(){
    User user = userMapper.selectById(1);
    System.out.println(user);
}

@Test
void selectByNS(){
    User user = new User();
    user.setSex("男").setName("ZziQon");
    //QueryWrapper:条件构造器,即where后面的语句,默认的关系连接符为and
    QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
    List<User> userList = userMapper.selectList(queryWrapper);
    for (User u:userList) {
        System.out.println(u);
    }
}
@Test
void selectByNS2(){
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("name", "ZziQon").eq("Sex", "男");
    List<User> userList = userMapper.selectList(queryWrapper);
    for (User u:userList) {
        System.out.println(u);
    }
}
@Test
void selectByIdDesc(){
    //基本类型
    Integer[] ids = {1,3,4,5};
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.in("id", ids).orderByDesc("age");
    List<User> userList = userMapper.selectList(queryWrapper);
    for (User u:userList) {
        System.out.println(u);
    }
}
MyBatisPlus 是一个基于 MyBatis 的代码生成器和持久层框架的增强工具,它简化了数据访问的开发过程。在 MyBatisPlus 中,自定义数据库操作异常捕获通常涉及到使用其提供的异常处理器或者自定义错误处理策略。 1. **全局异常处理器**:MyBatisPlus 提供了一个全局异常处理器 `GlobalExceptionHandler`,你可以通过配置文件或在代码中设置它,以便在发生数据库操作异常时统一处理。例如: ```java // 配置全局异常处理器 MybatisPlus.me().globalExceptionHandler(new GlobalExceptionHandler() { @Override public void execute(ResultSet rs, String sql, Object parameter, Connection connection, SQLException e) { // 在这里处理异常,如记录日志、返回错误信息等 log.error("Database operation exception: ", e); } }); ``` 2. **自定义异常**:如果你想要更细粒度的控制,可以创建自定义的数据库异常并捕获,比如继承 `BaseRuntimeException` 或 `DataAccessException` 类。这样,你可以在具体的业务逻辑中添加异常处理代码: ```java try { // 数据库操作 } catch (DataAccessException e) { throw new CustomDatabaseException("An error occurred during database operation", e); } // 自定义异常类 public class CustomDatabaseException extends DataAccessException { // 构造方法和必要的逻辑 } ``` 3. **异常映射**:在 MyBatisPlus 的 XML 映射文件中,可以为特定的 SQL 语句或 mapper 方法设置异常映射,这样在运行时如果发生预期之外的异常,会自动抛出相应的异常类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值