<selectid="findUserWithOrders"resultMap="userResultMap"> SELECT u.id AS user_id, u.name AS user_name, o.id AS order_id, o.order_date FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE u.id = #{id} </select>
运行 HTML
使用场景
一对多、多对多关系映射
复杂查询结果映射
3. 批量操作的性能优化
介绍
MyBatis 支持批量操作,可以显著提升插入、更新、删除的性能。
代码示例
1 2 3 4 5 6 7 8
try (SqlSessionsession= sqlSessionFactory.openSession(ExecutorType.BATCH)) { UserMappermapper= session.getMapper(UserMapper.class); for (inti=0; i < 1000; i++) { Useruser=newUser("user" + i, i); mapper.insertUser(user); } session.commit(); // 批量提交 }
使用场景
批量插入数据
批量更新或删除
4. 自定义 TypeHandler
介绍
通过自定义 TypeHandler,可以处理特殊类型的数据(如 JSON、枚举等)。
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
@MappedTypes(JSONObject.class) publicclassJsonTypeHandlerextendsBaseTypeHandler<JSONObject> { @Override publicvoidsetNonNullParameter(PreparedStatement ps, int i, JSONObject parameter, JdbcType jdbcType)throws SQLException { ps.setString(i, parameter.toJSONString()); }