@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<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);
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'surveyAdminExpandVo' in 'class com.survey.toysrus.model.SurveyAdminExpandVo'
其实这种错误很明显:异常已经告诉我们
可以看到形参是有元素的,并且元素内部数据没有缺失(公司数据不方便展示)
很平常的空指针异常,我们简单地捕获到这个异常来自于TableInfoHelper,这是一个Mybatis-Plus的类
我们来跟踪saveBatch方法
* 批量插入
* @param enti...
【springboot+MyBatisPlus】用“异常处理器“捕获解决“数据库信息录入重复“的问题“SQLIntegrityConstraintViolationException“
基于springboot用“异常处理器“捕获解决“数据库信息录入重复“的问题“SQLIntegrityConstraintViolationException“Duplicate entry '····' for key '····'提示我们用户名已存在
那么我们可以采用一个较为便捷的方法:异常处理器来捕获重复的信息,拦截到错误请求后,提示用户更改用户名再重新注册。
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 方法设置异常映射,这样在运行时如果发生预期之外的异常,会自动抛出相应的异常类型。
RT-Surv: Improving Mortality Prediction After Radiotherapy with Large Language Model Structuring