<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yiğit Erkal</title>
    <description>The latest articles on DEV Community by Yiğit Erkal (@yigi).</description>
    <link>https://dev.to/yigi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F757076%2Fd3bccb26-1f86-4c6e-af7e-3d346120d8b5.jpeg</url>
      <title>DEV Community: Yiğit Erkal</title>
      <link>https://dev.to/yigi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yigi"/>
    <language>en</language>
    <item>
      <title>Java Interview - abstract</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Thu, 28 Apr 2022 10:20:45 +0000</pubDate>
      <link>https://dev.to/yigi/java-interview-abstract-1e32</link>
      <guid>https://dev.to/yigi/java-interview-abstract-1e32</guid>
      <description>&lt;p&gt;Let's talk about the abstract keyword in Java and what can be asked during the Java interview related to abstract?&lt;/p&gt;

&lt;h2&gt;
  
  
  Explain About Abstract Classes in Java?
&lt;/h2&gt;

&lt;p&gt;Sometimes we may come across a situation where we cannot provide implementation to all the methods in a class. We want to leave the implementation to a class that extends it. In such case we declare a class as abstract. To make a class abstract we use key word abstract. Any class that contains one or more abstract methods is declared as abstract. If we don’t declare class as abstract which contains abstract methods we get compile time error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For example&lt;/strong&gt;; if we take a vehicle class we cannot provide implementation to it because there may be two wheelers , four wheelers etc. At that moment we make vehicle class abstract. All the common features of vehicles are declared as abstract methods in vehicle class. Any class which extends vehicle will provide its method implementation. It’s the responsibility of subclass to provide implementation. The important features of abstract classes are : &lt;/p&gt;

&lt;p&gt;1) Abstract classes cannot be instantiated. &lt;br&gt;
2) An abstract classes contains abstract methods, concrete methods or both. &lt;br&gt;
3) Any class which extends abstract class must override all methods of abstract class. &lt;br&gt;
4) An abstract class can contain either 0 or more abstract methods.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;From this point, it is better to compare Abstract classes with Interfaces since the most common questions are related to comparison between them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Abstract Class vs. Interface 🤼‍♂️
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Interface support multiple inheritance&lt;br&gt;
Abstract class does not support multiple inheritance&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It means you can extend an interface with one or more (hence multiple inheritance) interfaces like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Interface_A&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Interface_B&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Interface_C&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;MyInterface&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;Interface_A&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Interface_B&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interface_C&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's try to extend an abstract class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Class_A&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;abstract&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyAbstractClass&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;Class_A&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Empty methods can be defined in the interface, but both empty methods and filled methods can be defined in abstract classes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using abstract classes provides an advantage in terms of speed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When we write a new method in the Interface, it is necessary to fill this method one by one in all the classes we implement from this interface, but the situation is different in abstract classes, when we define a method and fill it in, all classes derived from our abstract class gain this feature.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❗❗❗ This behavior has changed with Java 8. Please take a look at "default" methods in interfaces.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;All the objects in the Interface must be "public", while in Abstract classes it is not necessary to have all the elements "public".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Interface does not contain constructor methods. An abstract class can contain constructor methods.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Interface methods cannot be static. Abstract class non-abstract methods can be defined as static.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>interview</category>
      <category>career</category>
      <category>programming</category>
    </item>
    <item>
      <title>Tools - JSON Visio</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Wed, 27 Apr 2022 22:01:45 +0000</pubDate>
      <link>https://dev.to/yigi/tools-json-visio-2akk</link>
      <guid>https://dev.to/yigi/tools-json-visio-2akk</guid>
      <description>&lt;p&gt;JSON Visio is data visualization tool for your json data which seamlessly illustrates your data on graphs without having to restructure anything, paste directly or import file.&lt;/p&gt;

&lt;p&gt;Prepare your JSON data and just paste it on the left side as&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpe39snaefv3nke73enbk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpe39snaefv3nke73enbk.jpg" alt="json" width="448" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and here is the output. &lt;/p&gt;

