29 Haziran 2015 Pazartesi

Hibernate sql sorgu parametrelerini görüntülemek

Merhaba arkadaşlar,
bu yazımda sizlere küçük fakat önemli bir ayrıntıdan bahsedeceğim.
Hibernate ile veri tabanı işlemleri yaparken eğer özel bir ayar yapmadıysaınız sorgu parametrelerini göremezsiniz. Bazı durumlarda bu parametreleri görüntüleme ihtiyacınız doğabilir. Örneğin veri tabanına insert edilen değerleri debug yöntemiyle görmek isteyebilirsiniz. bu durumda yapmanız gereken iki adım var.

1-)hibernate.cfg.xml dosyasında sql cümlesini görüntülemek için  aşağıdaki ayarı yapın
 <property name="show_sql">true</property>

2-) log4j.properties dosyasında hibernate log level ını INFO yada ALL seviyesine çekin.


log4j.logger.org.hibernate=INFO

veya


 log4j.logger.org.hibernate.type=ALL

bu işlemler sonunda  hibernate ile yaptığınız db operasyonlarının parametre bazlı inceleyebilirsiniz.

üstteki ayarlardan önce:
  insert into persons (age, createdate, lastname, name) values (?, ?, ?, ?)

ayar yaptıktan sonra :
 Hibernate: insert into persons (age, createdate, lastname, name) values (?, ?, ?, ?)
00:25:37,219 TRACE BasicBinder:82 - binding parameter [1] as [INTEGER] - 33
00:25:37,228 TRACE BasicBinder:82 - binding parameter [2] as [DATE] - Mon Jun 29 00:25:37 EEST 2015
00:25:37,242 TRACE BasicBinder:82 - binding parameter [3] as [VARCHAR] - veli
00:25:37,242 TRACE BasicBinder:82 - binding parameter [4] as [VARCHAR] - ali


Bir önceki yazım için hazırladığım projede üstteki ayarları yapmıştım. Aşağıdaki linkten bu projeye erişebilirsiniz.

kaynak dosyalar(github) : indirmek için tıklayın







Hibernate ile CRUD işlemleri

Merhaba,
bu yazımda sizlere hibernate ile veritabanı üzerinde  CRUD(kayıt oluşturma ,silme , güncelleme , listeleme) nasıl yapıldığını göstereceğim.

Aşağıda dikkat etmeniz gereken noktaların açıklamalarını yazacağım ve yazının sonunda da projenin kaynak kodlarını yine sizlerle paylaşıyor olacağım.

1 -) java application projesi oluşturun. Dizin yapısının alışılagelmiş biçimde olması için ben spring application projesi oluşturdum. Normalde bu yazının spring ile bir bağlantısı yoktur.

proje yapısı aşağıdaki gibi olacaktır:




2 -) Pom.xml 'e hibernate ve mysql bağımlılığını tanımlayın. Ayrıca hibernate in bağımlılıklarından biri de log4j dir.

 <!--MySQL database driver-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>



 <!--Hibernate -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>3.6.3.Final</version>
</dependency>

<dependency>
    <groupId>javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.12.1.GA</version>
</dependency>


 <!-- slf4j-log4j -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.1</version>
</dependency>



3 -) hibernate.cfg.xml ile hibernate erişim ayarlarını yapın. Hangi veri tabanına bağlanacağını , hangi entity ile işlem yapacağını , kullanıcı adını , şifresini ve veri tabanı türünü belirtin.

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost/test_spring</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">12345678</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <mapping class="com.company.entities.Person" ></mapping>
    </session-factory>
</hibernate-configuration> 






4 -)  HibernateUtil.java dosyasında bir static session oluşturalım. Hibernate bilgileri session üzerinde güncelleyerek veri tabanıyla eşleştirir.



 public class HibernateUtil {

    private static final SessionFactory SESSION_FACTORY  = new Configuration().configure().buildSessionFactory();


    public static SessionFactory getSession(){
        return SESSION_FACTORY;
    }

    public static void closeSession(){
        getSession().close();
    }

}


5 -)  Create(oluşturma) İşlemi

         Session session = HibernateUtil.getSession().openSession();

//        CREATE
        session.beginTransaction();
        Person person = new Person();

        person.setCreatedate(new Date());
        person.setAge(33);
        person.setName("ali");
        person.setLastname("veli");

        session.save(person);
        session.getTransaction().commit();


SQL:
 CREATE TABLE `persons` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `lastname` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `createdate` date NOT NULL,
  PRIMARY KEY (`id`)
)

Yazı kısa olsun diye daha fazla detaya girmiyorum. anlaşılmayan bir yer olursa çekinmeden sorabilirsiniz.

kaynak dosyalar(github) : indirmek için tıklayın

14 Haziran 2015 Pazar

