15 Haziran 2016 Çarşamba

Mybatis -Custom Query

Mybatis, veri tabanı sorgulama işlemini java class'ları yardımı ile çok kolay kılsa da bütün sorgulama işlemlerini bu şekilde yapamayacağımızı bilmemiz gerekir. Örneğin iki farklı tablo arasında join sorgu yapmak istediğinizde ya da en basit bir işlemi yapmak istediğinizde bunu java kodu ile yapmak mümkün olmayacaktır. Bu durumlarda custom query olarak adlandırılan sorgu yönteminden faydalanacağız. Şöyle ki sorgularımız <name>sqlmap.xml  olan xml dosyaları içerisine yazılacak. Sorgu sonucu dönecek verinin modelini ya da sorguya gidecek parametreleri yine uygun syntax kuralları ile sqlmap dosyasına eklemeliyiz. Örnek ile anlatırsam daha iyi anlaşılacaktır. Örnekte CUSTOMER isimli müşteri bilgilerini içeren bir tablomuz olsun ve yine bu müşterilerin adres bilgisi için ADDRESS isimli adres verileri içeren bir tablomuz olsun.

CUSTOMER



ADDRESS



Bir müşterinin adres bilgisi yukarıdan da anlaşılacağı gibi ADDRESS_OID verisi ile ADDRESS tablosu ile ilişkili bir şekilde tutuluyor. Yazacağımız sorgu da hem müşterinin isim, soyisim verisini hem de adresinin il, ilçe bilgisini dönmesini amaçlayalım. Bu durumda bizim ihtiyacımız olan sorgu join şeklinde olmalı. Sorguyu aşağıdaki şekilde yazabiliriz.



Yukarıdaki sorgu bizim işimizi görecektir ve tek sorunumuz bunu mybatis'te nasıl gerçekleştireceğimizdir. Öncelikle ben CUSTOMER tablosu önceki yazılarımda anlattığım tablo ve bu tablo üzerinde ufak değişiklikler yaptığım için tekrar generate ettim. Yeni oluşturduğum ADDRESS tablosu için generate işlemini gerçekleştirdim. Önceki yazılarımda nasıl generate yapılacağından bahsetmiştim. Yine de örnek görüntüyü paylaşıyorum.



Yukarıdaki gibi generatorConfig.xml dosyasına ADDRESS tablosunu ekledim(sondan bir önceki satır). CUSTOMER tablosunu önceden generate ettiğim için comment içine alarak tekrar generate edilmesini engelledim. Tekrar generate edilse de bir sorun teşkil etmeyecekti fakat tekrar generate'e gerek yok. Generate işlemini runGenerator.xml dosyasını Build > Ant Build yaparak generate ediyoruz. Şimdi sorguya odaklanarak sorgu sonucunda hangi kolonlar dönecek ve bu kolonları nasıl karşılayacağımızı belirleyelim. Dönen verileri karşılayacak yeni bir model class'ı oluşturmak işimizi görecektir.



Kolonları karşılayacak propertyleri ve bunların Setter ve Getter'larını tanımlıyoruz.



Yukarıda gördüğümüz class bizim sorgu sonucu dönen verilerin objesi olacaktır. Bu şekilde veritabanı verilerini rahatlıkla yönetebileceğiz. İşin detay ve önemli noktası olan yer sorguyu ekleme adımına geldik. Dilersek bu sorgu Customer_sqlMap.xml ya da Address_sqlMap.xml içine konulabilir. Hangisi mantıklı geliyorsa o sqlMap seçilir. Ben Customer_sqlMap.xml dosyası içine sorgumu yerleştireceğim.