&lt;h2&gt;
  
  
  🪄 Wingardium Leviosa 🪄
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1npy2tlqbxph1bbq96nk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1npy2tlqbxph1bbq96nk.jpg" alt="json" width="800" height="716"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>json</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Java - Reflection</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Wed, 27 Apr 2022 21:37:17 +0000</pubDate>
      <link>https://dev.to/yigi/java-reflection-17kc</link>
      <guid>https://dev.to/yigi/java-reflection-17kc</guid>
      <description>&lt;p&gt;Reflection feature helps us to access classes, methods, variables and other properties of objects. Moreover, it is used to get, control and manage information such as class, method, properties and annotation such as name, parameter. We do this already by defining a variable and when we put "." with the completion of the IDE.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Student&lt;/span&gt; &lt;span class="n"&gt;student&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Student&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;student&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="c1"&gt;// IDE offers us features such as methods or variables here&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To start with, a simple Student class&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Student&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;Metallica&lt;/span&gt; &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"James"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;//... other getters and setter&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and here is our test class to test what is reflection&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Class&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;myClass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Class&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"com.org.Student"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;Object&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myClass&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newInstance&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// varargs can be used for getDeclaredConstructor &lt;/span&gt;
&lt;span class="nc"&gt;Constructor&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;cons&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="n"&gt;myClass&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDeclaredConstructor&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TYPE&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Field&lt;/span&gt; &lt;span class="nl"&gt;field:&lt;/span&gt; &lt;span class="n"&gt;myClass&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDeclaredFields&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;
   &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Field:"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getName&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Field:id&lt;br&gt;
Field:name&lt;br&gt;
Field:age&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Although there is no access to a private field other than getter and setter, we obtained the names of those variables 💡 So this is more beneficial in test and debug.&lt;/p&gt;

&lt;p&gt;In the same way we can get the modifiers...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;modifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getModifiers&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
 &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Modifer: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;Modifier&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;modifier&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Modifier: public&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Because our Student class implemented as public.&lt;/p&gt;

&lt;p&gt;Moreover, we can invoke public, private and static methods via invoke() in order to get the required information from them.&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Java Interview - constructor</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Tue, 26 Apr 2022 21:42:02 +0000</pubDate>
      <link>https://dev.to/yigi/java-interview-constructor-5ha4</link>
      <guid>https://dev.to/yigi/java-interview-constructor-5ha4</guid>
      <description>&lt;p&gt;Let's talk about the constructors in Java and what can be asked during the Java interview related to constructors?&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Constructor in Java?
&lt;/h2&gt;

&lt;p&gt;We use constructors to initialize all variables in the class when an object is created. As and when an object is created it is initialized automatically with the help of constructor in java.&lt;/p&gt;

&lt;p&gt;We have two types of constructors:&lt;br&gt;
1) Default Constructor&lt;br&gt;
2 Parameterized Constructor&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;className&lt;/span&gt;&lt;span class="o"&gt;(){}&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;className&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parameters&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;){}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Call One Constructor From the Other Constructor?
&lt;/h2&gt;

&lt;p&gt;With in the same class if we want to call one constructor from other we use this() method. Based on the number of parameters we pass appropriate this() method is called.&lt;/p&gt;

&lt;p&gt;Restrictions for using this method:&lt;br&gt;
1) This must be the first statement in the constructor&lt;br&gt;
2) We cannot use two this() methods in the constructor&lt;/p&gt;

&lt;h2&gt;
  
  
  Difference Between This() and Super() in Java?
&lt;/h2&gt;

&lt;p&gt;this() is used to access one constructor from another with in the same class while super() is used to access superclass constructor. Either this() or super() exists it must be the first statement in the constructor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can We Override Constructors in Java?
&lt;/h2&gt;

&lt;p&gt;Only methods can be overridden in java. Constructors can’t be inherited in java. So, there is no point of overriding constructors in java.&lt;/p&gt;

</description>
      <category>java</category>
      <category>interview</category>
      <category>career</category>
      <category>programming</category>
    </item>
    <item>
      <title>Java Interview - static</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Tue, 26 Apr 2022 20:19:11 +0000</pubDate>
      <link>https://dev.to/yigi/java-interview-static-5bmg</link>
      <guid>https://dev.to/yigi/java-interview-static-5bmg</guid>
      <description>&lt;p&gt;Let's talk about the static keyword in Java and what can be asked during the Java interview related to static?&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the Static Blocks and Static Initializers?
&lt;/h2&gt;

&lt;p&gt;Static blocks are also called as Static Initialization Blocks, a class can have any number of static blocks and they can appear anywhere inside java class. We declare static blocks when we want to initialize static fields in our class. &lt;u&gt;Static blocks gets executed exactly once when the class is loaded&lt;/u&gt;. Static blocks are executed even before the constructors are executed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;  
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;  
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Main Method"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;  
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Static block - 1"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Static block - 1 &lt;br&gt;
Main Method&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Can We Synchronize Static Methods in Java?
&lt;/h2&gt;