Spring - Apache Tiles Entegrasyonu (Template Oluşturma)

Merhaba,
şuana kadarki yazılarımdaki örnekleri incelediğinizde işlemlerin tamamını  tek bir Jsp  sayfasında  yaptığımı göreceksiniz. Bu yazımda ise bir Jsp sayfası içerisine başka sayfalarında dahil edilmesi işleminden bahsedeceğim. Template oluşturma yapısından bahsediyorum(alttaki görüntü)

Aslında bütün web ve yazılım  projelerinde ortak kullanılan alanlar(Header,Footer,Menu) belirlenerek ilgili sayfada çağrılır. Bu şekilde her sayfada aynı kodların yazılmasının önüne geçilmiş olur. Esasında her sayfa için aynı kodları yazarak ta sonuca gidebilirsiniz ancak bakım,tutum ve yeni eklenecek özellikleri de(geliştirme) göz önünde bulundurursak bu yazımda anlatacağım yöntem ilginizi çekecektir diye düşünüyorum. Evet anahtar kelimeyi paylaşıyorum : Apache tiles (Döşeme)

Öncelikle bu yapıyı kullanmak için illede Apache Tiles kullanmak durumunda değilsiniz.
<jsp:include page="WEB-INF/common/header.jsp" /> 
 Şeklinde ki direktiflerle de ortak kullanılan kısımları tek sayfada toplayabilirsiniz.  Güzel ama daha  iyi bir yolu yok mu bu işin diye soracağınızı düşünerek sizlere Apache Tiles Kullanmanızı tavsiye ediyorum. Nasıl kullanacağız sorusuna cevaben  bu yazıda Spring ile entegre ederek bu işlemi gerçekleştireceğiz.

1-  Projemize intelliJ ile bir web projesi oluşturarak başlıyoruz.

2-  log4j yi  pom.xml'e  ekleyin.


<!-- Logging -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${org.slf4j-version}</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${org.slf4j-version}</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>${org.slf4j-version}</version>
    <scope>runtime</scope>
</dependency>


3- tiles'ı  pom.xml e ekleyin
<!-- Tiles -->
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-extras</artifactId>
    <version>${tiles-version}</version>
</dependency>



4- mvc-dispatcher-servlet.xml    üzerinden spring/apache-tiles bağlantısını yapın
<!-- Tiles configuration -->
<bean id="tilesConfigurer"
      class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/tiles/tiles-definitions.xml</value>
        </list>
    </property>
</bean>

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
</bean>



5- tiles-definitions.xml  dosyasında layout yapısını tasarlıyoruz.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
        "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
        "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>

    <definition name="singleLayout" template="/WEB-INF/template/singleLayout.jsp" />


    <definition name="mainLayout" template="/WEB-INF/template/mainLayout.jsp">
        <put-attribute name="header" value="/WEB-INF/template/fragments/header.jsp" />
        <put-attribute name="menu" value="/WEB-INF/template/fragments/menu.jsp" />
        <put-attribute name="footer" value="/WEB-INF/template/fragments/footer.jsp" />
    </definition>

</tiles-definitions>



burada singleLayout ve mainLayout diye iki tanım yaptım. Birinde sade bir sayfa yapısı olacak diğerinde üst menü ve footer bilgileri de gelecek.

Ben bu projede header ve footer alanlarına bootstrap kaynaklarını ekledim. Yavaş yavaş görsel tarafada ağırlık verelim istedim.

Sayfalarda yukarıda tanımladığımız layout-tiles çağrısı yapıldıktan sonra içerik sayfaya özgü olarak girilir.

örnek sayfa içeriği  aşağıdaki gibidir:
about.jsp:
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>

<tiles:insertDefinition name="mainLayout">
    <tiles:putAttribute name="body">


        <h1>About page !</h1>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
            magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
            commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat
            nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit
            anim id est laborum.</P>


    </tiles:putAttribute>
</tiles:insertDefinition>


AboutController.java
package com.company.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

/**
 * Created by root on 6/14/15.
 */
@Controller
public class AboutController {

    private static final Logger logger = LoggerFactory.getLogger(AboutController.class);

    @RequestMapping(value = "/about", method = RequestMethod.GET)
    public ModelAndView about(){
        ModelAndView mv = new ModelAndView("about");
        return mv;
    }

}


NOT: log4j kütüphanesi apache tiles ın gereksinimlerinden biridir. projenize log4j yi dahil etmeniz gerekmektedir.

NOT2: Tiles versiyonları önemlidir. Burada ben tiles3 kullandım. Diğer versiyonlarda ki  ufak tefek farklılıklar başlangıç aşamasında  kafanızı karıştırabilir. ilk aşamada benimle aynı spring versiyonunu ve apache-tiles versiyonunu kullanmanızı tavsiye ediyorum