Yukarıda gördüğüz gibi iki yapı bulunmakta. Biri sorgumuzu içeren <select/> kısmı diğeri sorgu sonucu verileri class'ımıza (objeye dolduracak) aktaracak <resultMap/> kısmı. İkisinin de id bilgisini unique(tekil) olacak şekilde istediğimiz gibi verebiliriz. Mantıklı bir şeyler yazmakta fayda var. Daha sonra resultMap için hangi class'ımıza (hangi objeye) veriler aktırılacak bunu type property'si ile belirliyoruz. Burada class'ımızın yolunu veriyoruz. Daha sonra içerisinde hangi kolon hangi property'e map edecek(eşleşecek) bunun bilgilerini ve veri tiplerini uygun olacak şekilde belirliyoruz.
<select> için resultMap kısmına eşleşeceği resultMap'in id bilgisini veriyoruz. Biz üstteki resultMap ile eşleşmesini istediğimiz için onun id bilgisini verdik. Sorguya bir parametre bilgisi geleceği durumda bu alan parameterClass propertysi ekleyerek gelecek parametrenin tipini de vermemiz gerekirdi. Ben daha basit olması açısından bir parametre falan göndererek bir sorgu oluşturmak istemedim. İlerleyen zamanda bir örneğini gösteririm. Yukarıdaki gibi sqlMap'teki olacak işlemlerimizi tamamlıyoruz. Şimdi bu sorguyu çağıracak olan metodumuzu oluşturmalıyız. Bunun için ilgili sqlMap'in ilişkili olduğu Mapper.java class'ına metod tanımını yapıyoruz.


Şimdi istediğimiz şekilde bu metodu kullanarak veritabanından verileri alabiliriz. Ben önceden oluşturmuş olduğum manager içerisinde bir metot içerisinde bu metotu çağırdım.


Şimdi çalıştığını görelim.


Gördüüğünüz üzere veritabanı içerisindeki verilere bu şekilde erişerek bilgileri console'a döktüm. Bundan sonra bu verileri istediğim gibi işleyebilirim, benzer sorgular oluşturarak ekleyebilir, güncelleyebilir ya da silebilirim. Mybatis'te custom query kullanımı bu kadar, umarım faydalı olur.

11 Şubat 2016 Perşembe

Mybatis sorgu teknikleri (Mybatis Quering)

Mybatis ile ilgili genel ayarlarımızı yaptıysak veritabanına bir sorgu nasıl gönderilir ona bakalım. Bu paylaşımım bir önceki paylaşımımın devamı niteliğindedir. Öncelikle bir yazılımcı olarak tüm kodlamalarımız iyi bir düzene sahip olmalıdır. Yani bean classlarınız varsa hepsi farklı bir package altında, manager classlarınız varsa onlar ayrı bir package altında, ya da txt, png vb. uzantılı diğer dış kaynak dosylarınız farklı bir package ya da folder'ın altında tutulması hem hoş bir görüntü hem de yazılımcıya büyük kolaylık sağlar. Bu durumda konumuz içerisinde veritabanına yapacağımız sorguların her bir tablo için farklı bir class içinde olması güzel olacaktır. Öyle ki benim Customer tabloma ait sorgu class'ımın ismi CustomerManager.java olsun ve bu tarz class'lar manager isimli bir package'ın altında yer alsın istiyorum. Öncelikle gördüğünüz üzere manager isimli bir package oluşturdum.




Bu package'ın altına manager class'ımızı oluşturdum.


Şimdi biraz yapıdan bahsedersek bu class içerisinde sorgu (insert-updete-delete-select) metotlarımızı yazacağız. Hangi tablodan sorgu yapacak isek öncelikle o tabloya ait olan Mapper nesnesine erişmemiz lazım. Bu nesne yardımı ile sorgularımızı gönderebileceğiz.


Gördüğünüz üzere CustomerMapper tipinden değer döndüren private static bir getMapper isimli metod oluşturmuşum. Bu metot içerisinde yapılandırma ayarlarında oluşturmuş olduğumuz SessionFactory class'ının getSession metodu ile ilgili class'ımızın Mapper'ı dönderilecektir. Böylelikle sorgularımız bu nesne ile gerçekleştireceğiz. Hemen alttaki metotta CustomerExample ve buna bağlı Criteria nesnesi gözünüze çarpmış olacak. Şöyle ki CustomerExample nesnesi bu şekilde gerçekleştirilen her sorguda oluşturulmalıdır. Çünkü bu example nesnesi üzerinden sorgulamalar gerçekleştirilir. Criteria nesnesi ise görüldüğü üzere ilgili example'a ait kriterleri içerecektir. Resimde de gördüğünüz üzere hangi example'a ait ise o example'ın createCriteria metodu ile nesne oluşturulur. Bu Criteria nesnesi içerisine yine ekranda bir kısmını gördüğünüz kriterleri set edebiliriz. Örnekler ile gösterir isem;