&lt;p&gt;Yes ✅ Synchronized methods are used to protect access to resources that are accessed concurrently. When a resource that is being accessed concurrently belongs to each instance of your class, you use a synchronized instance method; when the resource belongs to all instances (i.e. when it is in a static variable) then you use a synchronized static method to access it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Can Static Methods Access Instance Variables in Java?
&lt;/h2&gt;

&lt;p&gt;No ❌ Instance variables can’t be accessed in static methods. When we try to access instance variable in static method we get compilation error. The error is as follows:&lt;br&gt;
&lt;code&gt;Cannot make a static reference to the non static field name&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do We Access Static Members in Java?
&lt;/h2&gt;

&lt;p&gt;Static variables are owned by class rather than by its individual objects. Referring static variables outside the class is by &lt;u&gt;ClassName.myStaticVariable&lt;/u&gt; but inside the class it is similar to other instance variables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can We Override Static Methods in Java?
&lt;/h2&gt;

&lt;p&gt;No ❌ It is because &lt;u&gt;method overriding&lt;/u&gt; is based upon &lt;u&gt;dynamic binding&lt;/u&gt; at runtime and static methods are bonded using static binding at compile time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can We Define Static Methods Inside Interface?
&lt;/h2&gt;

&lt;p&gt;✅ Since Java8 you can have static methods in an interface (with body). Defining a static method within an interface is identical to defining one in a class. Moreover, a static method can be invoked within other static and default methods.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can constructors be static in Java?
&lt;/h2&gt;

&lt;p&gt;In general, a static method means that “The Method belongs to the class and not to any particular object” but a constructor is always invoked with respect to an object, so it makes no sense for a constructor to be static.&lt;/p&gt;

</description>
      <category>java</category>
      <category>interview</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>Spring - @RequestMapping</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Sat, 23 Apr 2022 12:21:54 +0000</pubDate>
      <link>https://dev.to/yigi/spring-requestmapping-5gjf</link>
      <guid>https://dev.to/yigi/spring-requestmapping-5gjf</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;It is used to &lt;strong&gt;map&lt;/strong&gt; web requests to Spring Controller methods.&lt;/p&gt;

&lt;p&gt;In Spring Web applications, @RequestMapping is one of the most used annotations. HTTP requests are mapped to MVC and REST controller handler methods with this annotation. &lt;/p&gt;

&lt;p&gt;URL handler using @RequestMapping annotation as it follows here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@RequestMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"/get/{id}"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RequestMethod&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GET&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The alternative approach in other words possible short version is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/get/{id}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can also implement other mappings mentioned below: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxga5dsnsk65nkfs193ep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxga5dsnsk65nkfs193ep.png" alt="RequestMapping Spring Annotation" width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To sum up, it is a better approach to use RequestMapping or alternative mapping in class level controllers since all your requests and responses will be handled in controller. Here is a full code example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Controller&lt;/span&gt;
&lt;span class="nd"&gt;@RequestMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"/orders"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RequestMethod&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GET&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DemoController&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;


  &lt;span class="nd"&gt;@RequestMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"/{orderId}"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RequestMethod&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GET&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nd"&gt;@ResponseBody&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getOrder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@PathVariable&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;orderId&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"Order ID: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;orderId&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;

  &lt;span class="nd"&gt;@RequestMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"/addProduct"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RequestMethod&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;POST&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;addProductPost&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@ModelAttribute&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"product"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; 
&lt;span class="nc"&gt;Product&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// some code&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

 &lt;span class="c1"&gt;// other mappings&lt;/span&gt;
 &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>spring</category>
      <category>java</category>
      <category>programming</category>
      <category>http</category>
    </item>
    <item>
      <title>Spring - @RequestBody and @ResponseBody</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Sat, 23 Apr 2022 11:50:17 +0000</pubDate>
      <link>https://dev.to/yigi/spring-requestbody-and-responsebody-4nji</link>
      <guid>https://dev.to/yigi/spring-requestbody-and-responsebody-4nji</guid>
      <description>&lt;h2&gt;
  
  
  @RequestBody
&lt;/h2&gt;

&lt;p&gt;Annotation indicating a method parameter should be bound to the body of the HTTP request. With the @RequestBody annotation, POST or PUT requests are handled. It is generally used to convert a request into an object in JSON or XML format.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F126ognvh9fzjvh2d8bz5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F126ognvh9fzjvh2d8bz5.jpg" alt="RequestBody Spring Annotation" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@RequestMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"/isConverted"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RequestMethod&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;POST&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@ResponseBody&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;isConvertedFromJson&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@RequestBody&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getUserName&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  @ResponseBody
&lt;/h2&gt;

