نکات کاربردی

طبقه بندی موضوعی

آخرین مطالب

۱۳ مطلب با موضوع «جاوا» ثبت شده است

It is not a good approach to use double for precise values, such as currency.

BigDecimal for the Rescue

BigDecimal represents a signed decimal number of arbitrary precision with an associated scale. BigDecimal provides full control over the precision and rounding of the number value. Virtually, it's possible to calculate the value of pi to 2 billion decimal places using BigDecimal, with available physical memory being the only limit.

That’s the reason why we should always prefer BigDecimal or BigInteger for financial calculations.

 

Special Notes

Primitive type: int and long are also useful for monetary calculations if the decimal precision is not required.

We should really avoid using the BigDecimal (double value) constructor, and instead, we should really prefer using the BigDecimal(String), because BigDecimal (0.1) results in (0.1000000000000000055511151231257827021181583404541015625) being stored in the BigDecimal instance. In contrast, BigDecimal ("0.1") stores exactly 0.1.


What Every Computer Scientist Should Know About Floating-Point Arithmetic

behrad nasehi
۱۴ تیر ۰۰ ، ۱۴:۱۰ موافقین ۰ مخالفین ۰ ۰ نظر
behrad nasehi
۲۷ ارديبهشت ۰۰ ، ۱۳:۱۳ موافقین ۰ مخالفین ۰ ۰ نظر

دو کد زیر را درنظر بگیرید:

حالت الف : بدون استفاده ازuses

@Mapper(componentModel = "spring")
public interface SchoolMapper extends EntityMapper<SchoolDTO, SchoolEntity> {
@Mapping(source = "personId", target = "person.id") School toEntity(SchoolDTO schoolDTO);
}

حالت ب: با استفاده ازuses

@Mapper(componentModel = "spring", uses = { PersonMapper.class }) 
 public interface SchoolMapper extends EntityMapper<SchoolDTO,SchoolEntity>{ 

  @Mapping(source = "personId", target = "person") 
  School toEntity(SchoolDTO schoolDTO); 
 } 

حالت ب باعث میشود کد تمیزتر و خواناتری تولید شود

behrad nasehi
۰۹ بهمن ۹۷ ، ۱۲:۴۶ موافقین ۰ مخالفین ۰ ۰ نظر
  • ساده ترین راه برای نمایش کوئری ها در کنسول(standard out) این است که خط زیر را در فایل application.properties اضافه شود:

spring.jpa.show-sql=true

  • برای زیباسازی و یا چاپ زیبا SQL، می توان خط زیر را اضافه کرد:

spring.jpa.properties.hibernate.format_sql=true
  • برای نمایش مقادیر ، میتوان خط زیر اضافه کرد:
logging.level.org.hibernate.type=TRACE

  • می توان خطوط فوق را با فرمت YAML بشکل زیر در فایل application.properties افزود:

spring:
  jpa:
    properties:
      hibernate:
        show_sql: true
        format_sql: true
logging:
  level:
    org:
      hibernate:
        type: trace

behrad nasehi
۲۵ آذر ۹۷ ، ۱۷:۵۳ موافقین ۰ مخالفین ۰ ۰ نظر

File templates

  • خصوصیاتی از محتویات پیش فرضی هستند که هنگام ایجاد یک فایل جدید تولید می شود.
  • بسته به نوع فایل شما ایجاد می شود، قالب ها کد اولیه و قالب بندی را ارائه می دهد که انتظار می رود در تمام فایل های این نوع باشد.


File and Code Templates


behrad nasehi
۲۵ آذر ۹۷ ، ۱۴:۲۴ موافقین ۰ مخالفین ۰ ۰ نظر
  • Querydsl

یک چارچوب است که امکان ساخت پرس وجوی های مشابه با دستور SQL را مهیا می کند.