getCustomerListByFirstName metodu'nun içerisinde parametre olarak verilecek firstName'e ait kayıtların filtrelenmesini istiyorum. Yukarıda görüldüğü şekilde andCustomerFirstNameEqualTo metodu içerisine bu parametre veriliyor. Bununla birlikte extra olarak aynı şekilde surName ile kriter ekleyebilirdik. Bunun için hemen bir alt satıra "criteria.andCustomerSurNameEqualTo(surName);" şeklinde bir kriter belirlemeliydik.
getCustomerCount metodu içerisinde de yine example nesnesi kullanılarak database'de bulunan kayıtların sayısını countByExample metotu ile ulaşabiliriz.
getCustomerByAge metodu biraz daha kompleks yapıda olup doğum yılı verilen iki tarih arasında olan ve bu kayıtlar arasında doğum yılı büyükten küçüğe olacak şekilde olan Customer kayıt listesini elde eder.
insert metodu ile oluşturulan bir Customer nesnesi üzerinden database'e kayıt atılabilir.

Bu kısa açıklamaların ardından öncelikle database'in durumunu gösterelim.


Şimdi bu metotları nasıl kullanabileceğimizi örnekleyeyim.


Görüldüğü üzere CustomerManager sınıf ismi ile yazdığımız metotların public ve static olması nedeniyle erişebildik ve kod okunaklığı açısından güzel oldu. Bununla birlikte ilgili tabloya ait metotlar bu şekilde o tabloya ait manager class'ı oluşturup içine yazılırsa hoş bir düzen sağlayacaktır. Resimdeki class'ı run ettiğimde Console ekranına düşen sonuçların istediğim şeyler olduğunu görüyorum.

25 Ocak 2016 Pazartesi

Mybatis yapılandırma ayarları (Mybatis Configuration Settings)

Mybatis, bir ORM(Object Relational Mapping) aracıdır. Database'deki verilerimizi class yapıları ile modeller ve developer'ı büyük bir yükten kurtarır.Yani database'deki bir kaydı nesneleştirerek kullanmamızı sağlar. Select, insert, update, delete gibi işlemleri esnek bir şekilde yapmamızı sağlar. Hibernate (farklı bir ORM aracı) ile kıyaslandığında bir takım artıları ve eksikleri vardır. Fakat konumuz bu olmadığı için bu konuyu sizin araştırmanıza bırakıyorum. Fakat emin olabilirsiniz ki Mybatis bir çok kurumsal firmada yoğun bir şekilde kullanılmaktadır. Bu konudaki Türkçe dökümanın azlığı benim ilgimi çekti ve böyle bir döküman oluşturmaya karar verdim. Eclipse üzerinde Mybatis yapılandırması için öncelikle sqljdbc4.jar'ına veya bunun farklı sürümlerine ihtiyacınız vardır. Ben resimde görüldüğü üzre bunu indirerek masa üstüme kaydettim.



Daha sonra Eclipse üzerinde MybatisTest isimli bir java projesi oluşturdum ve bir mybatis folder'ı ekledim.

 

Daha sonra ihtiyacımız olan mybatis jar dosyasını indirdim.



Proje hiyerarşisini aşağıda olduğu gibi düzenleyin. Config folder'ı içerisinde configuration ayar dosyalarımızı barındıracağız. Ben önce generatorConfig.xml dosyasını oluşturmuşum. Kısaca bu xml dosyası bize database'i kullanarak model oluşturmada yardımcı olacak dosyadır.
sqljdbc4.jar dosyasını ve mybatis-3.3.0.jar dosyalarını proje üzerine sağ tıklayarak Build Path > Configure Build Path > Libraries tab ve Add External Jars seçeneği ile projeye dahil ettim. Aşağıdaki gib Referenced Library bölümünde jar'ları göreceksiniz. Tıpkı bu yaptığımız işlem gibi indirmiş olduğunuz mybatis zip dosyası içinde bulunan log jarlarını da eklemeniz de fayda var. Hata esnasında hatayı neden kaynaklı ve nasıl çözebileceğiniz hakkında yardımcı olurlar.



Bir başka önemli nokta ise bağlanacağınız database Microsoft Sql Server ise sqljdbc_auth.dll dosyasına ihtiyacınızın olmasıdır. Database'e authentication(kimlik kanıtlama) esnasında bu dosyaya ihtiyaç vardır. Bu .dll dosyası indirmiş olduğum sqljdbc zip dosyasının içinde mevcut. sqljdbc_auth.dll dosyasını kopyalayıp C:\Windows\System32 klasörünün içine atmalısınız.
Ben database'e Windows Authentication modunda bağlanıyorum. Yani bana parola falan sormuyor. Bu durumda connection stringimiz biraz farklılık gösterir. Aşağıda <connctionUrl> tag'ı içerisinde görebilirsiniz.



