21、MyBatis中的批量插入和批量更新如何实现?
在MyBatis中,可以使用batch语句来实现批量插入和批量更新,以减少与数据库的交互次数,提高效率。具体实现方式如下:
1)批量插入
// 定义一个List,其中包含要插入的对象
List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
userList.add(user3);
// 使用批量插入语句插入数据
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
for (User user : userList) {
userMapper.insertUser(user);
}
sqlSession.commit();
sqlSession.close();
2)批量更新
// 定义一个List,其中包含要更新的对象
List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
userList.add(user3);
// 使用批量更新语句更新数据
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
for (User user : userList) {
userMapper.updateUser(user);
}
sqlSession.commit();
sqlSession.close();
需要注意的是,使用批量插入和批量更新时,需要在MyBatis的配置文件中配置batch的执行器类型,例如:
<configuration>
<settings>
<setting name="defaultExecutorType" value="BATCH"/>
</settings>
...
</configuration>
22、MyBatis中的XML配置文件中的property标签和parameterType属性有什么区别?
MyBatis中的XML配置文件中的property标签和parameterType属性都是用于指定SQL语句中的参数类型,但它们的使用场景和含义有所不同:
property标签:用于指定Java对象中的某个属性作为参数。当Java对象作为参数传递给SQL语句时,MyBatis会自动将该Java对象中的属性值设置到SQL语句中的参数上。
parameterType属性:用于指定Java对象本身作为参数。当Java对象作为参数传递给SQL语句时,MyBatis会将该Java对象作为一个整体传递给SQL语句。
例如,有如下的Java对象:
public class User {
private Long id;
private String username;
private String password;
// getter和setter方法
}
使用property标签的示例:
<!-- 插入用户数据 -->
<insert id="insertUser" parameterType="User">
insert into user (username, password) values (#{username}, #{password})
</insert>
使用parameterType属性的示例:
<!-- 查询用户数据 -->
<select id="selectUser" resultType="User" parameterType="Long">
select * from user where id = #{id}
</select>
23、MyBatis中的resultType和resultMap有什么区别?
在MyBatis中,resultType和resultMap都是用来映射查询结果到Java对象的。区别如下:
resultType是指定返回结果的类型,可以是Java中的基本类型、JavaBean、Map等。
resultMap是指定映射关系的定义,包含了结果集列和JavaBean属性之间的映射关系,可以复用。使用resultMap可以让映射关系更灵活、易于维护。
一般来说,如果查询结果只有一列或者基本类型,可以使用resultType;如果查询结果比较复杂,包含多个列或关联查询,建议使用resultMap。
24、MyBatis中的动态SQL中的choose、when、otherwise标签的作用是什么?
MyBatis中的动态SQL中的choose、when、otherwise标签用于条件分支处理,类似于Java中的if-else语句。choose标签包含多个when标签和一个可选的otherwise标签,当when标签中的条件成立时,执行when标签中的SQL语句;如果所有when标签都不成立,执行otherwise标签中的SQL语句。
25、MyBatis中的枚举类型如何处理?
MyBatis中的枚举类型可以通过TypeHandler进行处理。TypeHandler是MyBatis中处理Java对象和数据库中数据类型转换的核心组件之一,可以自定义实现TypeHandler接口或继承BaseTypeHandler类来实现特定类型的转换。对于枚举类型,可以实现一个枚举类型的TypeHandler,将Java中的枚举类型转换为数据库中的相应数据类型,或将数据库中的数据类型转换为Java中的枚举类型。