項目結構
src/main/java
├── controller
│ └── UserController.java
├── service
│ ├── UserService.java
│ └── impl
│ └── UserServiceImpl.java
├── dao
│ ├── UserDao.java
│ └── impl
│ └── UserDaoImpl.java
├── entity
│ └── User.java
└── config
└── SpringConfig.java
核心代碼示例
1. 實體類
public class User {
private Long id;
private String username;
private String password;
// getter/setter/toString 省略
}
2. DAO 層
@Repository
public interface UserDao {
void save(User user);
User findById(Long id);
List findAll();
}
@Repository
public class UserDaoImpl implements UserDao {
@Autowired private JdbcTemplate jdbcTemplate;
public void save(User user) {
String sql = "INSERT INTO users(username,password) VALUES(?,?)";
jdbcTemplate.update(sql, user.getUsername(), user.getPassword());
}
// 其他方法省略
}
3. Service 層
public interface UserService {
void register(User user);
User getUser(Long id);
}
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired private UserDao userDao;
public void register(User user) {
// 業務校驗
if (userDao.findByUsername(user.getUsername()) != null) {
throw new RuntimeException("用戶已存在");
}
userDao.save(user);
}
// 其他方法省略
}
4. Controller 層
5. Spring 配置 (Java Config)
關鍵點總結
- 分層職責:Controller 接收請求/響應視圖,Service 封裝業務邏輯/事務,DAO 專注數據訪問。
- 依賴倒置:上層依賴接口,實現類可替換,便於測試與擴展。
- 事務邊界:在 Service 方法或類上加
@Transactional,保證業務原子性。
- 異常處理:Controller 捕獲 Service 異常轉為用戶友好提示,避免堆棧信息洩露。