kaynak dosyalar(github) : indirmek için tıklayın

Spring ile sayfa kaynaklarına mapping yöntemiyle erişim

Merhaba, bu yazımda sizlere spring projelerinize kaynak(css, js, png,.. vs) dosyaları nasıl dahil edeceğinizi anlatacağım.

1- öncelikli olarak bir spring web projesi oluşturun.

2- webapp dizini altında resources dizini ve onun altında da erişmek istediğiniz kaynakları  oluşturun
ÖRN: css/custom.css
resources/css/custom.css


3- beans xml dosyasının en üst kısmına(defination yapılan kısma) alttaki  satırları ekleyin. bu sayede spring mvc ile resources mapping (kaynak haritalama-tanımlama) işlemi gerçekleştireceğiz
xmlns:mvc="http://www.springframework.org/schema/mvc"

(xsi:schemaLocation kısmınada bu satırları eklemelisiniz)
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd


4- resoources dizinindeki tüm kaynakları static path olarak map edin.
<!--resources access(mapping)--><mvc:resources mapping="/static/**" location="/resources/"/>
<mvc:annotation-driven/>

üstteki tanımın,  resources/ dizinindeki tüm kaynaklara static sözcüğü(path) ile erişeceğim demektir.


5-  Aşağıdaki şekilde kaynak(css) dosyaları sayfanıza dahil edebilirsiniz.
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/css/custom.css">

6- Aşğağıdaki tanımla da png dosyalarını syfanıza çağırabilirsiniz.
<img src="${pageContext.request.contextPath}/static/img/spring.png" />

sonrasında çağırmak istediğiniz dosyaları yine benzer şekilde çağırabilirsiniz


NOT: Üstteki şekilde map ederek kaynakları sayfalarda çağırmanız durumunda;  oluşan html sayfalarında sağ tıklayıp kaynağı görüntüle dendiğinde kaynak dosyaların gerçek dizinleri değil map edilmiş dizinleri görünecektir. Bu da projenizi güvenlik konularında bir adım daha öne taşıyacaktır.


kaynak dosyalar(github) : indirmek için tıklayın

12 Nisan 2015 Pazar

Windows üzerinden PHP ile MS SQL Bağlantısı yapmak (Pdo)

Herkese merhaba,
daha önce sizlere Linux üzerinden PHP ile MsSQL bağlantısının nasıl yapılacağını anlatmıştım. Bu yazımda ise windows üzerinden PDO ile MsSQL bağlantısı yapmak ve sorgu çalıştırmayı anlatacağım.

Arkadaşlar ben windows ortamlarında geliştirme yapacağım zaman  genellikle  appserv(php+mysql+apache) paketini kullanıyorum. Sade ve basit olduğu için böyle bir tercih yaptım.  yazının devamı Appserv paketinin  dizin yapısına göre gidecek ancak Xampp,Wamp...vs  diğer paketleri kuranlarda yazının belli adımlarını  kendilerine göre uyarlayıp bu anlatımdan faydalanabilirler. 

Öncelikli olarak bilgisayarımıza  kurduğumuz PHP versiyonunu öğrenelim. Aşağıdaki komut PHP sayfasına yazıp sayfayı web browser üzerinden çağıralım.
<?php phpinfo();  ?> 

Yine bu komut sayesinde PHP_PDO nun varsayılan olarak desteklediği DB listesini görelim(bende sadece sqlite desteği aktif olarak ayarlı gelmiş). 


aşağıdaki linkten kullandığınız PHP nin versiyonuna uygun Dll leri indirin.
http://www.microsoft.com/en-us/download/details.aspx?id=20098 indirdiğiniz dosyayı çalıştırın ve içindeki DLL leri bir klasöre çıkarın.

Bu Dll klasöründen kendi PHP versiyonunuza uygun PDO dll lerini alın ve php extention dizinine kopyalayın. Benim makinemde extentions dizini c:\AppServ\Php5\Ext  olarak set edilmiştir. Siz bu kopyalama işlemini kendi ayarlarınıza göre yapmalısınız.


Daha sonra php.ini(varsayılan olarak c:\\windows altında olur) dosyasını açıp  php versiyonunuza uygun olarak kopyaladığınız Dll leri bu dosya üzerinden aktif edin.  aşağıdaki satırlar php 5.2 için  pdo sqlsrv yi aktif eder. 

php.ini
extension=php_pdo_sqlsrv_52_nts_vc6.dll
extension=php_pdo_sqlsrv_52_ts_vc6.dll

daha sonra servislere gidip(start+run+services.msc+enter)  ayarları baştan okuması için  apache2.2 servisini restart edin.

Yaptığınız aktivasyonları görmek için yine phpinfo() fonksiyonunu çağırın
<?php phpinfo();  ?> 

