真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

microdao開源框架的實例分析

microdao開源框架的實例分析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)永年,十余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

MicroDao中式Dao
MicroDao為了解決mybatis固有缺陷,進行全新封裝的dao框架,功能覆蓋mybatis,且比mybatis更靈活。
MicroDao同時支持MySQL和oracle
代碼開源地址:https://github.com/jeffreyning/MicroDao

MicroDao相對mybatis的優(yōu)點:
1,sql腳本支持修改后熱部署實時生效。
2,bean與數(shù)據(jù)庫字段映射關(guān)系,通過注解設(shè)置到bean中,不必在sql腳本中體現(xiàn)。
3,sql腳本支持類似jsp的寫法,且不必區(qū)分select、update使用不同標簽,更加靈活。
4,不需要使用插件,內(nèi)置支持物理分頁。
5,不需要使用插件,內(nèi)置支持針對bean的標準增刪改查功能。
6,不需要使用插件,內(nèi)置支持讀寫分離,分庫分表。
7,針對mysql5.7支持動態(tài)字段。

支持mapper、template、非orm三種模式支撐業(yè)務(wù)系統(tǒng)
1,mapper指,通過掃描接口,運行時自動生成dao實例;
2,template指,通過繼承template標準父類,生成dao子類;
3,非orm指,直接使用microDao實例,可以執(zhí)行非orm更靈活的數(shù)據(jù)庫操作。

mapper模式技術(shù)說明

1,編寫實體bean使用@MicroTableName注解說明對應(yīng)的表名稱
br/>使用@MicroTableName注解說明對應(yīng)的表名稱

package com.github.jeffreyning.test.dto;
import com.nh.micro.orm.MicroMappingAnno;
import com.nh.micro.orm.MicroTableName;

@MicroTableName(name="micro_test")
public class MicroTest {
    @MicroMappingAnno(name="id")
    private String id;

    @MicroMappingAnno(name="meta_key")
    private String metaKey;

    @MicroMappingAnno(name="meta_name")
    private String metaName;

    @MicroMappingAnno(name="meta_type")
    private String metaType;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getMetaKey() {
        return metaKey;
    }

    public void setMetaKey(String metaKey) {
        this.metaKey = metaKey;
    }

    public String getMetaName() {
        return metaName;
    }

    public void setMetaName(String metaName) {
        this.metaName = metaName;
    }

    public String getMetaType() {
        return metaType;
    }

    public void setMetaType(String metaType) {
        this.metaType = metaType;
    }
}

2,編寫dao層接口

通過繼承MicroCommonMapper實現(xiàn)對實體bean(在泛型中設(shè)置)的標準增刪改查功能
接口的方法名如updateInfoByNhs會映射為sql腳本中段落名稱
接口參數(shù)個數(shù)和類型均無限制

關(guān)于結(jié)果映射:
查詢單條記錄是,如果接口設(shè)置的返回值為實體bean則,則自動進行映射。
接口返回值如果是list,可以用@ListInnerClass注解設(shè)置list中實體類,不設(shè)置則按照list返回

關(guān)于分頁:
分頁的頁數(shù)每頁的記錄數(shù),查詢出總記錄數(shù),均通過DefaultPageInfo對象帶入帶出。
使用mapper模式時接口方法中帶有DefaultPageInfo對象時自動進行分頁處理。

關(guān)于插入時自增id返回:
使用MicroCommonMapper通用插入方法時,通過實體bean帶回自增id。
使用sql時,通過IdHolder對象帶出自增id。使用mapper模式時接口方法中傳入IdHolder按照自增id處理。

關(guān)于讀寫分離:
通過在接口中設(shè)置@MicroDbName注解,決定底層切換哪個數(shù)據(jù)源進行操作??梢杂么斯δ軐崿F(xiàn)讀寫分離。

package com.github.jeffreyning.test.dao;
import java.util.List;
import java.util.Map;
import com.github.jeffreyning.test.dto.MicroTest;
import com.nh.micro.dao.mapper.ListInnerClass;
import com.nh.micro.dao.mapper.MicroCommonMapper;
import com.nh.micro.orm.MicroDbName;
import com.nh.micro.template.IdHolder;

@MicroDbName(name="default")
public interface TestRep extends MicroCommonMapper  {

    public int updateInfoByNhs(MicroTest microTest);

    public int insertInfoByNhs(Map paramMap, IdHolder idHolder);

    @ListInnerClass(name=MicroTest.class)
    public List queryInfoByUserName(String name);   

    public List queryInfoByUserAge(Map paramMap);
}

3,編寫sql腳本

腳本文件為txt格式但必須以.nhs作為文件名后綴(如:TestRep.nhs)
設(shè)置段落<%! %> xxxxxxxx <%! %>
段落id需與接口方法名相同。
段落不區(qū)分select還是update,統(tǒng)一用sql標識。
邏輯判斷部分類似jsp用<% some script %>表示
與mybatis一樣參數(shù)值使用#{} ${}兩種方式引用
應(yīng)用時必須以paramArray開始,paramArray是一個數(shù)組與接口參數(shù)數(shù)據(jù)對應(yīng)。
set字符拼接時,首個逗號會在框架內(nèi)部自動刪除,不需要做額外處理。