generatorConfig.xml dosyamın içeriği yukarıda görülmektedir. Bu dosyada bazı yapılandırma ayarlarıyla beraber <table> tag'ı içerisinde database'de CUSTOMER isminde bir tablonun olduğu ve bu tabloyu Customer class ile modellemeyi istediğimi belirtmişim. İkinci yapılandırma dosyamız yine config içine oluşturulan MapperConfig.xml dosyasıdır. Aşağıda onun içeriğini görüntülemektesiniz.



mapper tag'ı şu an boş fakat generate etme işleminden sonra oluşacak mapper'ın path'i ile resource alanını doldurmalısınız. Bir diğer yapılandırma dosyası bir java classı olan SessionFactory.java'dır.



Bu class içerisinde ilgili mapperXML gibi yapılandırma ayarları yükleniyor. Eğer üstte bahsettğim gibi generate işleminden sonra MapperConfig.xml dosyasına mapper'ı vermezseniz mapper'ı bulamıyorum diye bir hata alırsınız. Bu kritik bir nokta.

Son yapılandırma ayarımız bir ant dosyası içinde olacaktır. Build etme işlemini ant file üzerinden yapacağız. Proje üzerine sağ tıklayın New>Other ve Ant Files seçneğini seçin.






Size .xml ve .properties uzantılı iki tane dosya oluşacak. İsimlerini benim yaptığım gibi güncelleyebilirsiniz.



Bütün configuration dosyalarımızı yukarıdaki hiyerarşide görüntülüyorsunuz.

Bu generate etme(model oluşturma, ya da bizim CUSTOMER tablosunu Customer sınıfı haline getirme diye basit bir şekilde açıklayayım) işlemini mybatis-generator jar'ı ile yapacağız. Onu şuradan indirin.



Şimdi runGenerator.xml dosyasını aşağıdaki şekilde kendinize uygun olarak güncelleyiniz.



Bütün yapılandırma ayarlarını halletmiş bulunuyoruz. Son olarak generate etme işlemini gerçekleştireceğiz. Son oluşturduğumuz runGenerator.xml dosyasına sağ tıklayın ve Run As> Ant Build seçenekleri ile build edin.



Aşağıda resimde görüldüğü üzere belirttiğimiz alanlarda istediğimiz class'lar, xml'ler oluştu. Oluşan CustomerMapper.xml dosyamızı MapperConfig.xml'e ekledik. Her şey tamam.



Şimdi bir test edelim ve çalıştığını görelim. Test isminde bir class oluşturup içini aşağıdaki şekilde düzenledim. Test.java sınıfına Run As > Java Application şeklinde çalıştırdım.




Customer tablosunda bulunan iki kayıda gördüğünüz üzre kolaylıkla eriştim. Yukarıda basitçe bir select sorgusu gördünüz. Bu query konusunu ilerleyen durumlarda daha açıklayıcı ve komplex örneklerle anlatmayı planlıyorum. Mybatis yapılandırması bu kadar. Kolay gelsin.

Uygulamanın kodlarını bu adreste bulabilirsiniz :
https://github.com/emresevinc/MyRepo-Mybatis




27 Kasım 2015 Cuma

