source: trunk/fmgVen/src/net/fmg/ven/Ven.java @ 26

Last change on this file since 26 was 26, checked in by fmguler, 13 years ago

Refs #3 - Ven.save() is transferred to the new package. Save use case is completed. Convert.toDB() converts camel case object names to database names with underscores. Unchecked VenException is thrown by Ven methods. Liquibase changelog (test-db-changelog.xml) is changed to include only a simple object to test save operation. It creates a sample database table and inserts a sample row. On rollback it removes sample data. Using liquibase, Sample.java builds database, tests save operation and rolls back.

QueryGenerator generates insert and update queries for save and generates sequence query to assign ids to new objects. Ven calls query generator and runs the query using spring jdbc template.

Old codebase updated to run at Java 1.4

File size: 7.3 KB
Line 
1/*
2 * Ven.java
3 *
4 * Created on December 18, 2006, 5:58 PM
5 * (4.12.06 tarihli SpringDaoDeneme çalışmasından derlenmiştir)
6 *
7 * Ven - Ayar Yerine Gelenek veritabanı erişim nesnesi
8 */
9
10package net.fmg.ven;
11
12import java.util.HashMap;
13import java.util.HashSet;
14import java.util.List;
15import java.util.Map;
16import java.util.Set;
17import javax.sql.DataSource;
18import net.fmg.ven.arac.Cevir;
19import org.springframework.beans.BeanWrapper;
20import org.springframework.beans.BeanWrapperImpl;
21import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
22import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
23import org.springframework.jdbc.core.namedparam.SqlParameterSource;
24
25/**
26 * Veritabanı erişim nesnesi temel sınıf
27 * @author Fatih Mehmet Güler
28 */
29public class Ven {
30    private SorguUretici uretici;
31    private SorguEslestirici eslestirici;
32    private NamedParameterJdbcTemplate sablon;
33    private Map kullanimlar;
34    private boolean hataAyiklama = false;
35   
36    /** Creates a new instance of Ven */
37    public Ven() {
38        uretici = new SorguUretici();
39        eslestirici = new SorguEslestirici();
40        kullanimlar = new HashMap();
41    }
42   
43    /**
44     * Kullanım No: O kullanıma göre otomatik tespit edeceği bağları numaralandırır
45     * <p> ÖNEMLİ: daha bitmedi :)
46     */
47    public List nesneleriAl(Class nesneSinifi, Integer kullanimNo){
48        Set baglar = new HashSet();
49        kullanimlar.put(kullanimNo,baglar);
50        baglar.add(Cevir.isim(nesneSinifi.getName()));
51       
52        String sorgu = uretici.secmeSorgusuUret(baglar, nesneSinifi);
53        if(hataAyiklama) System.out.println("SQL: "+sorgu);
54       
55        List sonuc = eslestirici.listele(sorgu,new HashMap(),nesneSinifi);
56        return sonuc;
57    }
58   
59    /**
60     * Gönderilen bağlara göre nesneyi ilişkileriyle birlikte veritabanından getirir
61     */
62    public List nesneleriAl(Class nesneSinifi, Set baglar){
63        String sorgu = uretici.secmeSorgusuUret(baglar, nesneSinifi);
64        if(hataAyiklama) System.out.println("SQL: "+sorgu);
65       
66        List sonuc = eslestirici.listele(sorgu,new HashMap(),nesneSinifi);
67        return sonuc;
68    }
69   
70    /**
71     * Gönderilen bağlara göre nesneyi ilişkileriyle birlikte verilen ölçüte göre veritabanından getirir
72     * Verilen ölçütlere göre
73     */
74    public List nesneleriAl(Class nesneSinifi, Set baglar, Olcut olcut){
75        String sorgu = uretici.secmeSorgusuUret(baglar, nesneSinifi);
76        sorgu += " where 1=1"+olcut.olcutleriAl();
77        if(hataAyiklama) System.out.println("SQL: "+sorgu);
78       
79        List sonuc = eslestirici.listele(sorgu,olcut.parametreler(),nesneSinifi);
80        return sonuc;
81       
82    }
83   
84    /**
85     * Gönderilen bağlara göre nesneyi ilişkileriyle birlikte verilen ölçüte göre veritabanından kaç satır olacağını sayar
86     * Verilen ölçütlere göre
87     */
88    public int nesneleriSay(Class nesneSinifi, Set baglar){
89        String sorgu = uretici.saymaSorgusuUret(baglar, nesneSinifi);       
90        if(hataAyiklama) System.out.println("SQL: "+sorgu);
91        int sonuc = sablon.queryForInt(sorgu,new HashMap());
92        return sonuc;
93    }
94   
95    /**
96     * Gönderilen bağlara göre nesneyi ilişkileriyle birlikte verilen ölçüte göre veritabanından kaç satır olacağını sayar
97     * Verilen ölçütlere göre
98     */
99    public int nesneleriSay(Class nesneSinifi, Set baglar, Olcut olcut){
100        String sorgu = uretici.saymaSorgusuUret(baglar, nesneSinifi);
101        sorgu += " where 1=1"+olcut.olcutleriAl();
102        if(hataAyiklama) System.out.println("SQL: "+sorgu);
103        int sonuc = sablon.queryForInt(sorgu,olcut.parametreler());
104        return sonuc;
105    }
106   
107    /**
108     * Gönderilen bağlara göre nesneyi ilişkileriyle birlikte veritabanından getirir
109     * <p> Sadece Nesne
110     */
111    public Object nesneAl(Class nesneSinifi, Integer no, Set baglar){
112        String sorgu = uretici.secmeSorgusuUret(baglar, nesneSinifi);
113        Olcut olcut = new Olcut().ekle("and "+Cevir.vt(Cevir.isim(nesneSinifi.getName()))+".no = :___no").ekle("___no",no);
114        sorgu += " where 1=1"+olcut.olcutleriAl();
115        if(hataAyiklama) System.out.println("SQL: "+sorgu);
116       
117        List sonuc = eslestirici.listele(sorgu,olcut.parametreler(),nesneSinifi);
118        if (sonuc.size()==0) return null;
119        if (sonuc.size()>1) System.out.println("**UYARI>> nesneAl birden fazla sonuç döndürüyor, haberin olsun");
120        return sonuc.get(0);
121    }
122   
123    /**
124     * Gönderilen bağlara göre nesneyi ilişkileriyle birlikte verilen ölçüte göre veritabanından getirir
125     * <p> Sadece Nesne, ölçütlere göre
126     */
127    public Object nesneAl(Class nesneSinifi, Integer no, Set baglar, Olcut olcut){
128        String sorgu = uretici.secmeSorgusuUret(baglar, nesneSinifi);
129        sorgu += " where 1=1 and "+Cevir.vt(Cevir.isim(nesneSinifi.getName()))+".no = :___no "+olcut.olcutleriAl(); //No diğer ölçütlerden önce gelmeli order-limit için
130        olcut.ekle("___no",no);
131        if(hataAyiklama) System.out.println("SQL: "+sorgu);
132       
133        List sonuc = eslestirici.listele(sorgu,olcut.parametreler(),nesneSinifi);
134        if (sonuc.size()==0) return null;
135        if (sonuc.size()>1) System.out.println("**UYARI>> nesneAl birden fazla sonuç döndürüyor, haberin olsun");
136        return sonuc.get(0);
137       
138    }
139   
140    public void nesneSakla(Object nesne){       
141        String sorgu = uretici.guncellemeSorgusuUret(nesne);
142        SqlParameterSource parametreKaynagi = new BeanPropertySqlParameterSource(nesne);
143        sablon.update(sorgu,parametreKaynagi);
144        //YAP: yeni eklenenin nosunu almak için daha etkin bir yöntem bulunabilir (üreticinin içinde deki beanwrapper kullanılabilir vs)
145        BeanWrapper wr = new BeanWrapperImpl(nesne);
146        if(wr.getPropertyValue("no")==null){           
147            wr.setPropertyValue("no",new Integer(sablon.queryForInt("select currval('"+Cevir.vt(Cevir.isim(nesne.getClass().getName()))+"_no')", new HashMap())));
148        }
149    }
150   
151    public void nesneSil(Integer no, Class nesneSinifi){
152        String sorgu = "delete from "+Cevir.vt(Cevir.isim(nesneSinifi.getName()))+" where no = :no ;";
153        Map parametreler = new HashMap(2);
154        parametreler.put("no",no);
155        sablon.update(sorgu,parametreler);
156    }
157   
158    //SETTERS--------------------------------------------
159    public void setDataSource(DataSource dataSource){
160        if (dataSource==null) throw new RuntimeException("DataSource null olamaz!!! Bu koşullar altında daha fazla çalışamam :)");
161        this.sablon = new NamedParameterJdbcTemplate(dataSource);
162        this.eslestirici.setSablon(sablon);
163    }
164   
165    public void setHataAyiklama(boolean hataAyiklama) {
166        this.hataAyiklama = hataAyiklama;
167        eslestirici.setHataAyiklama(hataAyiklama);
168    }
169   
170    public void setNesnePaketleri(Set nesnePaketleri) {
171        uretici.getNesnePaketleri().addAll(nesnePaketleri);
172        eslestirici.getNesnePaketleri().addAll(nesnePaketleri);
173    }
174   
175    public NamedParameterJdbcTemplate getSablon() {
176        return sablon;
177    }
178}
Note: See TracBrowser for help on using the repository browser.