Skip to main content

Bookmark service (MongoDB & Spring REST) -2/2

    I accidentally deleted my development VM. I got lucky having the habit of taking notes. This blog is useful. Development VM is doom to be lost. Rebuild it waste time, but having a clean slate is refreshing~. What concerns me more is my AWS free quota this month is reaching 85%. The second VM I launched but never being used might be the one to blame. (Of course, my mistake.) I terminated the wrong VM. Now I got Linux 2 built. Great, just threw away everything happened on AMI. 


1st layer: Page


Page class

 

Originally, I need to prepare getter/setter for all class properties for Spring. By using lombok, I only need to create constructors. lombok will deal with getter/setter and toString(). But there are chances to call getter/setter, but how? .......Naming convention.... Capitalize the 1st character with the prefix get/set. 

Annotation @Data was used on this class. 

Repository class




https://docs.spring.io/spring-data/mongodb/docs/3.0.0.RELEASE/reference/html/#mongodb.repositories.queries

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.core-concepts

Spring Repository handles intuitive implementation. The developers only need to expose (and guess the naming convention) desired functionalities to other classes. The combinations of defaults are about to rewrite query statements. i.e.

curd Repository provides: findBy, countBy, deleteBy, etc.
Repository provides: containing, like, not in, regex, etc.

Take Page.title as an example, the possible combination could be: 

findByTitle(), deleteByTitleLike(), countByTitleNotIn(), findByTitleRegex(), etc. 

If you're not happy with Spring's service, you can create your own trouble(I'm kidding) by creating multiple interfaces. 


Controller class


Controller exposes methods to URL. Developers can define the "path" and parameters as wish. There are annotations for REST (@GetMapping, @PostMapping) and for general usage (@RequestMapping). In REST, @GetMapping is using method: GET, @PostMapping is also using method: GET, but functioning as INSERT. @RequestMapping can use method:POST as hidden form, but not applicable to REST. 

My controller is the main body to use Repository instance. Based on Spring's tutorial, Repository's instance was stored here. And other classes use @Autowired reference. 


RepositoryCustom, RepositoryImpl classes



Developers are picky. (Don't take it at the face value.)(Customers are picky. They have the very rights. We have the work. Wonderful! (by all meanings.)) When more sophisticated operations are required, customizing repository functionalities is inevitable. At the earlier version, I didn't use Controller and Spring's sample expose interface to URL directly. The only way to customize process is by extending interface. After resolving extension problems, I still had to deploy Controller since Spring does't handle custom functions even though I put annotation on it. I found maybe I can define functionalities in Controller, like how Spring defines id specific operations. 

The setting of a list property in Page object is intentional. Collection of nested object is real-world requirement. No one want to repeatedly typing the entire list only for appending or deleting one item( at Page layer).  And nested objects are stored as references in MongoDB( at Bookmk layer). 


Here are all concepts I thought worth introducing. I learned much from it. 


Comments

  1. BONANZAS CASINO GIVES a HUGE CHANCE to WIN!
    BONANZAS CASINO GIVES A HUGE 10bet CHANCE TO WIN! · jeetwin BONANZAS CASINO ボンズ カジノ RESERVED AT CASINO.COM · CASINO BONANZAS CASINO RESERVED AT CASINO GIVES A BIG CHANCE TO WIN! · CASINO BONANZAS CASINO

    ReplyDelete

Post a Comment

Popular posts from this blog

Guide to Preserving HuggingFace Models in Google Colab Environments

Conclusion:  Step 1:  find the model path: ls ~/.cache  Step 2:  Copy the entire folder to Google Drive:  Step 3:  Set model path to the subfolder under snapshot: My Story: I initially began exploring Generative AI (GAI) and Google Colab through Stable Diffusion. In the past, as I mainly wrote server services and console applications, I was less familiar with data science modes like R and Jupyter that can maintain a paused state. I didn't quite understand the heavy burden on Colab of creating a temporary Stable Diffusion WebUI with .ipynb, as suggested by popular guides. I just found it troublesome that connections often took a long time and then dropped, requiring a restart. Recently, while testing new versions of the Stable Diffusion model, and facing challenges due to Colab's policies making various versions of WebUI difficult to run successfully, I started researching how to write my own test programs in Colab. Eventually, I understood that Colab is ess...

Setup Maven and two basic projects

    The interesting implementation of Java I proceed to is Spring. And, only getting Java running is not enough. I also need to set up Maven. This name is new to me, and I found many Spring tutorials just skip this part. At least I need Maven to generate templates for me. I should learn it more. ( I knew there is a great tool -- Eclipse -- can make tedious things disappear. I’m taking a strategy to install all experiments I want to try and throw away when it's full. And that's an external VM, not my PC. I, not yet, want to do research about installing Eclipse on AMI. )    Upgrade to Java 8     First is to upgrade Java on AMI to Java8. AWS provides advanced tools for Linux 2. And DIY for Linux2. At least there are solutions for my choice.  Amazon Corretto 8 Installation Instructions for Amazon Linux 2 https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/amazon-linux-install.html Here are commands I used: >wget */amazon-corretto-8-x64-linux-jdk.d...