ミニバージョンのMyBatisの

パブリック クラスブートストラップ{
     パブリック 静的 ボイド開始(){ 
        MySqlSessionのSQLSESSION = 新しい新しい MySqlSession(); // 外側SQLSESSION使用、生成されたMapperプロキシ、
         // TestMapperインタフェース、それは動的剤である、 
        TestMapper testMapper = sqlSession.getMapper (TestMapperのクラス);
         // クエリにマッパー、invokeメソッドを呼び出してデータベースを照会するためにどの方法メソッドInvoke、SQLSESSION Mapperプロキシを呼び出すことで、
         // クエリデータベースSQLSESSIONメソッド呼び出しは、執行の方法があり、 
        テストテスト= testMapper.selectByPrimaryKey(1 
        のSystem.out.println(テスト); 
    } 

    パブリック 静的 ボイドメイン(文字列[]引数){ 
        スタート()。
    } 
}
パブリック クラスMySqlSession {
     プライベートキュータキュータ= 新しい新しいSimpleExecutor(); 

    公共 <T> T selectOne間(文の文字列、オブジェクトパラメータ){
         戻りexecutor.query(ステートメント、パラメータ); 
    } 

    公共 <T> T getMapper(クラス<T> clazz ){ // clazzはインターフェースであり、
        リターン(T)たとえば、Proxy.newProxyInstance(clazz.getClassLoader()、
                 新しい新しいクラス[] {} clazz、新しい新しい MapperProxy(この;、clazz))
         // インターフェースの内部に新しい新規MapperProxyパスそしてSQLSESSION 

        // JDKのダイナミックプロキシ時間、新しいMapperProxyプロキシ(クラスメソッドの前と後の追加コンテンツを達成するために)、
        // 新しい新しいMapperProxyパラメータは、インタフェースの実装クラスです。
        // MyBatisのは、真の操作のためのデータベースを照会するSQLSESSIONを使用して、実装クラスに合格しませんでした。

        // パブリッククラス実装情報InvocationHandler1 {
             // 人の人々 ; // 例で渡さインターフェース
             // パブリック情報(人の人){
             //     this.people =人々 ;
             // }
            // パブリック呼び出しオブジェクト(オブジェクトプロキシ、方法、メソッド、オブジェクト[]引数)がThrowableをスロー{
            //      ;前()// 前部補強
            //      オブジェクト値= Method.invoke(人、引数); // 委任
            // /後の();// 后置增强
             //     戻り値;
           // }
         // } 

        // パブリッククラスのMyTest {
           //   パブリック静的無効メイン(文字列[] args){
            //      人物proxyObject =(人物)Proxy1.newProxyInstance(MyTest.class.getClassLoader()
             //             新しいクラス< ?> [] {} People.class、新しい情報(新しいジャック()))。
        
    } 
}
パブリック クラス MapperProxy <T> 実装のInvocationHandler {
     民間 最終MySqlSession SQLSESSION。
    民間 最終クラス<T> mapperInterface。

    公共 MapperProxy(MySqlSession SQLSESSION、クラス<T> mapperInterface){
         この .sqlSession = SQLSESSION。// 接口和SQLSESSION、
        この .mapperInterface = mapperInterface。
    } 

    パブリック(オブジェクトプロキシ、メソッドのメソッド、オブジェクト[]引数)を呼び出すオブジェクトがスローのThrowableを{
         もし =(method.getDeclaringClass()のgetName()。等号(TestMapperXml.nameSpace)){
            文字列のSQLTestMapperXml.methodSqlMapping.get(method.getName())。
            System.out.println(String.Formatの( "SQL [%S]、パラメータ[%S]"、SQL、引数[0 ]));
            リターン sqlSession.selectOne(SQL、String.valueOf(引数[0 ])); 
        } 
        戻り ヌル
    } 
}
パブリック インターフェース執行{
     <E> Eクエリ(文字列ステートメント、オブジェクトパラメータ)。
}
パブリック クラス SimpleExecutor 実装キュータ{ 

    公共 <E> Eクエリ(文字列のSQL、オブジェクトパラメータ){
         試み{ 
            接続CONN = のgetConnection(); 
            PreparedStatementてpstmt; 
            pstmt = conn.prepareStatement(String.Formatの(SQL、Integer.parseInt(String.valueOf(パラメータ))))。
            ResultSetのRS = pstmt.executeQuery()。
            テストテスト = 新しいテスト();
            一方、(rs.next()){ 
                test.setId(rs.getInt( 1))。
                test.setName(rs.getString( 2 ))。
            } 
            リターン(E)試験。
        } 
        戻り ヌル
    } 

    パブリック接続のgetConnection()がスローするSQLException { 
        文字列ドライバ = "com.mysql.cj.jdbc.Driverを" 
        文字列のURL = "はjdbc:mysqlの:// localhostを:?3306 /アップグレードuseUnicode =真&characterEncoding = UTF-8&useSslオプション=偽&useJDBCCompliantTimezoneShift =真&useLegacyDatetimeCode =偽&serverTimezone = UTC" ; 
        文字列名 =「ルート」
        文字列のパスワード = "123456" ;
        接続でCONN= NULL ;
        試す{ 
            Class.forNameの(ドライバ)// クラスローダ、加载对应驱动 
            CONN = したDriverManager.getConnection(URL、ユーザ名、パスワード); 
        } 
        戻りCONN。
    } 
}
パブリック クラス CachingExecutor 実装キュータ{
     プライベートGpConfiguration構成。
    プライベートSimpleExecutorデリゲート。
    プライベート地図<文字列、オブジェクト>なLocalCache = 新しいHashMapの(); 

    公共CachingExecutor(SimpleExecutorデリゲート){
         この .delegate = デリゲート。
    } 

    公共CachingExecutor(GpConfiguration構成){
         この .configuration = 構成。
    } 

    パブリック <E> Eクエリ(MapperRegistory.MapperData mapperData、オブジェクトパラメータ)が
             スロー例外{
         // 初始化StatementHandler - > ParameterHandler - > ResultSetHandler 
        StatementHandlerハンドラ= 新しいStatementHandler(コンフィギュレーション)。
        オブジェクトの結果 = localCache.get(mapperData.getSql())。
        もしヌル!= 結果){ 
            System.out.printlnは( "缓存命中" );
            リターン(E)結果。
        } 
        結果 =   (E)delegate.query(mapperData、パラメータ)
        localCache.put(mapperData.getSql()、結果)。
        リターン(E)結果。
    } 
}
パブリック インターフェースTestMapper { 
    テストselectByPrimaryKey(整数USERID)。
}
パブリック クラスTestMapperXml {
     パブリック 静的 最終列の名前空間=「com.gupaoedu.mybatis.my.TestMapper」公共の 静的な 最終地図<文字列、文字列> methodSqlMapping = 新しい HashMapの<文字列、文字列> ();
    静的{ 
        methodSqlMapping.put( "selectByPrimaryKey"、 "テストここで、ID =%dから選択*" )。
    } 
}
レベルキャッシュは、キャッシュを更新するために行く時間を削除し、更新しています。

事务:都是用spring来管理事务的。

 <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property value="jdbc:mysql://localhost:3306/upgrade?useSSL=false" name="url"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>

おすすめ

転載: www.cnblogs.com/yaowen/p/11945150.html