spring篇
1.@Resource和@Autowired注解的区别
主要区别
- 来源和规范:
@Autowired
是Spring特有的,而@Resource
是Java EE规范的一部分。 - 默认自动装配行为:
@Autowired
默认按类型自动装配,而@Resource
既可以按名称也可以按类型自动装配。 - 使用位置:
@Autowired
可以用在构造器、字段和setter方法上,而@Resource
只能用在字段和setter方法上。 - 冲突解决:当存在多个相同类型的bean时,
@Autowired
需要使用@Qualifier
来解决冲突,而@Resource
可以通过指定name
属性来解决。 - 兼容性:
@Resource
注解在Java EE环境中也可以使用,而@Autowired
是Spring特有的。
mybatis篇
1.mybatis如何实现分页查询
1.使用分页插件
PageHelper 是一个流行的分页插件,使用简单:
1.添加依赖(Maven):
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.3</version>
</dependency>
2.配置插件: 在 Spring Boot 中,通常在 application.properties
中配置。
// 配置PageHelper
@Configuration
public class MyBatisConfig {
@Bean
public PageHelper pageHelper() {
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("helperDialect", "mysql");
properties.setProperty("reasonable", "true");
properties.setProperty("supportMethodsArguments", "true");
pageHelper.setProperties(properties);
return pageHelper;
}
}
3.使用: 在查询之前调用 PageHelper.startPage()
:
PageHelper.startPage(pageNum, pageSize);
List<User> users = userMapper.selectAll();
PageInfo<User> pageInfo = new PageInfo<>(users);
2.使用RowBounds
MyBatis 提供了 RowBounds
类,可以实现简单的分页:
List<User> users = userMapper.selectByExample(example, new RowBounds(pageNum, pageSize));
3.MyBatis Plus分页插件:
- MyBatis Plus提供了自己的分页插件,它通过创建一个
Page<T>
对象来实现分页查询。 - 示例代码:
IPage<User> page = new Page<>(pageNum, pageSize);
IPage<User> result = userMapper.selectPage(page, null);
2. MyBatis的`ResultType`和`ResultMap`的区别?
`ResultType`:指定映射类型,只要查询的字段名和类型的属性名匹配可以自动映射。
`ResultMap`:自定义映射规则,当查询的字段名和映射类型的属性不匹配时可以通过`ResultMap`自定义映射规则,也可以实现一对多、一对一映射。
3. `{}`和`${}`有什么区别?
`{}`是标记一个占位符,可以防止sql注入。
`${}`用于在动态sql中拼接字符串,可能导致sql注入。