springside / springside4—CRUD頁面教程


轉載 https://github.com/springside/springside4/wiki/Tutorial

1. 數據庫設計

在src/resouce/sql/schema 中手工編寫創建表的sql

 create table acct_user ( id bigint generated by default as identity, email varchar(255), login_name varchar(255) not null unique, name varchar(255), password varchar(255), primary key (id) ) ; 

2. Entity

2.1 手工編寫Entity,利用默認大於配置原理,寫盡量少的注釋, 一般只有帶前綴的表名,Cache和關聯屬性需要注釋。

@Entity @Table(name = "acct_user") @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class User extends IdEntity { private String loginName; private String password; private String name; private String email; //... getter and setter } 
2.2 執行JpaMapptingTest校驗正確。

2.3 Spring能自動掃描@Entity類,無需配置。

3. DAO

3.1 寫一個簡單的DAO接口,日后再根據需要添加方法定義。

public interface UserDao extends PagingAndSortingRepository<User, Long> { User findByLoginName(String loginName); } 
3.2 Spring Data JPA能根據自動掃描繼承於Repostory及其子接口的接口,無需配置。

3.3 如果有復雜的操作或ORM關系可添加單元測試,否則可忽略。

4.Service

4.1 按業務划分新建或使用已有Service(與DAO不應是一一對應關系),根據需求添加方法定義。 注意事務定義。

@Component @Transactional(readOnly = true) public class AccountManager { private UserDao userDao; public User getUser(Long id) { return userDao.findOne(id); } @Transactional(readOnly = false) public void saveUser(User entity) { userDao.save(entity); } } 
4.2 Spring能自動掃描@Service或@Component, 無需配置。

4.3 對有業務邏輯的應該編寫單元測試,並用Mock框架模擬dao層。

Web Controller

4.1 寫一個Controller負責List, Create, Delete。

@Controller @RequestMapping(value = "/account/user") public class UserController { private AccountManager accountManager; @RequestMapping(value = { "list", "" }) public String list(Model model) { List<User> users = accountManager.getAllUser(); model.addAttribute("users", users); return "account/userList"; } @RequestMapping(value = "create") public String createForm(Model model) { model.addAttribute("user", new User()); return "account/userForm"; } @RequestMapping(value = "save") public String save(User user, RedirectAttributes redirectAttributes) { accountManager.saveUser(user); redirectAttributes.addFlashAttribute("message", "Create user " + user.getLoginName() + " success"); return "redirect:/account/user/"; } } 

4.2 一個DetailController負責Update頁面。

@Controller @RequestMapping(value = "/account/user/") public class UserDetailController { private AccountManager accountManager; @RequestMapping(value = "update/{id}") public String updateForm(Model model) { return "account/userForm"; } @RequestMapping(value = "save/{id}") public String save(@ModelAttribute("user") User user, RedirectAttributes redirectAttributes) { accountManager.saveUser(user); redirectAttributes.addFlashAttribute("message", "Modify user " + user.getLoginName() + " success"); return "redirect:/account/user/"; } @ModelAttribute("user") public User getAccount(@PathVariable("id") Long id) { return accountManager.getUser(id); } } 

4.3 Spring能自動掃描@Controller, 無需配置。

5. JSP

5.1 寫一個List頁面,一個Form頁面, 參見mini-web。

5.2 對關鍵頁面流程應該編寫Selenium功能測試用例。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM