春の統合MyBatisの
jarファイルを使用する必要があります
MyBatisの
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency>
MySQLのコネクタ
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
春
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version> </dependency>
aspectjweaver
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency>
MyBatisのスプリング(ここで焦点を当てます)
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.2</version> </dependency>
静的Mavenのリソースフィルタリング問題
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
レビューMyBatisの
テーブルを作成するMySQLの
CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user` (
`id` int(20) auto_increment PRIMARY KEY COMMENT '用户id',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`pwd` varchar(30) DEFAULT NULL COMMENT '密码'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Entityクラス
import lombok.Data;//lombok插件
@Data
public class User {
private int id;
private String name;
private String pwd;
}
プロキシインタフェース
public interface UserMapper {
List<User> listUser();
}
プロキシインタフェースマッピングファイル
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cong.dao.AccountMapper">
<select id="listUser" resultType="account">
select * from mybatis.account;
</select>
</mapper>
MyBatisのコアプロファイル
MyBatisの
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.cong.pojo"/>
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.cong.dao.AccountMapper"/>
</mappers>
</configuration>
テストカテゴリ
//mybatis
@Test
public void test1() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = factory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.listUser();
for (User user : userList) {
System.out.println(user);
}
}
要約すると、プロキシプロセスは、のようなものを実装しています
DeaultSqlSession.getMapper() - > Configuration.getMapper() - > MapperRegistry.getMapper() - >
MapperProxyFactory.newInstance(SQLSESSION)
ここで少しを理解するために、それはMapperProxyFactory MapperProxy工場によって生成されたプロキシクラスであります
MapperProxyFactoryを入力します。
MapperProxyFactory.newInstance(SQLSESSION) - > MapperProxyFactory.newInstance(mapperProxy)
これまでのところ、政府機関が必要とされているクラス
MapperProxyFactoryクラス別MapperProxyへ
MapperProxyは実装に、動的プロキシであるインターフェイスのInvocationHandlerを発見しました
フォーカスのinvoke()メソッド、invokeメソッドでMapperMethodクラスを取得し、その後、mapperMethod.execute(呼び出し最初を参照)
移動excute()は、CRUDことがわかりました。
クラス全体のMapperMethodを見てください
クラス全体をMapperMethodプロキシ機構のコアクラス、SQLSESSION用パッケージの動作です。このクラスは、2つの内部クラスSqlCommandオブジェクトとMethodSignatureを持っています。XMLで私たちを操作するノードに配置されている梱包用のSqlCommandオブジェクトCRUD操作。各ノードはMappedStatementクラスを生成します。カプセル化方式および戻り値の型、メソッド、我々はここで見つける私たちが戻ってSQLSESSIONインタフェースの呼び出しでいた、とオブジェクトの私たち自身の実装方法DefaultSqlSession UerDaoインタフェースの実装クラスはSQLSESSIONによって直接呼び出され、実行のためのMethodSignatureパラメータ同様に、エージェントの動的プロキシの全体の実装プロセスである場所、に大きな円バック後。
春の統合MyBatisの
MyBatisの-春は何ですか?
MyBatisのスプリングは、あなたがシームレスにSpringとコードMyBatisのを統合するのに役立ちます。春-MyBatisの初めて目にこのjarパッケージ
公式サイト:MyBatisの-春
ナレッジベース
あなたはMyBatisのスプリングを使用して開始する前に、あなたはそれらについてMyBatisのと春のフレームワークや用語の両方に精通している必要があります。これは重要です
MyBatisのスプリングは、次のバージョンが必要です。
Mavenはビルド・ツールとして、唯一のpom.xmlに以下のコードを追加する必要がある場合:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
SqlSessionFactoryBeanとSqlSessionTemplate
春とMyBatisのに使用されるように、二つのことは、Springアプリケーションコンテキストに少なくとも定義する必要があります。SqlSessionFactory
少なくとも1つのデータマッパークラス。
MyBatisのスプリングでは使用することができますSqlSessionFactoryBean
作成しますSqlSessionFactory
。工場出荷時のBeanを構成するには、ちょうど春のXML設定ファイルに次のコードを置きます:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
注:SqlSessionFactory
の必要性DataSource
(データソース)。これは任意でありDataSource
、そして唯一のそれは、最大構成することができますように、他の春のデータベース接続を設定する必要があります。
でMyBatisの使用量ベースであるSqlSessionFactoryBuilder
作成SqlSessionFactory
。MyBatisのスプリングでは、その後、使用しSqlSessionFactoryBean
作成します。
MyBatisのでは、使用することができますSqlSessionFactory
作成しますSqlSession
。あなたがセッションを取得したら、あなたは、ステートメントのマッピングを実行するためにそれを使用するコミットやロールバックの接続、およびそれがもはや必要だとき最後に、あなたはセッションを閉じることはできませんすることができます。
SqlSessionFactory
JDBCのために:唯一の必要な属性がありますDataSource
。これは、任意とすることができるDataSource
オブジェクト、そのメソッド、およびその他の構成は同じデータベース接続ばねです。
一般的な属性がありconfigLocation
、MyBatisのXML設定ファイルのパスを指定するために使用されていること。あなたはMyBatisの基本的な設定を変更したいときに非常に便利です。典型的には、基準は、構成を指す<settings>
又は<typeAliases>
要素。
この設定ファイルは、完全なMyBatisの構成である必要はないことに留意すべきです。むしろ、どのような環境の設定(<environments>)
、データソース(<DataSource>)
とMyBatisのトランザクション・マネージャは(<transactionManager>)
無視されます。SqlSessionFactoryBeanは、独自の環境MyBatisの設定作成し(Environment)
、必要に応じて、セットカスタム環境の値を
SqlSessionTemplate
これはMyBatisの-春の中核です。SqlSession
既に使用されて、それの代わりに、シームレスなコードを使用することができる手段の実装、SqlSession
。
テンプレートは、Spring管理トランザクションに参加することができ、そしてそれは、スレッドセーフであるため、複数のマッパークラスの用途に使用することができ、次のことを行う必要があり、常に使用しSqlSessionTemplate
、デフォルトのMyBatisのを置き換えるためにDefaultSqlSession
実装を。混在使用は、同じアプリケーション内の異なるクラス間のデータ整合性の問題が発生することがあります。
使用することができますSqlSessionFactory
作成するためにコンストラクタのパラメータとしてSqlSessionTemplate
オブジェクトを。
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
さて、このBeanはであなたのDAO Beanに直接注入することができます。あなたはこのように、あなたの豆でSQLSESSIONプロパティを追加する必要があります。
public class UserDaoImpl implements UserDao {
private SqlSession sqlSession;
public void setSqlSession(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
public User getUser(String userId) {
return sqlSession.getMapper...;
}
}
押して、注射を次のSqlSessionTemplate
:
<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl">
<property name="sqlSession" ref="sqlSession" />
</bean>
統合を実現
春-config.xmlの
のみエイリアスを残しMyBatisの設定ファイル(別名同じバネ構成ファイルに組み込むことができます)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.cong.pojo"/>
</typeAliases>
</configuration>
春-mybatis.xml
春統合MyBatisのプロフィール
主要な構成をここに
- データソースのデータソース
- セッションファクトリsqlSessionFactory
- セッションはsqlSessionFactoryをテンプレート
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--datasource-->
<!--配置数据源:数据源有非常多,可以使用第三方的,这里使用Spring的-->
<bean id="dataSources" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!--sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSources"/>
<!--关联Mybatis-->
<property name="configLocation" value="mybatis-config.xml"/>
<!--映射文件-->
<property name="mapperLocations" value="classpath:com/cong/dao/*Mapper.xml"/>
<!--别名-->
<!--<property name="typeAliases" value="com.cong.pojo.Account"/>-->
</bean>
<!--SqlSessionTemplate-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--利用构造器注入,没有setter-->
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
</beans>
applicationContext.xmlを
春のコア・コンフィギュレーション・ファイル
ここでインポートファイルを統合することにより、スプリングmybatis.xmlを導入します
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--引入整合的配置文件-->
<import resource="classpath:spring-dao.xml"/>
</beans>
UserMapperImp.java
マッパーインターフェースの実装クラスを増やす、ばね用セッターメソッドを提供SqlSessionTemplate民営は、容器に注ぎ
public class UserMapperImpl implements UserMapper{
private SqlSessionTemplate sqlSessionTemplate;//sqlSession不用我们自己创建了,Spring来管理
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
}
@Override
public List<User> listUser() {
UserMapper userMapper = sqlSessionTemplate.getMapper(UserMapper.class);
return userMapper.listUser();
}
}
サインBean実装
applicationContext.xmlをで作成ビーン、バネは、主AOPとIOCであるため
管理およびトランザクション管理オブジェクトを担当
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--引入整合的配置文件-->
<import resource="classpath:spring-dao.xml"/>
<bean id="userMapper" class="com.cong.dao.UserMapperImpl">
<property name="sqlSessionTemplate" ref="sqlSession"/>
</bean>
</beans>
テスト
@Test
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserMapper mapper = (UserMapper) context.getBean("userDao");
List<User> user = mapper.selectUser();
System.out.println(user);
}
出力結果!
User(id=1, name=cong, pwd=ajd123.)
User(id=2, name=rainbow, pwd=182184)
改善します
もっとMyBatisの-spring1.2.3は、このバージョンを持っています。
スクリーンショットの公式文書:
DAO継承サポートクラス、直接使用getSqlSessionは、()を取得した後、SqlSessionFactoryに直接注入。1に比べて、より親しみやすい。トレーサビリティソースビューでの取引のための管理SqlSessionTemplate、およびサポートを必要としないします
UserMapper実装クラスのUserMapperImpl2を書きます
継承SqlSessionDaoSupportを通じてSqlSessionTemplate管理を解消するために、
//可以通过继承SqlSessionDaoSupport来消除SqlSessionTemplate的显示注入
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
@Override
public List<User> listUser() {
//getSqlSession()是SqlSessionDaoSupport中的方法
UserMapper userMapper = getSqlSession().getMapper(UserMapper.class);
return userMapper.listUser();
}
}
もう少し便利に、リターンは単語のように記述することができます
return getSqlSession().getMapper(UserMapper.class).listUser();
インジェクション豆
<bean id="userMapper2" class="com.cong.dao.UserMapperImpl2">
<property name="sqlSessionTemplate" ref="sqlSession"/>
</bean>
概要:将来的には春に統合が完全にコンフィギュレーションファイルをMyBatisのことができない、外を統合するために、これらの方法に加えて、我々はまた、達成するために注釈を使用することができます。