ディレクトリ
MyBatisの作業環境を構築します
- ハンズオンプログラム開発MyBatisの取得
- データの相互作用層(DAO)は、従来の書き込み
- MyBatisの簡素化データ動的プロキシ相互作用層(DAO)文言を使用して
セットアップとテスト手順ガイド
開発段階:ジャーパッケージの導入に依存プロジェクト、ビルドログ出力環境、データベース接続プールの構成を作成し、Javaオブジェクトの永続化層を作成し、マッパーの構成ファイルを作成し、テストクラスを作成します。
データベースの準備
SQL文を対応するテーブルを作成し、次のとおりです。
-- 创建数据库
CREATE DATABASE mybatis;
-- 使用创建的mybatis数据库
USE mybatis;
-- 创建表user
DROP TABLE IF EXISTS user;
CREATE TABLE user (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) DEFAULT NULL,
password VARCHAR(20) DEFAULT NULL,
gender VARCHAR(5) DEFAULT NULL,
email VARCHAR(50) DEFAULT NULL,
province VARCHAR(20) DEFAULT NULL,
city VARCHAR(20) DEFAULT NULL,
birthday DATE DEFAULT NULL
);
-- 插入测试数据
INSERT INTO
user(id,username,password,gender,email,province,city,birthday)
VALUES
(1,'张三','1111','男','[email protected]','河南省','郑州市','1991-04-23'),
(2,'李四','2222','男','[email protected]','河北省','邯郸市','1989-10-13'),
(3,'刘丽','3333','女','[email protected]','江苏省','苏州市','1994-06-09'),
(4,'李丽','4444','女','[email protected]','四川省','成都市','1992-11-07');
環境エンジニアリングの構造
使用MyBatisのコアジャーMyBatisの-3.4.1-jarファイルとしてパッケージ、外側だけでなく、他の従属MyBatisのジャーパッケージを製造するために、駆動接続データベースを提供する準備ができて、ログ出力環境を作成し、最終的な、基本的なプログラム構造とMyBatisのJARパッケージとして図:
データベース接続プールの設定ファイル
MyBatisの-config.xml構成ファイルでは、環境設定情報は、環境ラベルに配置され、ラベル環境は複数のラベル、単一のデータベース環境に対応する別個の環境設定の各ラベルを可能にします。TransactionManagerトランザクション管理タグ型の構成、データソースタグは、プロパティタグ、複数の接続情報データベース、データベース、アドレスデータベース接続URL、データベースのユーザ名、ユーザ名およびパスワードデータベースのパスワードを設定するための駆動ドライバに配置されています。
シンプルMyBatisの-config.xml構成ファイルを次のように
<?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="mysql">
<!--数据库配置的具体信息-->
<environment id="mysql">
<!--配置事务管理类型-->
<transactionManager type="JDBC"/>
<!--配置连接池信息-->
<dataSource type="POOLED">
<!--配置数据库的驱动、连接地址、用户名和密码-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="MARTIN0319"/>
</dataSource>
</environment>
</environments>
</configuration>
SQLマッピングの設定ファイルを書きます
MyBatisのでは、ないの直接リンクを持つJavaクラスとSQL文は、ほぼすべてのSQLステートメントは、MyBatisの操作の過程で、マッパーマッピングファイルで構成され、SQL文、パラメータ入力と出力の構成を読み取りタイプ。次に、中UserMapper.xmlでselect文を追加します。
<?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="userTest">
<select id="findUserById" parameterType="integer" resultType="com.martin.domain.User">
select
id,username,password, gender,email,province,city,birthday
from
user
where
id = #{id}
</select>
</mapper>
私たちは、selectタグで、次のプロパティがあります。
- ID:SQLステートメントはmappedStatementは、対応するSQLの検索のためにオブジェクトをカプセル化解析され、一意の識別子を必要とし、IDが開発SQL文の一意の識別子です。
- ParameterType:入力パラメータの型、整数型の入力パラメータで指定されたタイプの例を指定します。
- resultTypeと:指定出力パラメータのタイプ、ユーザ指定された出力Javaオブジェクトにマッピングされたインスタンス。
- #{}、プレースホルダを指定し、入力パラメータは、Java基本データ型である場合、任意の値とすることができる値にし、#{}、 。
UserMapper.xmlファイルを解決できるクラスをロードするためにMyBatisのリソースファイルを可能にするために、SQLマッピングファイルを書き込んだ後、あなたはでMyBatisの-config.xmlのファイルパスUserMapper.xmlを設定する必要があります。
<mappers>
<mapper resource="com/martin/mapper/UserMapper.xml"/>
</mappers>
書き込みエンティティクラスとテストクラス
三つのカテゴリー、すなわち永続エンティティクラス、データベースの相互作用クラス(GET SQLSESSION)テスト・オブジェクトとクラスを記述する必要があります。
永続エンティティクラス - ユーザー
データベーステーブル内のエンティティクラスのメンバ変数をフィールドに最善を対応しています。クラスプロパティは、取得および設定するためにsetterメソッドとgetterメソッドを使用する必要があります。
ユーザーエンティティクラス:
package com.martin.domain;
import java.util.Date;
public class User {
private Integer id;
private String username;
private String password;
private String gender;
private String email;
private String province;
private String city;
private Date birthday;
/*
setter、getter和toString方法略
*/
}
データベースの相互作用クラス(SQLSESSIONオブジェクトを取得します)
データベースの相互作用のクラスは、クラスをロードするためのリソースファイルは、構成ファイル、データベース接続プール、そしてSqlSessionFactoryデータベース接続を読み取り、データマッピングは、データベースと対話することができますSQLSESSIONオブジェクトを作成するために、マッパールール。
インタラクティブなデータベースツール - DataConnection.java
package com.martin.datasource;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class DataConnection {
private static String RESOURCE = "mybatis-config.xml";
private static SqlSessionFactory SESSIONFACTORY;
private static SqlSession SESSION;
public static SqlSession getSqlSession() throws IOException {
InputStream input = Resources.getResourceAsStream(RESOURCE);
SESSIONFACTORY = new SqlSessionFactoryBuilder().build(input);
SESSION = SESSIONFACTORY.openSession();
return SESSION;
}
}
dataconnectionクラスでは、リソース、リソースのロードクラスローダMyBatisの-config.xml構成ファイルには、SQLSESSIONオブジェクトを取得するためのOpenSessionメソッドのSqlSessionFactoryを呼び出した後にセッションファクトリSqlSessionFactoryオブジェクトを取得します。
書き込みテストクラス - UserTest
ユーザ情報1のデータベースIDから除去する必要が書き込みテストクラス:
package com.martin.test;
import java.io.IOException;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.martin.datasource.DataConnection;
import com.martin.domain.User;
public class UserTest {
// 测试查找指定id的用户信息
@Test
public void testFindUserById() throws IOException {
SqlSession session = DataConnection.getSqlSession();
User user = session.selectOne("userTest.findUserById", 1);
System.out.println(user);
// 提交事务和关闭session
session.commit();
session.close();
}
}
testFindUserById法では:
- SQLSESSIONのdataconnectionクラスを取得することにより、オブジェクトクラス、
- selectOne方法はSQLSESSIONクラス、二つの引数でこのメソッドを呼び出します
- 最初のパラメータは、SQL文を追加IDに対応する名前空間UserMapper.xml SQLマッピングファイルです。
- 第2のパラメータは、パラメータ・マップ・ファイル、SQLステートメントの値に対応するパラメータです。
この場合には、SQL文とパラメータの種類を示すコンソールは、実行、および1へのユーザIDのクエリ情報をプリントアウト。
データ入力の運用手順
操作に複数のデータとデータの追加および削除の実装を照会する方法、単一のデータ取得を実現するために、上記の。
ファジィクエリ - SelectListの
クエリにユーザーの名前に単語を照合することにより、データベースあいまいクエリ内のユーザーテーブル:
最初は、SQL文のマッピングUserMapper.xml設定ファイルを設定します。
<select id="findUserByUsername" parameterType="string" resultType="com.martin.domain.User">
select
id,username,password, gender,email,province,city,birthday
from
user
where
username like '%${value}%'
</select>
まだIDマッピングファイルを表す解析され、SQLのIDの文に変換され、ParameterTypeには、String型のSQL入力パラメータを指定し、結果の型はresultTypeとJavaBeanの名前のユーザーであることを指定します。
selectタグ「{} $」記号は、SQLへのスプライスSQL文を示します。SQLステートメント内の任意のスプライシングなしでパラメータ変更の内容を受け、「$ {}は」唯一の代表値のパラメータを使用することができます。「$ {}」使用することができる「%」#{値}の「 %」 ]代わりに、括弧内のこの時間値は、任意の文字であってもよいです。
ユーザ名に関する情報を取得するためにtestFindUserByUsername方法UserTestクラスを書くことで「リー」が含まれています。
@Test
public void testFindUserByUsername() throws IOException {
SqlSession session = DataConnection.getSqlSession();
List<User> userList = session.selectList("userTest.findUserByUsername", "李");
for (User user : userList) {
System.out.println(user);
}
// 提交事务和关闭session
session.commit();
session.close();
}
クエリが曖昧であるため、得られた結果であってもよい複数のクエリではなく、複数のオブジェクトがSelectListの方法によって取得することができるSQLSESSION、リスト型のメソッドのためのクエリの結果。
この場合には、SQL文とパラメータの種類を示すコンソールは、文字列パラメータ値リー、結果へのクエリの数が2であるショーを行い、ユーザがで「李」を持つユーザ名を問い合わせます情報をプリントアウトします。
ユーザーを増やす - 挿入
操作を増やすと、新しい文の使用は、このケースではそう、原因ユーザーオブジェクトの種類を挿入する必要があるため、ユーザー・クラスのParameterType値の完全修飾名をラベル挿入SQLステートメント、ノーリターン値を追加する必要があります。
<insert id="insertUser" parameterType="com.martin.domain.User">
insert into
user(username,password,gender,birthday,email,province,city)
values
(#{username},#{password},#{gender},#{birthday,jdbcType=DATE},#{email},#{province},#{city})
</insert>
誕生日の日付のプロパティ値を挿入する場合、タイプ、負荷SQL文がパラメータを設定する際に便利な、正しくデータベース形式にマッピングすることができますに沿って、パラメータのjdbcType JavaのJDBCの型を宣言するためのパラメータを追加します。
Userテーブルにデータを挿入、testInsertUserメソッドを追加します。
@Test
public void testInsertUser() throws IOException, ParseException {
SqlSession session = DataConnection.getSqlSession();
User user = new User();
user.setUsername("孟祥杰");
user.setPassword("5555");
user.setGender("男");
user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1991-03-19"));
user.setProvince("江苏省");
user.setCity("沭阳县");
session.insert("userTest.insertUser",user);
// 提交事务
session.commit();
session.close();
}
エンティティの取得主キーが挿入されています
いくつかの操作については、必要性は、エンティティの主キー情報を対応する新しい操作に戻るには、MySQLではINSERT文を実行する前に、主キーをインクリメント、MySQLは自動的にMySQLのSELECT LAST_INSERT_により、操作INSERT実行した後、自動インクリメントの主キーを生成し、 ()新しく挿入されたレコードの主キーを取得します。
だから、次のように設定するには、ファイルをマッピングします:
<insert id="insertUser" parameterType="com.martin.domain.User">
<selectKey keyProperty="id" order="AFTER" resultType="integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into
user(username,password,gender,birthday,email,province,city)
values
(#{username},#{password},#{gender},#{birthday,jdbcType=DATE},#{email},#{province},#{city})
</insert>
タグラベル挿入selectKey挿入し、ラベルが最後のインクリメントの主キーを照会するSELECT INSERT_LAST_ID()内に配置されています。このパラメータは、(後)の前または後(前)であり、挿入SQLステートメントが実行さに対して次関数を示しています。
自動インクリメントの主キーを取得するための別の方法は、[挿入]タブ「userGeneratedKeys」に属性を追加し、「keyPropertyは」自動インクリメント主キーとJavaオブジェクトを使用して属性名を表すためです。以下のような構成は以下のとおりです。
<insert id="insertUser" parameterType="com.martin.domain.User" useGeneratedKeys="true" keyProperty="id">
insert into
user(username,password,gender,birthday,email,province,city)
values
(#{username},#{password},#{gender},#{birthday,jdbcType=DATE},#{email},#{province},#{city})
</insert>
INSERTステートメントは、MyBatisの実行後にするための上記の設定後、成長は、自己ID id属性値が割り当てられているユーザ挿入されたオブジェクトになり、論理層にメソッドGETユーザIDによって得ることができます。
このとき、コンソール挿入ステートメントが実行され、パラメータの種類が挿入され、各パラメータの値が表示され、インクリメントIDをプリントアウト。
変更、削除するエンティティ
削除のために、関連するSQL構成の準備に同じラベルUserMapper.xml設定ファイルを使用するには、[削除や更新、変更します。
<!-- 修改用户 -->
<update id="updateUser" parameterType="com.martin.domain.User">
update
user
set
username=#{username},
password=#{password},
gender=#{gender},
birthday=#{birthday,jdbcType=DATE},
email=#{email},
province=#{province},
city=#{city}
where
id=#{id}
</update>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="com.martin.domain.User">
delete from
user
where
id=#{id}
</delete>
削除、および変更構成は、受信パラメータの型のため、削除や更新のラベルに包まれているのParameterTypeによって指定されます。ここで、変更、およびユーザーIDを指定した構成情報を削除します。方法とtestDeleteUser testUpdateUser新しいテストクラスUserTestで:
// 修改用户信息
@Test
public void testUpdateUser() throws IOException, ParseException {
SqlSession session = DataConnection.getSqlSession();
// 获取ID为7的用户
User user = session.selectOne("userTest.findUserById",5);
// 修改用户的信息
user.setEmail("[email protected]");
// 调用update方法保存修改后的用户信息
session.update("userTest.updateUser", user);
// 提交事务和关闭session
session.commit();
session.close();
}
testUpdateUser方法を実行した後、図のコンソール出力に示されるように:
私たちが見ることができた後testUpdateUser方法は、1の数、成功したIDと言う5は、ユーザーの電子メールを変更することを意味[email protected]ように変更しました。
// 删除用户信息
@Test
public void testDeleteUser() throws IOException {
SqlSession session = DataConnection.getSqlSession();
// 获取ID为5的用户
User user = session.selectOne("userTest.findUserById",5);
// 调用delete删除用户
session.delete("userTest.deleteUser", user);
// 提交事务和关闭session
session.commit();
session.close();
}
testDeleteUser方法を実行した後、図のコンソール出力に示されるように:
あなたは、deleteメソッド実行後の数を確認することができ、成功したユーザーのデータのID 5を削除している、1に変更されました。