به جای نوشتن درخواست ها به صورت رشته های inline یا انتقال آنها به فایل های XML، آنها می توانند از طریق یک API ساده و روان مانند Querydsl ساخته شوند.


  • برای مثال مزایای استفاده از API روان در مقایسه با رشته های ساده
  1. تکمیل کد در IDE
  2. انواع و خواص دامنه را می توان بصورت ایمن ارجاع داد.
  3. اصلاح تغییرات در انواع دامنه بهتر انجام می شود.

  • Querydsl برای نگهداری مطمین پرس و جوهای HQL متولد شد.
  • ساختار افزایشی پرس و جوهای HQL نیازمند پیوند رشته است و نتیجه را در خواندن کد سخت می کند. منابع نامناسب برای انواع و خواص دامنه از طریق رشته های ساده، مسئله دیگری با ساختار HQL مبتنی بر String بود.
  • با تغییر دامنه مدل ایمنی نوع مزایای زیادی را در توسعه نرم افزار به ارمغان می آورد. تغییرات دامنه به طور مستقیم در نمایش داده ها منعکس شده است و تکمیل خودکار در ساخت پرس و جو باعث ایجاد سریعتر و ایمن تر ساخت پرس و جو می شود.

Querydsl Reference Guide

behrad nasehi
۱۷ آذر ۹۷ ، ۱۰:۴۴ موافقین ۰ مخالفین ۰ ۰ نظر
‎@OneToMany:

برای تعیین ارتباط یک به چند استفاده می شود:

عناصر اختیاری:

- cascade

- fetch

- mappedBy

- orphanRemoval

- targetEntity

اگر برای مشخص کردن نوع عنصر مجموعه از generics استفاده شود، نوع موجودیت هدف مرتبط مشخص نمی شود.



The best way to map a @OneToMany relationship with JPA and Hibernate

behrad nasehi
۲۹ آبان ۹۷ ، ۱۴:۱۲ موافقین ۰ مخالفین ۰ ۱ نظر

کلاس wrapper مربوط به اعداد


با سلام به همه دوستان وهمراهان Itpro. اعداد ویژگی های متعددی در زبان جاوا دارند که در این بخش به بحث در مورد اعداد در جاوا می پردازیم. وقتی که شما از اعداد در جاوا استفاده می کنید به این معنی است که شما از انواع داده های اولیه در جاوا مثل byte,int, long, double , … استفاده می نمایید. برای مثال به کد زیر توجه کنید:

int i = 5000;
float gpa = 13.65;
byte mask = 0xaf;
در زمان برنامه نویسی ممکن است وضعیتی پیش بیاید که ما به جای انواع داده اولیه از اشیاء استفاده کنیم. جاوا این امر را با استفاده از کلاس های wrapper میسر می سازد. در جاوا کلاس هایی وجود دارد که متناظر با انواع داده اولیه هستند و در این کلاس ها مجموعه متدهایی تعریف شده است که می تواند در برنامه نویسی بسیار مورد استفاده قرار بگیرد. همه ی کلاس های wrapper از کلاس Number ارث برده اند. شکل زیر انواع این کلاس ها را نشان می دهد.
Image

اشیائی که از کلاس wrapper ساخته می شود می تواند یک مقدار از نوع داده مورد نظر را درخود ذخیره کند. تبدیل نوع داده واقعی به یک شی را boxing می گویند و این عمل توسط کامپایلر انجام می شود. بنابراین زمانی که یک شی از کلاس wrapper می سازیم باید در constructor آن یک مقدار از نوع داده متناسب آن قرار دهیم. تبدیل شئی از کلاس wrapper به نوع داده اولیه را unboxing می گویند. کلاس Number در پکیج java.lang قرار دارد. در کد زیر مثالی از boxing و unboxing آورده شده است.
public class Test{

   public static void main(String args[]){
      Integer x = 5; // boxes int to an Integer object
      x =  x + 10;   // unboxes the Integer to a int
      System.out.println(x); 
   }
}
نتیجه اجرای کد بالا 15 خواهد بود. وقتی که یک شی از کلاس Integer ساخته می شود و نام آن را x می گذاریم. وقتی که یک مقدار عدد صحیح به این شئ انتساب می دهیم کامپایلر عمل boxing را انجام می دهد و آن را در داخل یک شئ می ریزد. اما در خط بعد که عمل جمع کردن عدد انجام می شود کامپایلر باید x را تبدیل به نوع اصلی int بکند تا بتواند با عدد10 جمع کند و در این حالت عمل unboxing انجام می شود.