Alttaki ekran görüntüsünde olduğu gibi pdo_sqlsrv nin aktif edilmiş olduğunu göreceksiniz.  



Üsetteki aşamaları adım adım yaptığınızda Php ile mssql bağlantısı yapabilmektesiniz. Ancak öncesinde bilgisayarınıza sql server native client'ın kurulu olması gerekmektedir. C:\Windows\system32 nin altında sqlncli11.dll yoksa aşağıdaki bu dll'i bulup system32 dizinine ekleyin yada aşağıdaki adımları takip ederek wizard yardımıyla   sql server native client'ı bilgisayarınızda aktif edin.

Download : SQL Server Native Client

bu adresten indirdiğiniz exe dosyasını çalıştırıp next diyerek wizardı sonlandırın.



Pdo SQL server bağlantısı ve Select  cümlesi örneği
<?php
try {
    $hostname = "localhost";
    $port = 10060;
    $dbname = "my_database";
    $username = "username";
    $password = "password";

    $dbh = new PDO("sqlsrv:Server=192.168.1.7;Database=customerdb", "sa", "123456");

    $sql = "SELECT * FROM animals";
    foreach ($dbh->query($sql) as $row) {
        print $row['animal_type'] . ' - ' . $row['animal_name'] . '<br />';
    }
} catch (PDOException $e) {
    echo $e->getMessage();
}
?>
  

11 Nisan 2015 Cumartesi

linux(ubuntu-mint) sistemlere skype kurulumu

Herkese merhaba,  bu yazımda da sizlere bir Microsoft ürünü olan skype'ın Ubuntu üzerine nasıl kurulacağını göstereceğim.
Son skype versiyonu  Canonical Partners repository sinde tutulmaktadır.  Bunun için unity dash üzerinden software & updates e gidip Canoncial  partners seçeneğini aktif etmek gerekiyor.




Sonrasında terminale gidip aşağıdaki komutu çalıştırarak kurulumu başlatıyoruz.
sudo apt-get install skype





linux program kapatma(kill) işlemi

 Merhaba, yine bu bölümde de sizlere linux notlarımdan birini daha paylaşıyorum. Linux sistemlerde kill  komutunu kullanmayı anlatacağım.

Process adına göre kapatma

1. terminali açmak için  
Alt+F2

tuşlarına basın   ve arama ekranına yazarak terminal üzerinde yeni bir oturum(Session) oluşturun.
gnome-terminal

2.  Terminal içerisinde  sudo killall <kapatılacak program adı> yazarak process öldürme işlemi yapabilirsiniz.  Örn :  Firefox’u kapatmak için aşağıdaki komutu   yazmanız yeterli olacaktır.
sudo killall firefox




Mouse ile pencereye tıklayarak kapatma

1. terminali açmak için  
Alt+F2

tuşlarına basın   ve arama ekranına yazarak terminal üzerinde yeni bir oturum(Session) oluşturun.
gnome-terminal

2.  Açtığınız terminalde  aşağıdaki komutu(xkill) yazıp açık bir pencereye mouse ile tıklarsanız o pencerenin kapandığını ve programın kapatıldığını  göreceksiniz.
sudo xkill




linux(ubuntu-mint) sistemlere systemback kurulumu

Merhaba, bu yazımda sizlere linux sistemlere yedekleme aracının  kurulumunun  nasıl yapılacağını adım adım anlatacağım. Şuana kadar linux üzerinde çeşitli kurulumların nasıl yapılacağını anlattım ancak olası olumsuz durumlar için kurtarma noktası oluşturmanız gerekmektedir. Bunun için aşağıdaki adımları takip edebilirsiniz.

  
1- Öncelikle Terminali açın.
Ctrl + T


 2- systemback’i repository’ye ekleyin
sudo add-apt-repository ppa:nemh/systemback


 3- Yeni repository bilgisiyle birlikte güncellemeleri alın.
sudo apt-get update



4- Systemback’i bilgisayarınıza yükleyin
sudo apt-get install systemback


















linux(ubuntu-mint) sistemlere mysql workbench kurulumu

Merhaba, bu yazımda sizlere linux sistemlere mysql workbench kurulumunun nasıl yapılacağını adım adım anlatacağım.

1- Önce sistem üzerinden genel bir güncelleme alın.
sudo apt-get update


2- Temp dizinine gidin.
cd /tmp 


3- Wget ile mysql-workbech’i indirin.
wget http://goo.gl/EUsdLB -O mysql-workbench-amd64.deb 


4- Paket yönetim aracıyla kurulum paketini belirleyin.
sudo dpkg -i --force-depends mysql-workbench-amd64.deb 


5- Kurulumu başlatın
sudo apt-get -f install


6- Kurulum sonrasında mysql-workbench'i başlatın
mysql-workbench