V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Allianzcortex
V2EX  ›  分享创造

一个简单的前后端分离 CRUD Spring Boot 示例

  •  1
     
  •   Allianzcortex · 2019-04-17 22:36:58 +08:00 · 1904 次点击
    这是一个创建于 2039 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是为一个课程设计做的项目,各种 CRUD 操作。自己当时在学 Spring Boot 的时候网上找到的实例总是太复杂或者太简单,这个相对来讲功能多一些。

    代码链接: https://github.com/Allianzcortex/code_collection/tree/master/Spring-Boot-Based-Database-TeamProject

    参考:

    1. 完全前后端分离,Spring 提供后端 json API,前端由纯 HTML+CSS+Jquery 组成
    2. 技术栈包括 Spring Boot + Spring MVC + Spring Data JPA ,其中 JPA 不负责生成数据库表(auto-ddl=none), 所有表由建表脚本构成,JPA 只起到映射作用.一些 JPA 无法完成的功能由 JDBC Template 执行查询
    3. 不包含外键,数据一致性由代码逻辑保证. transactionitems 的关系会保存在中间表 transaction_items

    要求:

    1. Show table:要求输入一个表的名称,返回表的所有字段并展示。实际会返回数据库里的所有表并展示在一个下拉列表里
    2. Add New Article: 添加一个新的文章(包括 title/magazine/volume number/pages/authors),存在一些验证需求
    3. Add new Customer: 添加一个新的消费者(包括 lname/fname/phone number/mailing address)。如果存在同名情况 需要确认这是否是一个新的客户
    4. Add New Transaction: 添加一个新的交易(包括 customer ID 与 item 的 id 与 price)。其中会要求用户有一个 discount_code (折扣码)字段。用户最终交易需要支付的价格为:Sum*(1-2.5*DC/100),其中 DC 计算方法为:得到过去五年内该用户的消费记录,在 0-100 之间则 DC 为 0,在 100-200 之间则为 1,依此类推对消费额大于 500 的用户折扣码为 5
    5. Cancen Transaction: 输入 Transaction Number,如果该交易发生于一个月内则支持取消,删除所有与该次交易有关的信息(i.e. 删除 transactions 与 transaction_items 表的有关信息),并返回所有可以取消的交易

    执行:

    1. 新建数据库并执行 existing_tables.sqlnew_tables.sql文件,创建数据表

    2. 修改 application.properties 里的配置变量

    3. a. 如果想通过源码执行,只需要导入 Intellij IDEA/Eclipse 后解析依赖并执行程序

      b. 如果想通过 jar 包执行,在命令行里输入 java -Dspring.config.location=application.properties -jar Application.jar

    4. 打开 index_html

    示例:

    e.g. 代码里如何找到发生在 5 年内的交易:

    Date today = new Date();
    Calendar cal = new GregorianCalendar();
    cal.setTime(today);
    //  get transactions nearly 5 years
    cal.add(Calendar.YEAR, -5);
    Date yearago5 = cal.getTime();
    System.out.println(yearago5.getTime());
    
            List<Transaction> results = transactionRepository.findByCustomerIdAndTransactionDateAfter(
                    customerId, yearago5);
    
    
    public interface TransactionRepository extends JpaRepository<Transaction, Integer> {
    
        List<Transaction> findByCustomerIdAndTransactionDateAfter(Integer customerId, Date thirtyDaysAgoDate);
        }
    

    部分截图: 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png

    1 条回复    2019-04-18 14:42:56 +08:00
    qfdk
        1
    qfdk  
       2019-04-18 14:42:56 +08:00 via iPhone
    jhispter 多好 逃~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1173 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:45 · PVG 02:45 · LAX 10:45 · JFK 13:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.