在 Java 开发中,DAO(Data Access Object)层的优化,核心目标是:减少数据库压力、提高响应速度、增强可维护性和扩展性。下面从设计、SQL、框架、缓存、连接、监控几个维度系统说明。
public interface UserDao {
User findById(Long id);
}
✅ 好处:易测试、易替换实现(JDBC / MyBatis / JPA)
❌ 不推荐:
List<Map<String,Object>> query(String sql);
✅ 推荐:
❌
SELECT * FROM user
✅
SELECT id, username FROM user
SELECT * FROM user LIMIT 10 OFFSET 20;
Java 中:
PageHelper.startPage(2, 10);
❌ 问题代码:
for (Order o : orders) {
o.setUser(userDao.findById(o.getUserId()));
}
✅ 优化:
userDao.findByIds(ids);
INSERT INTO user (name) VALUES (?), (?), (?)
或:
jdbcTemplate.batchUpdate(...)
#{} 防 SQL 注入resultMap<cache/>
fetch=EAGERinterface UserDto {
String getUsername();
}
@BatchSize✅ 推荐:
spring:
datasource:
hikari:
maximum-pool-size: 20
❌ 错误:
@Transactional
public void business() {
dao1.query();
httpCall(); // 慢
dao2.update();
}
✅ 优化:
Cache<Long, User> cache = Caffeine.newBuilder()
.maximumSize(1000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build();
⚠️ 注意缓存一致性(更新 DB 后清缓存)
spring:
datasource:
dynamic:
primary: master
log-impl=STDOUTSHOW SLOW QUERIES;
✅ DAO 优化 Checklist:
如果你愿意,可以:
我可以直接帮你针对性优化。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。