“Java DAO(Data Access Object)如何升级”通常取决于当前系统的规模、复杂度以及你希望解决什么问题。下面我从传统 DAO → 现代 DAO → 架构级升级三个层次,一步一步说明,并给出可落地的做法。
典型代码特征:
public class UserDao {
public User findById(int id) {
String sql = "SELECT * FROM user WHERE id = ?";
// JDBC 操作
}
}
问题:
适合: 不想引入 ORM,但想减少样板代码
@Repository
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public User findById(int id) {
return jdbcTemplate.queryForObject(
"SELECT * FROM user WHERE id = ?",
new BeanPropertyRowMapper<>(User.class),
id
);
}
}
✅ 优点:
❌ 缺点:
@Mapper
public interface UserDao {
User selectById(@Param("id") int id);
}
<select id="selectById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
✅ 优点:
✅ 建议:
public interface UserDao extends JpaRepository<User, Long> {
List<User> findByName(String name);
}
✅ 优点:
❌ 缺点:
❌ 错误示例:
public void saveUser(User user) {
// 校验 + 逻辑 + 保存
}
✅ 正确拆分:
// DAO
public interface UserDao {
void insert(User user);
}
// Service
public void createUser(User user) {
validate(user);
userDao.insert(user);
}
❌ 不推荐:
Map<String, Object>
✅ 推荐:
User
Order
Product
DAO → Entity(表结构)
Service → DTO(业务视图)
Controller → VO(前端展示)
public interface UserRepository {
User findById(Long id);
void save(User user);
}
✅ 好处:
| 当前状态 | 推荐升级 |
|---|---|
| 原生 JDBC | Spring JDBC / MyBatis |
| 手写 DAO 实现 | Mapper 接口 |
| DAO 写业务逻辑 | 拆分 Service |
| SQL 分散 | 集中 Mapper / Repository |
| 单表简单 | JPA |
| 复杂 SQL | MyBatis |
✅ 保守升级(最稳)
JDBC → Spring JDBC → MyBatis
✅ 快速开发
JPA + Spring Data
✅ 企业级标准
MyBatis + Service + DTO + Repository
如果你愿意,可以直接告诉我:
我可以:
只要贴一段你现在的 DAO 代码即可。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。