在Spring Boot 2中使用MyBatis进行性能优化是一个重要的任务。以下是一些常见的优化策略:
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.max-lifetime=1800000
@CacheNamespace
注解或XML配置开启二级缓存,适用于多个SqlSession之间的共享缓存。@CacheNamespace
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(@Param("id") Long id);
}
SELECT *
,只选择需要的列;使用索引优化查询。<if>
、<choose>
等标签编写动态SQL,减少不必要的SQL语句执行。<select id="findUsers" parameterType="map" resultType="User">
SELECT * FROM users
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
<association>
和<collection>
标签进行关联查询,减少N+1查询。<resultMap id="userResultMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<collection property="roles" ofType="Role">
<id property="id" column="role_id"/>
<result property="name" column="role_name"/>
</collection>
</resultMap>
@ManyToOne
、@OneToMany
等注解时,设置fetch = FetchType.LAZY
,减少不必要的数据加载。@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Integer age;
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private List<Role> roles;
}
public Page<User> findUsers(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
return userMapper.selectAllUsers();
}
@Async
public void sendEmail(String content) {
// 发送邮件的逻辑
}
通过以上策略,可以有效地提高Spring Boot 2中MyBatis的性能。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。