Java Excel dosyası okuma

 import java.io.FileInputStream;  
 import java.io.IOException;  
 import java.util.ArrayList;  
 import java.util.Iterator;  
 import java.util.List;  
 import org.apache.poi.hssf.usermodel.HSSFCell;  
 import org.apache.poi.hssf.usermodel.HSSFRow;  
 import org.apache.poi.hssf.usermodel.HSSFSheet;  
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
 import org.apache.poi.ss.usermodel.Cell;  
 import org.apache.poi.ss.usermodel.Row;  
 public class ExcelTransaction {  
      static public List<List<HSSFCell>> readExcelFile(String path) throws IOException{  
           List<List<HSSFCell>> sheetData = new ArrayList<List<HSSFCell>>();  
           FileInputStream fis = new FileInputStream(path);  
           try {  
                HSSFWorkbook wb = new HSSFWorkbook(fis);  
                HSSFSheet sheet = wb.getSheetAt(0);  
                //Excell dosyasında satırlar için iterator oluşturuluyor.  
                Iterator<Row> rows = sheet.rowIterator();  
                //Satırlar geziliyor.  
                while (rows.hasNext()) {  
                     HSSFRow row = (HSSFRow)rows.next();  
                     //Satırda bulunan hücreler icin iterator olusturuluyor.  
                     Iterator<Cell> cells = row.cellIterator();  
                     List<HSSFCell> cellList = new ArrayList<HSSFCell>();  
                     //Hücreler geziliyor.  
                     while (cells.hasNext()) {  
                          HSSFCell cell = (HSSFCell) cells.next();  
                          cellList.add(cell);  
                     }  
                     sheetData.add(cellList);  
                }  
                return sheetData;  
           } catch (IOException e) {  
                e.printStackTrace();  
           }finally  
           {  
                if(fis != null)  
                     fis.close();  
           }  
           return null;  
      }  
      public static void main(String[] args) throws IOException {  
           List<List<HSSFCell>> list = readExcelFile("D:\\Users\\emre.sevinc\\Desktop\\ornek.xls");  
           for (List<HSSFCell> object : list) {  
                System.out.println(object);  
           }  
      }  
 }  

Projelerinizde bir excel dosyasında bulunan verileri okuma veya işleme ihtiyacı duyabilirsiniz. Java dilinde bu soruna çözüm olarak Apache firmasının geliştirmiş olduğu apache.poi kütüphanesi size yardımcı olabilir. Yukarıdaki kod örneğinde bir excel dosyasının nasıl okunabileceğini örnekledim. Kodu inceleyebilirsiniz.

4 Kasım 2015 Çarşamba

Cashback - POS Para nedir ?

Cashback özelliği debit kartlar üzerinde tanımlı olan bir özelliktir. POS Para işlemi gerçekleştirmek için kartınızın bu özelliğe sahip olması gerekmektedir. Şöyle ki, sizin bir debit kartınız varsa anlaşmalı mağazalardan kartınız ile POS para işlemini gerçekleştirebilirsiniz. Bir örnek ile açıklarsam, sizin debit kartınızdaki tanımlı cashback özelliği minimum 10 lira alışverişinizde 100 liraya kadar 10’un katları şeklinde bir para miktarını kasadan talep edebileceğiniz şekilde belirlenmiş sayalım. Bu durumda ben 10 lira veya üstü bir alışveriş yaptığımda kasaya giderek ayrıca POS Para işleminde bulunmak istiyorum diyerek 80 lira nakit olarak kasadan talep edebilirim. Yalnız bu durumda debit kartınızın içinde minimum 90 lira olması gerekmektedir ki işlemler gerçekleşsin. Şimdi bu durumun ne gibi bir faydası var dersek, elinize nakit olarak para geçiyor ve bu sayede pos cihazı olmayan başka bir yerden alış veriş gerçekleştirebilirsiniz. Başka bir yararı ise sizin bankanıza ait olan en yakın ATM çok uzak olabilir ya da yerini bilmiyor olabilirsiniz. Bu durumda minimum tutar ne ise ya da örnekte belirttiğim gibi 10 liralık bir alış veriş yaparak elinize 80 lira veya ihtiyacınız miktar kadar (tabi maximum çekebilecek tutarı geçmemek kaydıyla) nakit paranın geçmesini sağlayabilirsiniz. Visa’nın anlaşmalı olduğu bankalarla gerçekleştirebileceğiniz POS Para işlemi bilgisini buradan görüntüleyebilirsiniz.