متدهای کلاس Number


در ادامه به لیستی از متدهای موجود در کلاس های ارث برده از کلاس Number آورده شده است و هرکدام توضیح داده شده اند. کلاس های wrapper که گفته شد همه از کلاس Number ارث برده اند.
  • تابع [datatype]Value این تابع عمل تبدیل نوع داده شده را به نوع خواسته شده انجام می دهد. مقدار datatype در اول این تابع می تواندبا نام انواع داده های عددی جایگزین شود توابع این متد به شکل زیر هستند:
byte byteValue()
short shortValue()
int intValue()
long longValue()
float floatValue()
double doubleValue()
توابع گفته شده متدهای پیش فرض هستند و هیچ پارامتری ندارند و مقدار بازگشتی آنها همان مقدار [datatype] است. برای درک بهتر به کد زیر توجه کنید:
public class Test{ 

   public static void main(String args[]){
      Integer x = 5;
      // داده بایت برمی گرداند
      System.out.println( x.byteValue() );

      // نوع داده دابل برمیگرداند
      System.out.println(x.doubleValue());

      // نوع داده لانگ برمی گرداند
      System.out.println( x.longValue() );      
   }
}
نتیجه اجرای کد بالا به شکل زیر خواهد بود.
5
5.0
5
  • متد compareTo: این متد عدد شی صدا زننده را با عددی که به عنوان آرگومان به متد داده شده را مقایسه می کند. با استفاده از این تابع می توان اعداد از انواع متفاوت را با هم مقایسه کرد ولی باید دقت داشت که هر دو عدد از یک نوع باشند و نمی توان تابع compareTo مربوط به یک نوع byte را با ورودی long صدا زد. این عمل باعث خطا می شود. شکل نوشتاری این متد مانند خط زیر است:
public int compareTo( NumberSubClass referenceName )
همانگونه که گفته شد پارامتر ورودی این متد یک شی از کلاس wrapper متناظر می باشد. مقدار بازگشتی این متد یک عدد صحیح از نوع int است که می تواند یا 0 یا 1 و یا -1 باشد. که به شرح این اعدا می پردازیم. اگر دو عدد با یکدیگر برابر باشند در نتیجه متد عدد 0 را بازمی گرداند و اگر عدد از آرگومان خودش کوچکتر باشد عدد -1 و اگر عدد از آرگومان خود بزرگتر باشد عدد 1 به عنوان نتیجه بازگشت داده می شود. برای مثال به کد زیر دقت کنید:
public class Test{ 

   public static void main(String args[]){
      Integer x = 5;
      System.out.println(x.compareTo(3));
      System.out.println(x.compareTo(5));
      System.out.println(x.compareTo(8));            
     }
}
و نتایج کدهای بالا به شکل زیر است:
1
0
-1
  • متد equals: این متد مشخص می‌کند که دو عدد با هم برابر هستند یا خیر. کار این متد به این شکل است توسط شئی صدا زده می‌شود و یک عدد به آن داده می‌شود اگر عدد داده شده برابر با مقدار خود شئ باشد مقدار true و اگر برابر نباشد مقدار إfalse برگردانده می‌شود.شکل تعریف شده این تابع به شکل زیر است:
public boolean equals(Object o)
چیزی که این متد به عنوان پارامتر ورودی می‌گیرید می‌تواند هر نوع شیئی باشد.
مقدار بازگشتی این متد همانطور که گفته شد یک مقدار boolean است که اگر ورودی متد با خود شئ برابر باشند true برگردانده می شود. در ادامه مثالی برای این متد آورده شده است:
public class Test{ 

   public static void main(String args[]){
      Integer x = 5;
      Integer y = 10;
      Integer z =5;
      Short a = 5;

      System.out.println(x.equals(y));  
      System.out.println(x.equals(z)); 
      System.out.println(x.equals(a));
     }
}
خروجی کد بالا به شکل زیر خواهد بود
false
true
false
  • متد valeuOf: این متد مقدار عددی موجود در یک شئ وارد شده را بر‌می‌گرداند. آرگومان ورودی می‌تواند نوع داده اصلی یا String و مانند این‌ها باشد.