/* 查詢 */
<%!  %>
select * from micro_test t left join micro_user u on  t.user_id=u.user_id where 1=1 
<% if(paramArray[0]!=null){ %>      
    and u.user_name like '%${paramArray[0]}%'           
<%  } %>
<%!  %>

<%!  %>
select * from micro_test t left join micro_user u on  t.user_id=u.user_id where 1=1 
<% if(paramArray[0].get("user_age")!=null){ %>      
    and u.user_age >= #{paramArray[0].user_age}             
<%  } %>
<%!  %>

/* 插入 */
<%!  %>
insert into micro_test(id,meta_key) values( 
#{paramArray[0].id},#{paramArray[0].meta_key}
    )
<%!  %>

/* 更新 */ 
<%!  %>
update micro_test set  

<% if(paramArray[0].metaKey!=null){%>
,meta_key=#{paramArray[0].metaKey}  
<% } %> 
<% if(paramArray[0].metaName!=null){%>
,meta_name=#{paramArray[0].metaName}    
<% } %> 

where id=#{paramArray[0].getId()}
<%!  %>

4,在spring中配置掃描sql腳本和接口

配置NhsInitUtil用來加載sql腳本,其中rulePath是腳本根目錄路徑。
配置BeanScannerConfigurer用來加載mapper接口,其中scanPath是接口根目錄路徑.
MicroDao內(nèi)部需要使用jdbctemplate。
配置microDbHolder是MicroDao內(nèi)部用來設(shè)置并在讀寫分離時切換多個數(shù)據(jù)源(jdbctemplate)的機制,至少配置一個default數(shù)據(jù)源。
其中dbTypeMap屬性用來配置數(shù)據(jù)源類型可填寫mysql或oracle

關(guān)于事務(wù):
仍使用spring事務(wù)機制TransactionManager進行管理

    
        
        
        
    

    
        
    

    
        
            
                
                    
                        default
                    
                    
            
        
        
            
                
                    
                        default
                    
                    mysql
                

            
          
     

    
        
            
                
                
                
                
                
                
            
        
     
    
        
      

    
    
        
    

    
    
        
            
            
            
            
            
            
            
            
        
    

    
    
        
        
    

5,使用mapper出的dao實例操作數(shù)據(jù)庫

package com.github.jeffreyning.test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.github.jeffreyning.test.dao.TestRep;
import com.github.jeffreyning.test.dto.MicroTest;
import com.nh.micro.dao.mapper.DefaultPageInfo;
import com.nh.micro.dao.mapper.MicroPageInfo;
import com.nh.micro.template.IdHolder;

public class TestMicroDao {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        TestRep testRep=(TestRep) ac.getBean("testRep");

        /*根據(jù)實體bean 創(chuàng)建*/
        MicroTest microTest=new MicroTest();
        microTest.setMetaKey("t1");
        microTest.setMetaName("test1");
        testRep.createInfoMapper(microTest);
        String id=microTest.getId();

        /*根據(jù)實體bean的example 分頁查詢*/
        DefaultPageInfo pageInfo=new DefaultPageInfo();
        List list=testRep.getInfoList4PageMapper(null, pageInfo);
        Long total=pageInfo.getTotal();
        System.out.println(list.toString());
        System.out.println("total="+total);

        /*根據(jù)實體bean的example 查詢*/
        List alllist=testRep.getInfoListAllMapper(null, "");
        System.out.println(alllist.toString());     

        /*根據(jù)實體bean的Id 查詢*/
        MicroTest tempBean=testRep.getInfoByIdMapper(id);
        System.out.println(tempBean.toString());

        /*根據(jù)實體bean 更新記錄*/
        tempBean.setMetaName("test12");
        testRep.updateInfoMapper(tempBean);

        /*根據(jù)實體bean的id 刪除記錄*/
        testRep.delInfoByIdMapper(id);

        /*根據(jù)sql 插入*/
        Map paramMap=new HashMap();
        paramMap.put("meta_key", "test123");
        paramMap.put("meta_name", "123");
        IdHolder idHolder=new IdHolder();
        testRep.insertInfoByNhs(paramMap,idHolder);
        Object idObj=idHolder.getIdVal();
        System.out.println("id="+idObj.toString());

        /*根據(jù)sql 更新*/
        MicroTest bean1=new MicroTest();
        bean1.setId(idObj.toString());
        bean1.setMetaName("new name");
        testRep.updateInfoByNhs(bean1);

        /*根據(jù)sql 聯(lián)合查詢*/
        String name="tom";
        List list2=testRep.queryInfoByUserName(name);
        System.out.println(list2.toString());

        /*根據(jù)sql 聯(lián)合查詢*/
        Map pMap=new HashMap();
        pMap.put("user_age", 20);
        List list3=testRep.queryInfoByUserAge(pMap);
        System.out.println(list3.toString());   

    }

}

template模式技術(shù)說明

通過繼承MicroMapperTemplate實現(xiàn)針對實體bean的增刪改查操作和sql操作

package com.github.jeffreyning.test.temp;

import com.github.jeffreyning.test.dto.MicroTest;
import com.nh.micro.dao.mapper.MicroMapperTemplate;

public class demoDao extends MicroMapperTemplate {
    public MicroTest getInfo(String id) throws Exception {
        return getInfoByIdMapper(id);
    }
}

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


新聞名稱:microdao開源框架的實例分析
文章源于:http://weahome.cn/article/ispdhc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部