&lt;p&gt;It can be put on a method and indicates that the return type should be written straight to the HTTP response body. Not placed in a Modal or View name. With the @ResponseBody annotation, we can return values ​​of multiple types such as String, application/json or application/xml.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzy58q7ef9rdrwvhubh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzy58q7ef9rdrwvhubh8.png" alt="ResponseBody Spring Annotation" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@RequestMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"/produceString"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RequestMethod&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GET&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@ResponseBody&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;produceString&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
     &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"Hello World"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>spring</category>
      <category>java</category>
      <category>programming</category>
      <category>http</category>
    </item>
    <item>
      <title>Spring - @PathVariable</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Mon, 18 Apr 2022 15:18:47 +0000</pubDate>
      <link>https://dev.to/yigi/spring-pathvariable-200o</link>
      <guid>https://dev.to/yigi/spring-pathvariable-200o</guid>
      <description>&lt;p&gt;A Spring annotation called &lt;strong&gt;@PathVariable&lt;/strong&gt; specifies that a method parameter should be tied to a URI template variable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/products/{id}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@ResponseBody&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getProductsById&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@PathVariable&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"ID: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A simple GET request to /api/products/{id} will invoke getProductsById with the extracted id value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8080/api/products/333 
---- 
ID: 333
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We may also specify the path variable name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/products/{id}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@ResponseBody&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getProductsById&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@PathVariable&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;productId&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"ID: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;productId&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  One Class to Rule Them All 🪄
&lt;/h2&gt;

&lt;p&gt;Best practice to handle not required path variables is to combine with Java Optional. In this way, you are both able to handle exceptions and the logic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="s"&gt;"/api/products"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/api/products/{id}"&lt;/span&gt; &lt;span class="o"&gt;})&lt;/span&gt;
&lt;span class="nd"&gt;@ResponseBody&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getProducts&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@PathVariable&lt;/span&gt; &lt;span class="nc"&gt;Optional&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPresent&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"ID: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"ID missing"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now if we don't specify the path variable id in the request, we get the default response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8080/api/employeeswithoptional 
----
ID missing 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>spring</category>
      <category>java</category>
      <category>programming</category>
      <category>http</category>
    </item>
    <item>
      <title>Spring - @RequestParam</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Sun, 17 Apr 2022 19:24:24 +0000</pubDate>
      <link>https://dev.to/yigi/spring-requestparam-4gg9</link>
      <guid>https://dev.to/yigi/spring-requestparam-4gg9</guid>
      <description>&lt;p&gt;Simple terms, we can extract query parameters, form parameters, and even files from a request using &lt;strong&gt;@RequestParam&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let's say that we have an endpoint /api/product that takes a query parameter called id:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/product"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@ResponseBody&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getProduct&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@RequestParam&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"ID: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and a simple GET request would invoke getProduct:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8080/api/product?id=123
----
ID: 123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both the variable name and the argument name are the same in the previous example. However, there are times when we wish they were different.&lt;/p&gt;

&lt;p&gt;In this case we use &lt;strong&gt;name&lt;/strong&gt; attribute&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@PostMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/product"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@ResponseBody&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;addProduct&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@RequestParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"id"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;pId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
 &lt;span class="nd"&gt;@RequestParam&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; 
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"ID: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;pId&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" Name: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can also do @RequestParam(value = “id”) or just @RequestParam(“id”).&lt;/p&gt;

&lt;p&gt;Moreover, we can configure our @RequestParam to be optional, though, with the &lt;strong&gt;required&lt;/strong&gt; attribute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/product"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@ResponseBody&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getProduct&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@RequestParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;required&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; 
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"ID: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, we can also have &lt;strong&gt;multiple parameters&lt;/strong&gt; without defining their names or count by just using a Map:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@PostMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/product"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@ResponseBody&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;updateProduct&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@RequestParam&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;allParams&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"Parameters are "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;allParams&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;entrySet&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>spring</category>
      <category>java</category>
      <category>http</category>
      <category>programming</category>
    </item>
    <item>
      <title>Spring - Circular Dependency</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Sun, 17 Apr 2022 14:24:43 +0000</pubDate>
      <link>https://dev.to/yigi/spring-circular-dependency-hln</link>
      <guid>https://dev.to/yigi/spring-circular-dependency-hln</guid>
      <description>&lt;p&gt;Circular dependencies are the scenarios when two or more beans try to inject each other via constructor. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bean A&lt;/strong&gt; → Bean B → Bean C → Bean D → Bean E → &lt;strong&gt;Bean A&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;or in a simpler way&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bean A&lt;/strong&gt; → Bean B → &lt;strong&gt;Bean A&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What if everything is 👌