این یک متد استاتیک است. این متد می‌تواند ۲ آرگومان ورودی داشته باشد که آرگومان اولی یک رشته و آرگومان دوم مبنای عدد مورد نظر باشد. به این شکل که اگر بخواهیم عدد موجود در رشته را به یک عدد در مبنای ۱۶(هگزادسیمال) تبدیل شود آرگومان دوم را ۱۶ قرار دهیم. شکل‌های استفاده از این تابع در کد زیر آمده است:
static Integer valueOf(int i)
static Integer valueOf(String s)
static Integer valueOf(String s, int radix)
پارامتر ورودی در خط اول کد بالا برای یک عدد int است که وارد می‌شود و می‌توان این عدد را با استفاده از این متد به انواع داده عددی مختلف تبدیل کرد. در خط دوم یک رشته به متد داده می‌شود که دارای اعداد در داخل رشته است که با استفاده از این متد می‌توان آن را تبدیل به عدد کرد. در خط سوم نیز یک رشته دارای عدد به عنوان پارامتر ورودی اولی می‌باشد و پارامتر دوم نیز مبنای عدد است. خروجی این تابع یک عدد است که در مثال زیر استفاده از این متد آورده شده است.
public class Test{ 

   public static void main(String args[]){
      
      Integer x =Integer.valueOf(9);
      Double c = Double.valueOf(5);
      Float a = Float.valueOf("80");               

      Integer b = Integer.valueOf("444",16);

      System.out.println(x); 
      System.out.println(c);
      System.out.println(a);
      System.out.println(b);
   }
}
خروجی کد به شکل زیر خواهد بود:
9
5.0
80.0
1092
  • متد toString این متد مقدار هر شی را تبدیل به رشته می‌کند و بازمی گرداند. این متد می‌تواند یک ورودی عددی داشته باشد که آن را به رشته تبدیل کرده و بازمی گرداند. این متد برای همه اشیاء درجاوا وجود دارد. انواع مختلف این متد به شکل‌های زیر است:
String toString()
static String toString(int i)
مثال‌هایی از این متد در کد زیر نشان داده شده است:
public class Test{ 

   public static void main(String args[]){
      Integer x = 5;

      System.out.println(x.toString());  
      System.out.println(Integer.toString(12)); 
   }
}
خروجی کد به شکل زیر خواهد بود:
5
12
در این بخش به معرفی کلاس های wrapper مربوط به اعداد پرداختیم و متدهای آن را معرفی کردیم. در مطالب بعدی به ادامه معرفی متدهای این کلاس ها خواهیم پرداخت Itpro باشید


نویسنده: مهدی عادلی فر
منبع: انجمن تخصصی فناوری اطلاعات ایران
behrad nasehi
۲۰ خرداد ۹۷ ، ۱۶:۵۸ موافقین ۰ مخالفین ۰ ۰ نظر
معرفی فریمورک Spring جاوا
سلام دوستان. در سری آموزش های زبان جاوا گفتیم که زبان جاوا یک زبان قدرتمند است که می توان با آن برای فریمورک های مختلف و تکنولوژی های متفاوت برنامه نویسی کرد. یکی از بستر هایی که امروز برنامه نویسی در آن بیشتر از بقیه مورد استفاده قرار می گیرد بستر وب می باشد. دلایل محبوبیت برنامه نویسی در بستر وب می تواند پیشرفت ارتباطات اینترنتی و سهولت استفاده از آن در همه دستگاه ها از جمله کامپیوتر های لپتاپ و تبلت و موبایل و ... باشد. اخیرا هم شاهد ظهور اینترنت اشیا می باشیم. با این تفاسیر زبان جاوا هم باید در این بستر خیلی مهم حرفی برای گفتن داشته باشد.
Image


Spring framework