Debit kart nedir?

      Debit kart (banka kartı olarakta bilinir), finansal bir kurumda müşterinin kendi hesabına ya da hesaplarına elektronik erişimi sağlayan bir tür plastik ödeme kartıdır. Bu kartlar içindeki para miktarı kadar ödeme yapabilir ve ödeme esnasında ödeyicinin belirlenmiş hesabı ile ilgili bankaya bir mesaj gönderilir. Bu mesaj kabul gördüğünde satın alma işlemi nakit yerine gerçekleştirilir. Bazı durumlarda, birincil hesap numarası hangisi ise bu hesap ile internet üzerinde yani fiziksel kart olmadan kullanılarak işlem gerçekleştirilebilir.

     Çoğu ülkede debit kartlar, nakit ödeme işlemlerinde çek ile ödeme ve örneklerini bütünüyle değiştirerek yaygın olarak kullanılmaya başlandı. Debit kartların geliştirimi, kredi kartlarının aksine ülkeye özgü ve farklı sistemler ile gerçekleştirildiğinden genel olarak uyumsuzlardı. 2000’lerin ortalarından itibaren uyumsuzluk giderilerek bazı ülkelerin telefon ve internet üzerinden alışverişlerinde debit kartların kullanımına izin verildi. Kredi kartlarının aksine ödemenin sonraki bir tarihte değil de o anda hızlı bir şekilde gerçekleştirilmesini sağlamaktadır. Debit kartlar farklı olarak cashback özelliğine sahip olarak aynı zamanda ATM işlevi de görebilirler. Cashback özelliğinden kısaca bahsedersek kart sahibi belli bir alış veriş tutarını geçmek suretiyle maximum belli bir para miktarına kadar ödeme yaptığı yerden nakit para talep edebilir.

29 Mayıs 2015 Cuma

Blogger yönlendirme CNAME sorunu (Find Second CNAME record of Website or Blog Second Time)

Blogger hesabınızdan oluşturmuş olduğunuz bloğun alan adı .blogspot.com gibi ek karakter dizisi içerdiğinden uzun bir alan adı olmakta ve pek kullanıcı dostu olmamaktadır. Bu sebepten dolayı bloğunuza çok daha okuması ve yazması kolay bir alan adı almak isteyebilirsiniz. Ben yakın zamanda öyle yaptım ve eesevinc.blogspot.com.tr olan blog alan adımı www.emresevinc.net alan adını tahsis ederek bu adrese yönlenmesini sağladım. Belki de bu çok kolay bir işlem bu videoda da göründüğü gibi halledilebilmekte.(http://www.isimtescil.tv/2012/05/domaini-bloggera-yonlendirme/). Bu işlemleri gerçekleştirirken yaşadığım sıkıntıyı kısaca özetleyeyim. Video'yu da izlediyseniz ikinci bir CNAME ekleme işleminde blogger'dan tahsis etmiş olduğunuz alan adına ait(benim örneğimdeki www.emresevinc.net) aldığınız gerekli karakter dizilerini isim tescilde de uyguladıktan sonra isim tescilde yanlışlıkla veya farkında olarak DNS yapılandırmasını varsayılana döndürürsek çalışması için bu yapılandırmayı tekrar yapmamız gerekecektir. Durum şu ki her şeyi baştan uygulamaya kalktığımızda bloggerdan alan adımıza ait CNAME kaydı için gerekli karakter dizisi(Hata 12'nin döndüğü arayüzü hatırlayın) ilk işlemdeki gibi dönmeyecek ve direkt kaydedilecektir. Bunun nedeni ilk kaydet işleminde google'ın bunu bir yere kaydetmesi ve sonuç itibari ile kayıtlı olmasıdır. Eğer önceden kaydetmediğiniz bir alan adını o bölüme girerseniz Hata 12'nin yani CNAME için gerekli karakter dizilerinin döndüğünü görürsünüz çünkü girdiğiniz alan adı kaydedilmemiştir. Sorun şurada ilk girişte ulaştığımız CNAME için gerekli karakter dizisine tekrar nasıl ulaşacağız? Çözümü ise şu adrese giderek bulabilirsiniz:





Google Webmasters Verification Tools linkine tıkladığınızda google hesabınızla giriş yapmanız gerekecek. Sonra herşeyiyle çok net bir arayüzle karşılaşacaksınız. Bu arayüzde üstte anlattığım blogger üzerindeki işlemlerde kayıt edilmiş(doğrulanmış) ve kayıt edilememiş(doğrulanmamış) alan adları listelenecek.





CNAME kaydınızın bilgilerine ulaşabilmek için doğrulamış olduğunuz adreste sağ taraftaki Doğrulama Ayrıntıları kısmına tıklayınız.




Şöyle bir arayüzle karşılacaksınız ve Ayrıntılar kısmına tıklarsanız CNAME kaydı için bilgileri görüntüleyebilirsiniz. Burada unutulmaması gereken şey CNAME kaydı sizin blogger'ınıza özel değil alan adınıza özeldir. Aslında bu bilgiyi araştırıp bulana kadar o arayüzde Google'ın küçük bir ibare ile bu durumda neler yapmamız gerektiğini belirtmiş olması çok daha güzel olurdu.