最も人気のあるMybatisフレームワークを知っていますか?それを構築する方法は?
MyBatisは元々ApacheのオープンソースプロジェクトiBatisでしたが、2010年に、このプロジェクトはapacheソフトウェアファウンデーションからgoogleコードに移行され、MyBatisに名前が変更されました。2013年11月にGithubに移行しました。
iBATISという用語は、「インターネット」と「abatis」の組み合わせに由来し、Javaベースの永続層フレームワークです。iBATISが提供する永続層フレームワークには、SQLマップとデータアクセスオブジェクト(DAO)が含まれます。
MyBatisは、通常のSQLクエリ、ストアドプロシージャ、高度なマッピングをサポートする優れた永続性レイヤーフレームワークです。MyBatisは、JDBCコードとパラメーターのほとんどすべての手動設定、および結果セットの取得とパッケージ化を排除します。MyBatisは、単純なXMLまたは注釈を使用して、構成と元のマッピング、インターフェースおよびJava POJO(Plain Old Java Objects)をデータベース内のレコードにマッピングできます。
Mybatisは完全なORMフレームワークではありません。Mybatisではプログラマーが自分でSQLを作成する必要がありますが、マッピング(入力パラメーターのマッピング、出力結果のマッピング)もあり、mybatisの学習しきい値は休止状態よりも低くなっています。柔軟性が高く、可変のビジネスモデルに特に適しています。このプロジェクトには幅広い用途があります。
簡単な要約:** jdbcコードを簡素化し、永続層を簡素化し、SQLステートメントをコードから分離し、リフレクションを使用して、テーブル内のデータをJava Beanプロパティに1つずつマッピングします。つまり、ORM(オブジェクトリレーショナルマッピング)* **
使用範囲:
ERP(Crm顧客関係管理システム、OAシステム)などの中小規模のプロジェクトなどの日常の開発プロジェクトでは、比較的固定された要件と関係モデルにはHibernateが推奨されます。インターネットプロジェクトなど、要件が固定されていないプロジェクトには、 mybatisをお勧めします。これは、sqlステートメントを柔軟に記述する必要があるためです。要するに、mybatisは、学習して習得する必要のある永続的なレイヤーフレームワークになっています。
[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-dTuSA9mW-1608280132024)(https://imgkr.cn-bj.ufileos。 com / 63b1bf51-5d8f-4ee0 -954a-7210cb5a1943.png)]
Mybatisフレームワークを構築する方法
- 新しいMavenプロジェクト
- log4jログの追加
- リソースディレクトリに構成ファイルを追加します
- マッピングファイルを追加
- エンティティクラス顧客が追加されました
- 親プロジェクトのpomでリソースを取得する
- テスト
ケースプラクティス
1.新しいMavenプロジェクトを作成します
**新しいMavenプロジェクトを作成し、依存するjarをpomファイルに追加します**
<!-- mybatis jar 包依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<!-- log4j日志打印 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
2.log4jログの追加
ログ出力情報を簡単に表示できるように、src / main / resourcesリソースパッケージの下にlog4jログ出力プロパティファイルを追加します
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
#Consoleoutput...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.リソースディレクトリの下に構成ファイルを追加します
新しいmybatis.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>
<environments default="development">
<environment id="development">
<!-- 加入事务控制 -->
<transactionManager type="jdbc" />
<!-- 配置数据库连接信息 -->
<dataSource type="pooled">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/spring-test" />
<property name="username" value="root" />
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- mapper 配置文件指定 文件数量可配置多个-->
<mappers>
<mapper resource="com/xxx/mapper/CustomerMapper.xml" />
</mappers>
</configuration>
ラベル設定の自動プロンプトが表示されない場合があります。
解決策:mybatis-3-config.dtdファイルをインポートします
ウィンドウ設定-xml-xmlカタログを検索
[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-7wV2kMJG-1608280132029)(https://imgkr.cn-bj.ufileos。 com / 5ae242b8-c51d-41e3)-a3ac-7b6b1897a245.png)]
ユーザー指定エントリディレクトリに追加->
場所:http://mybatis.org/dtd/mybatis-3-mapper.dtd(値はxmlテンプレートに対応します)
キータイプ:URI
キー:-// mybatis.org//DTD Mapper 3.0 // EN(値はxmlテンプレートで対応しています)
ステップ2:
xmlを閉じて再度開きます。再度開くことができない場合は、Eclipseを再起動します。
最後に[OK]をクリックします
4.マッピングファイルを追加します
新しいCustomerMapper.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">
<!--
1.命名空间配置 全局唯一 包名+文件名
2.配置Mapped Statement
3. statement配置
id 值声明statement编号 同一命名空间(同一文件)下不可重复
parameterType 输入参数即占位符的数据类型 类型可以是 基本数据类型,字符串,java bean ,map,list等
resultType 输出结果 类型可以是基本数据类型,字符串,java bean,map等
statement 描述 即待执行的sql
#{id} 占位符 变量名为id/value 均可 ${value} 变量名必须为value 字符串拼接形式 无法避免sql 注入
-->
<mapper namespace="com.xxx.mapper.customerMapper">
<!-- 查询客户-->
<select id="queryCustomerById" parameterType="int" resultType="com.xxx.pojo.Customer">
SELECT id,user_name 'userName',user_balance 'userBalance' FROM yg_customer WHERE id=#{id}
</select>
</mapper>
5.エンティティクラスCustomerを追加します
package com.xxx.pojo;
public class Customer {
private int id;
private String userName;
private String userBalance;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserBalance() {
return userBalance;
}
public void setUserBalance(String userBalance) {
this.userBalance = userBalance;
}
@Override
public String toString() {
return "Customer{" +
"id=" + id +
", userName='" + userName + '\'' +
", userBalance='" + userBalance + '\'' +
'}';
}
}
6.親プロジェクトpomでリソースを取得します
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
7.テスト
@Test
public void test() throws IOException {
/**
a)、读取mybatis的配置文件
b)、加载配置文件创建SqlSessionFactory
c)、根据SqlSessionFactory创建SqlSession
d)、通过sqlSession操作数据库
e)、处理结果
f)、关闭session
*/
/**
* 加载配置到内存
*/
InputStream is= Resources.getResourceAsStream("mybatis.xml");
/**
* 创建SqlSessionFactory 对象 hibernate 也是如此 必须先获取SqlSessionFactory 实例化对象 */
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
/**
* 获取session以便操作数据库
* 参数一:指定UserMapper.xml 映射文件id 必须加入命名空间
* 参数二: 指定输入参数
*/
SqlSession session=factory.openSession();
Customer customer = session.selectOne("com.xxx.mapper.customerMapper.queryCustomerById", 2);
/**
* 将返回的结果输出
*/
System.out.println(customer);
/**
* 操作完数据库 关闭session
*/
session.close();
}
展開
MyBatisフレームワークアーキテクチャ
[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-B8pRZQiT-1608280132053)(https://imgkr.cn-bj.ufileos。 com / 71894e06-f527-4e91 -ae25-8a5cac546481.png)]
説明:
1構成-mybatis構成
1)Springと同様に、構成ファイルまたは注釈の形式で構成できます。
2)、mybatis.xml、このファイルはmybatisのグローバル構成ファイルとして使用され、mybatisの動作環境やその他の情報を構成します。
3)マッパーファイルはSQLマッピングファイルであり、データベースを操作するためのsqlステートメントがファイルに設定されています。このファイルはmybatis.xmlにロードする必要があります。
4)構成ファイルを有する後、コンストラクトSqlSessionFactoryセッションファクトリであるようMyBatisの環境などの設定情報を介して
5)sqlSessionはセッションファクトリによって作成されたセッションであり、データベースはsqlSessionを介して操作する必要があります
6)sqlSessionはExecutor(データベース操作エグゼキューターインターフェイス)を使用してデータベースを操作し、Executorの特定の実装クラスは指定されたdaoレイヤーデータアクセス操作を実装します。
2マップされたステートメント
フレームワークの最下層は、オブジェクト(sqlステートメント、入力パラメーター、出力結果タイプ)をカプセル化し、mybatis構成情報やsqlマッピング情報などをカプセル化します。マッパーファイル(つまり、Mapper.xml)内の1つのsqlは、MappedStatementオブジェクトに対応します。 、およびsqlのIDはマップされたステートメントのIDです。
3SQL入力マッピングパラメータ
基本型と単純型、HashMap、カスタムPOJOなど。入力パラメーターマッピングは、jdbcプログラミングのpreparedStatementのパラメーターの設定です。Executorは、sqlを実行する前に、MappedStatementを介して入力javaオブジェクトをsqlにマップします。
4SQL出力マッピングパラメータ
基本型と単純型、HashMap、カスタムPOJO。ステートメントは、SQL実行の出力結果を定義します。出力結果のマッピングプロセスは、jdbcプログラミングでの結果の分析および処理プロセスと同等です。Executorは、マップされたステートメントを介してsqlを実行した後、出力結果をjavaオブジェクトにマップします。
ここではMavenプロジェクトが使用され、対応するmybatis jarパッケージは、Mavenウェアハウスの統合管理とダウンロードを通じてダウンロードされます。