زبان جاوا برای برنامه نویسی وب فریمورک ها و تکنولوژی های بسیار متنوعی ارائه کرده است که معروفترین و محبوب ترین آنها فریمورک spring می باشد. البته این تکنولوژی فقط برای وب نیست و با آن می توان برنامه های مختلفی نوشت. Spring در برنامه نویسی تجاری جاوا معروف ترین فریمورک است و میلیون ها برنامه نویس با آن کار می کنند. دلایل استفاده این همه برنامه نویس از این فریمورک performance بسیار بالا و تست راحت و معماری آن است. فریمورک spring یک پلتفرم اوپن سورس جاوا است که توسط Rod Johnson در سال 2003 نوشته شده است. با استفاده از ویژگی های spring می توان هر برنامه جاوایی را نوشت. با این حال قابلیت هایی را برا نوشتن برنامه های تحت وب تحت پلت فرم Java EE دارد. هدف فریمورک spring این است که برنامه نویسی J2EE را آسان تر کند و با استفاده از مدل برنامه نویسی POJO، برنامه نویسی را گسترش دهد. قبل از این که به ادامه بحث در مورد spring بپردازیم دو کلمه J2EE و POJO را معرفی می کنیم.

J2EE چیست؟


Image


J2ee مخفف java to platform, enterprise edition می باشد. که در برنامه نویسی نرم افزار های سازمانی و تجاری بسیار مورد استفاده قرار می گیرد. این پلتفرم API ها و روتین هایی برای برنامه نویسی نرم افزار های سازمانی فراهم می آورد که از جمله آنها API هایی برای کار با شبکه و وب سرویس ها می باشد. j2ee علاوه بر شکل استاندارد جاوا ویژگی هایی مانند ORM ها و معماری چند لایه و وب سرویس ها را نیز دارا می باشد. برای برنامه نویسی j2ee باید از زبان جاوا استفاده شود. در حال حاضر نسخه 7 جاوا مورد استفاده قرار می گیرد. یکی از مهم ترین API های j2ee ، servlet می باشد که مربوط به درخواست های http و پردازش آن ها است که امکان نوشتن برنامه های وب بر پایه سرور جاوایی را فراهم می کند. و صفحاتی که با jsp طراحی می شوند از این امکان بهره می برند.
Image


POJO چیست؟


POJO مخفف Plain Old Java Object می باشد. این کلمه به اشیائی اطلاق می شود که کلاس آنها به هیچ کلاس دیگری وصل نیست و از طرف هیچ کلاسی محدود نشده اند. در جاوا به صورت واضح به کلاس هایی گفته می شود که از هیچ کلاس دیگری extend نشده باشند و هیچ اینترفیسی را implement نکرده باشند. همچنین قید های هیچ کلاسی را نداشته باشند.

ویژگی های spring


Spring بر پایه برنامه نویسی جنبه گرا (aspect oriented) و معکوس کردن کنترل (inversion of control) طراحی شده است. Spring به شکل ماژولار طراحی شده است و از ماژول های مختلف برای رفع نیاز برنامه نویسان استفاده می کند. تست کردن در این فریمورک ساده است. چون کدهایی که شما می نویسید ربطی به محیط ندارند. همچنین قسمت وب spring بر مبنای معماری mvc ساخته شده است.

Dependency Injection


یکی از تکنولوژی هایی که spring به خاطر آن مشهور شده است Dependency injection با استفاده از Inversion of Control می باشد به خاطر این که معنی فارسی این عبارات گویای همه چیز نیست از معادل انگلیسی آن استفاده می کنیم برای مثال تزریق وابستگی ها و معکوس کردن کنترل شاید منظور را نرساند. دوست خوبم مهندس احمدی در این لینک این مفاهیم را در زبان سی شارپ توضح داده اند. Inversion of control یک مفهوم کلی است و به شکل های گوناگونی می توان آن را توضیح داد و dependency injection یک مثال از inversion of control می باشد. زمانی که ما یک برنامه جاوا می نویسیم کلاس ها و اشیا باید تا جایی که جا داشته باشد از هم مستقل باشد. مستقل بودن کلاس ها از هم به استفاده مجدد از کد بسیار کمک می کند. و همچنین اگر شما کد را تغییر دهید چون بقیه کلاس ها با هم وابستگی کمی دارند نیاز به تغییر در کل نمی شود. ولی اگر همه کلاس ها به هم وابسته باشد وقتی که یک کلاس را تغییر می دهید به صورت دومینو باید بقیه کلاس ها را نیز تغییر دهید و این بسیار زمانبر و هزینه بر می باشد. dependency injection برای این که کلاس ها از یکدیگر مستقل باشند ولی از یکدیگر استفاده کنند بسیار کمک می کند.

