MyBatisのMyBatisの研究ノート02_建築環境

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法では:

  1. SQLSESSIONのdataconnectionクラスを取得することにより、オブジェクトクラス、
  2. selectOne方法はSQLSESSIONクラス、二つの引数でこのメソッドを呼び出します
    1. 最初のパラメータは、SQL文を追加IDに対応する名前空間UserMapper.xml SQLマッピングファイルです。
    2. 第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に変更されました。

おすすめ

転載: www.cnblogs.com/martin0319/p/12319282.html