パブリック クラスブートストラップ{ パブリック 静的 ボイド開始(){ 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>