Aspect oriented programming یا برنامه نویسی جنبه گرا چیست؟


Image


همانطور که گفتیم یکی از خصوصیات Spring برنامه نویسی جنبه گرا می باشد. حال این برنامه نویسی جنبه گرا چیست؟ گاهی اوقات باید قابلیت هایی را به برنامه اضافه کنیم که در چند بخش از برنامه عمل می کنند. برای مثال ما امنیت را در برنامه باید در قسمت های مختلفی به کار ببریم. به این نوع قابلیت ها cross-cutting concern گفته می شود به معنی قید هایی که قسمت های مختلف باید آن ها را رعایت کنند. معمولا cross-cutting concern ها جدا از منطق اصلی برنامه می باشند. برای مثال لاگ گرفتن عملیات ها و یا کش کردن یا امنیت جزء اصلی منطق برنامه نیستند ولی کارهایی هستند که باید آنها را انجام داد. در برنامه نویسی شی گرا جزء اصلی برنامه شی و کلاس می باشد ولی در برنامه نویسی جنبه گرا جزء اصلی جنبه است. همانطور که dependency injection به شما کمک می کند که کلاس ها و اشیا با هم وابستگی نداشته باشند برنامه نویسی جنبه گرا هم کمک می کند که منطق اصلی برنامه از cross-cutting concern ها جدا باشد.
شاید با خواندن این مطلب علامت سوال هایی در ذهن شما ایجاد شده باشد که در مطالب بعدی در مورد spring آنها را برطرف خواهیم کرد Itpro باشید


نویسنده: مهدی عادلی فر
منبع: Itpro

behrad nasehi
۲۰ خرداد ۹۷ ، ۱۶:۵۰ موافقین ۰ مخالفین ۰ ۱ نظر
1-Setting Up a Local Git Repository

create a local Git repository

  1. Open the project you want to store in a repository.
  2. On the main menu, choose VCS | Import into Version Control | Create Git Repository.
  3. In the dialog that opens, specify the directory where you want to create a new Git repository.
  4. Put the required files under Git version control. The files appear in the Local Changes tab of the Version Control tool window, under the Default changelist


2-Adding Files to a Local Git Repository

View | Tool Windows | Version Control - Local Changes
Alt+9

Basics

After a Git repository for a project is initialized, you need to add the project data to it.


Adding all currently unversioned files to Git control

  1. Switch to the Version Control tool window and switch to the Local Changes tab. tool window.
  2. Expand the Unversioned Files node and choose Add to VCS from the context menu or pressCtrl+Alt+A.

Adding specific files to a local Git repository

Do one of the following:

  • Switch to the Version Control tool window and switch to the Local Changes tab. Expand the Unversioned Files node, and select the files to be added. From the context menu, chooseAdd to VCS, or press Ctrl+Alt+A.
  • Switch to the Project tool window and select the files to be added. From the context menu, choose Git | Add or pressCtrl+Alt+A.


***

Adding Files to Version Control

If a new file is created with IntelliJ IDEA in a directory that is already under version control, it automatically adds to the active changelist with the status Added. All you have to do, is to commit this change.

IntelliJ IDEA's behavior on adding files is configurable in the General Settings tab of the Version Control dialog.

If a new file is created outside of IntelliJ IDEA, or silent adding is disabled, you have to explicitly add it to the version control.

Another approach is VCS-specific. You can import an entire directory to your repository, provided that you have the corresponding access rights. This action is helpful for putting a whole project under version control.

To explicitly add a file to version control

  1. Select file in the Project tool window.
  2. On the main Version Control menu or on the context menu of the selected file, choose <VCS> | Add.

    Alternatively, use the Version Control tool window. Select the desired files in the Unversioned files changelist in the Local Changes tab, and choose Add to VCS on the context menu, or just drag it to the target changelist.

    img
  3. Select the added file in the changelist and check in (commit) changes.

behrad nasehi
۰۵ آبان ۹۵ ، ۲۰:۰۵ موافقین ۰ مخالفین ۰ ۰ نظر