&lt;/h2&gt;

&lt;p&gt;We instead have something like this:&lt;/p&gt;

&lt;p&gt;Bean A → Bean B → Bean C&lt;/p&gt;

&lt;p&gt;Spring will create bean C, then create bean B (and inject bean C into it), then create bean A (and inject bean B into it).&lt;/p&gt;

&lt;p&gt;With a circular dependency, however, Spring is unable to determine which of the beans should be produced first because they are interdependent. Spring will throw a BeanCurrentlyInCreationException while loading context in these circumstances.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When implementing constructor injection in Spring, this can happen. We shouldn't have this problem if we utilize other sorts of injections because dependencies will be injected only when they're needed, not when the context is loaded. ❗&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Is there way to fix it? 🤔
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Redesign&lt;/strong&gt; (LOL)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;a class="mentioned-user" href="https://dev.to/lazy"&gt;@lazy&lt;/a&gt;&lt;/strong&gt;
Telling Spring to lazy initialize one of the beans is a straightforward method to stop the cycle. As a result, rather than fully initializing the bean, it will generate a proxy that will be injected into the other bean. When the injected bean is first required, it will be fully created.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Component&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CircularDependencyA&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;CircularDependencyB&lt;/span&gt; &lt;span class="n"&gt;circB&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@Autowired&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;CircularDependencyA&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@Lazy&lt;/span&gt; &lt;span class="nc"&gt;CircularDependencyB&lt;/span&gt; &lt;span class="n"&gt;circB&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;circB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;circB&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use Setter/Field Injection&lt;/strong&gt;
Spring creates the beans, but the dependencies are not injected until they are needed in this way&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>spring</category>
      <category>java</category>
      <category>programming</category>
    </item>
    <item>
      <title>Spring - Dependency Injection</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Sun, 17 Apr 2022 14:04:34 +0000</pubDate>
      <link>https://dev.to/yigi/spring-dependecy-injection-57g9</link>
      <guid>https://dev.to/yigi/spring-dependecy-injection-57g9</guid>
      <description>&lt;p&gt;Dependency Injection is the most important feature of Spring framework. It is a design pattern where the dependencies of a class are injected from outside. It ensures loose-coupling between classes. &lt;/p&gt;

&lt;p&gt;In a Spring MVC application, the controller class has dependency of service layer classes and the service layer classes have dependencies of DAO layer classes. Suppose class A is dependent on class B. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5esw3g6yjoeaio5vzta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5esw3g6yjoeaio5vzta.png" alt="oop" width="746" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In normal coding, you will create an object of class B using ‘new’ keyword and call the required method of class B. However, what if you can tell someone to pass the object of class B in class A? Dependency injection does this. You can tell Spring, that class A needs class B object and Spring will create the instance of class B and provide it in class A. In the above example, we can see that we are passing the control of objects to Spring framework, this is called Inversion of Control (IOC) and Dependency injection is one of the principles that enforce IOC.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ClassA&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;ClassB&lt;/span&gt; &lt;span class="n"&gt;classB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ClassB&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;doCalculation&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;classB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;calculate&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Here comes the @Autowired keyword
&lt;/h2&gt;

&lt;p&gt;❗Before Spring 4.3, we had to add an @Autowired annotation to the constructor. With newer versions, this is optional if the class has only one constructor.&lt;/p&gt;

&lt;p&gt;Thanks to the @Autowired annotation, we can inject the values ​​in a bean into another bean and use them while preserving their values in Spring. There are multiple ways inject but among "Property Based", "Setter Based" and "Constructor Based" we will use "Constructor Based" to benefit from Dependency Injection. You may google them for further details and the see the differences.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is why we use constructor based injection "All required dependencies are available at initialization time"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Code please...
&lt;/h2&gt;

