Category Archives: Spring

Spring Configuration (XML, Annotation & Java)

First step to use Spring in your Java application, is to create Spring configuration metadata, this metadata tells Spring what beans “Java classes” you need to be instantiated in Spring container. You have three options to write or code your configuration metadata “XML, annotation or Java configuration”

springsource

Objective

How to prepare Spring configuration metadata using XML, annotation or Java based configuration?

Continue reading

Spring @Profile

We can enable the environment-aware feature “Profile” in Spring XML configuration, also we can enable this feature using annotation @Profile in Spring @Configuration class “the Spring annotation configuration” which is equivalent to XML configuration <beans…>…..</beans>.

springsource

Objective:

  • How to use @Profile to load Spring configuration for specific environment?

Continue reading

Spring Profile XML Configuration

If you like to load environment specific spring configuration you can do this using profile. In other words, if you want to load a set of beans that have different settings on different environment (development, testing or production) you can use profile feature instead of pointing to a different spring xml configuration at each stage.

springsource

Objective:

  • How to use profile in spring xml configuration?

Continue reading

MyBatis + Spring + Junit (The Missing Part)

We have seen in Mybatis + Spring (XML | Annotation) Mapper how to write a simple mybatis-spring app and what is actually needed to get it up and running. Here I will extend that sample code to cover more stuff that you may face in a real “coding”. We will see how to make a single select that will fetch the one and the many of a “one-to-many” relationship, who to use mybatis config file with spring (if you need it), how to test mybatis-spring code using junit and things you need to watch out!

H2 embedded database has been used to make this example easy to run. But you still can use it with other databases e.g. “MySql, Oracle,….”

mybatis-spring-junit

Objectives:

  • How to use make a single select that will fetch all one to many records?
  • How to reference mybatis config file in spring xml config file?
  • How to test using junit?

Continue reading

Spring MVC + jQuery File Upload (multiple, drag&drop, progress…)

jQuery-File-Upload js library is “so far” the most elegant, smart, simple..etc js library I have used to upload files. Simply it is amazing. It supports async upload “Ajax”, multiple files upload, drag&drop, progress update and a lot more. Here we will see an example of uploading multiple files to Spring MVC app. Bootstrap has been used in this example to make the UI more attractive.

spring-mvc-jquery-file-upload

Objectives:

Continue reading

Mybatis + Spring (XML | Annotation) Mapper

Here we will see what we need to do to connect to a relational database “MySql, Oracle, H2..etc” using myBatis with Spring framework & how to implement mappers using xml or annotation such as @Select, @Insert,….etc. For the sake of simplicity I have used H2 embedded database so you can run the sample code. However, you can use this sample code to run with MySql or any other relational database.

Source Code @ github

Note: If you have Maven you can run this sample code directly using 
../spring-mybatis>mvn exec:java

mybatis-spring

Objectives:

  • How to use MyBatis with Spring framework?
  • How to implement mapper using xml or annotation @Select, @Insert…?

Continue reading

Spring MVC Upload File Using jQuery.ajax | FormData | HTML Form

You can upload files to Spring MVC app in many different ways. For the server side, using MultipartHttpServletRequest is the easiest way to get uploaded files. For the client side we have different options, traditional synchronous method “using html form with submit” or asynchronous method by using Ajax.

Similar Post: Spring MVC + jQuery File Upload (multiple, drag&drop, progress…)

data:image/png;base64,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

Objectives:

  • How to receive uploaded files “Multipart” using Spring MVC?
  • How to upload files synchronously “HTML Form and Submit Button”?
  • How to upload files asynchronously using JQuyer.ajax or FormData object?

Continue reading