Mybatis是一款优秀的持久层框架,它可以帮助我们快速实现数据库的增删改查,但是在使用Mybatis时,我们需要注意防止重复添加数据。
首先,在表中设置唯一索引,这样可以有效地避免重复数据的出现。当我们向表中插入数据时,如果存在重复的记录,就会出现异常信息。例如:
CREATE UNIQUE INDEX idx_name ON table_name (column1, column2);
其次,可以使用Mybatis的selectKey标签来实现防止重复数据的功能。selectKey标签可以在执行insert语句之前执行一个select语句来获取主键值。例如:
SELECT LAST_INSERT_ID()
最后,也可以使用Mybatis的@Options注解来实现防止重复数据的功能。@Options注解会将insert语句执行后返回的主键值存储到对应的JavaBean中。例如:
@Options(useGeneratedKeys = true, keyProperty = "id")
针对 update
和 delete
语句,作用: 阻止恶意的全表更新删除
注入MybatisPlusInterceptor
类,并配置BlockAttackInnerInterceptor
拦截器
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
return interceptor;
}
}
测试示例(全表更新)
@SpringBootTest
public class QueryWrapperTest {
@Autowired
private UserService userService;
@Test
public void test() {
User user = new User();
user.setId(999L);
user.setName("custom_name");
user.setEmail("xxx@mail.com");
// com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Prohibition of table update operation
userService.saveOrUpdate(user, null);
}
}
测试示例(部分更新)
@SpringBootTest
public class QueryWrapperTest {
@Autowired
private UserService userService;
@Test
public void test() {
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(User::getId, 1);
User user = new User();
user.setId(10L);
user.setName("custom_name");
user.setEmail("xxx@mail.com");
userService.saveOrUpdate(user, wrapper);
}}
查询语句是MyBatis中最常用的元素之一——光能把数据存到数据库中价值并不大,还要能重新取出来才有用,多数应用也都是查询比修...
当在 Spring 中定义一个 bean 时,你必须声明该 bean 的作用域的选项。例如,为了强制 Spring 在每次需要时都产生一个新的 bean ...
JSP开发环境是您用来开发、测试和运行JSP程序的地方。本节将会带您搭建JSP开发环境,具体包括以下几个步骤。配置Java开发工具(J...
Servlet 网页重定向当文档移动到新的位置,我们需要向客户端发送这个新位置时,我们需要用到网页重定向。当然,也可能是为了负载...
Servlet 发送电子邮件使用 Servlet 发送一封电子邮件是很简单的,但首先您必须在您的计算机上安装 JavaMail API 和 Java Activat...