&lt;p&gt;We'll see that an instance of MyBeanToInject is injected by Spring as an argument to the MyService constructor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyService&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;MyBeanToInject&lt;/span&gt; &lt;span class="n"&gt;myBeanToInject&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nd"&gt;@Autowired&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;MyService&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;MyBeanToInject&lt;/span&gt; &lt;span class="n"&gt;myBeanToInject&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;myBeanToInject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myBeanToInject&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  To sum up 🏁
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A basic benefit of dependency injection is decreased coupling between classes and their dependencies.&lt;/li&gt;
&lt;li&gt;By removing a client's knowledge of how its dependencies are implemented, programs become more reusable, testable and maintainable.&lt;/li&gt;
&lt;li&gt;Dependency injection reduces boilerplate code, since all dependency creation is handled by a singular component&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overuse can cause management problems and other problems.&lt;/li&gt;
&lt;li&gt;Many compile time errors are passed to runtime&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>spring</category>
      <category>java</category>
      <category>oop</category>
      <category>interview</category>
    </item>
    <item>
      <title>Hibernate - HQL vs SQL</title>
      <dc:creator>Yiğit Erkal</dc:creator>
      <pubDate>Sun, 17 Apr 2022 11:57:02 +0000</pubDate>
      <link>https://dev.to/yigi/hibernate-hql-vs-sql-36lo</link>
      <guid>https://dev.to/yigi/hibernate-hql-vs-sql-36lo</guid>
      <description>&lt;p&gt;Hibernate Query Language (HQL) is same as SQL (Structured Query Language) but it doesn't depends on the table of the database. Instead of table name, we use class name in HQL. Therefore, it is database independent query language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Characteristics of HQL
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Similar to SQL:&lt;/strong&gt; HQL's syntax is very similar to standard SQL. If you are familiar with SQL then writing HQL would be pretty easy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fully object-oriented:&lt;/strong&gt; HQL doesn't use real names of table and columns. It uses class and property names instead. HQL can understand inheritance, polymorphism and association.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reduces the size of queries&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let's see the difference of the syntax 🍎🍏
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;SELECT&lt;/strong&gt; statement:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SQL&lt;br&gt;
ResultSet rs=st.executeQuery("select * from diet");&lt;br&gt;
HQL&lt;br&gt;
Query query= session.createQuery("from diet");&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;WHERE&lt;/strong&gt; statement&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SQL&lt;br&gt;
ResultSet rs=st.executeQuery("select * from diet where id=301");&lt;br&gt;
HQL&lt;br&gt;
Query query= session.createQuery("from diet where id=301 ");&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;UPDATE&lt;/strong&gt; statement&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SQL&lt;br&gt;
String query = "update User set name=? where id = ?";&lt;br&gt;
PreparedStatement preparedStmt = conn.prepareStatement(query);&lt;br&gt;
preparedStmt.setString (1, "diet2");&lt;br&gt;
preparedStmt.setlnt(2, 5);&lt;br&gt;
preparedStmt.executeUpdate();&lt;br&gt;
HQL&lt;br&gt;
Query q = session.createQuery("update User set name=:n where id=:i");&lt;br&gt;
q.setParameter("n", "diet2");&lt;br&gt;
q.setParameter("i",55);&lt;br&gt;
int status = q.executeUpdate();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;INSERT&lt;/strong&gt; statement&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SQL&lt;br&gt;
String sql = "INSERT INTO Stock VALUES (100, 'abc')";&lt;br&gt;
int result = stmt.executeUpdate(sql);&lt;br&gt;
HQL&lt;br&gt;
Query query = session.createQuery("insert into Stock(stock_code,&lt;br&gt;
stock_name) select stock_code, stock_name from backup_stock");&lt;br&gt;
int result = query.executeUpdate();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;❗ HQL only support insert from another table so you have to do this by creating and persisting new entity.&lt;/p&gt;

&lt;h2&gt;
  
  
  To sum up
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;HQL is similar to SQL and is also case insensitive.&lt;/li&gt;
&lt;li&gt;HQL and SQL both fire queries in a database. In the case of HQL, the queries are in the form of objects that are translated to SQL queries in the target database. &lt;/li&gt;
&lt;li&gt;SQL works with tables and columns to manipulate the data stored in it while HQL works with classes and their properties to finally be mapped to a table structure in a database.&lt;/li&gt;
&lt;li&gt;HQL supports concepts like polymorphism, inheritance, association, etc. It is a powerful and easy-to-learn language that makes SQL object oriented. &lt;/li&gt;
&lt;li&gt;SQL lets you modify the data through insert, update, and delete queries. You can add tables, procedures, or views to your database. The permissions on these added objects can be changed.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>sql</category>
      <category>hql</category>
      <category>hibernate</category>
      <category>database</category>
    </item>
  </channel>
</rss>
