zoukankan      html  css  js  c++  java
  • 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功能测试用例。


    作者:Kei
    出处:http://www.cnblogs.com/ikei/
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

     
  • 相关阅读:
    Twitter的分布式自增ID算法snowflake (Java版)
    quartz获取缓存中所有运行中的Job
    Git简易的命令入门
    Eclipse新建Maven工程——git篇
    Spring基于AspectJ的AOP的开发——注解
    Quartz-Spring定时任务器持久化,通过Service动态添加,删除,启动暂停任务
    用windows命令解压chm文件
    播放器
    ab压力测试
    自定义事件javascript
  • 原文地址:https://www.cnblogs.com/ikei/p/7212596.html
Copyright © 2011-2022 走看看