MyBatis 3初心者が旅立つ



昨年の今頃、iBatisは突然Google Codeに移行し、MyBatisと改名したことを覚えています.今日初めてMyBatisを試したのは、クイズチャンネルのに質問だったからだ.
 
Hmmm...本文はMyBatis初心者に共有したものです.もしあなたがMyBatisの老人であれば、次の内容を読む必要はなく、アドバイスをしたり、問題をつかんだりすることをお勧めします.J
 
MyBatisの構成と使用には、一定の変化があります.iBatisは多く使われているので、MyBatisテスト環境を構築しても、MyBatisの中のAPIを使用しても、まだ楽です.
 
言うまでもなく、今回のテストはMyBatis-3.0.1+mybatis-spring-1.0.0-RC 3を使用してテストを行い、Maven(maven 2.1.x)を使用してテストエンジニアリングを管理しています.
 
まず、なぜmybatis-springを使うのかというと、Spring公式にはMyBatisを統合するAPIがまだ出ていないため、mybatis-spingというツールパッケージ(このツールパッケージはMyBatis公式に発売されている)を導入する必要があります.
 
まず、Mavenを使用してテストエンジニアリングを作成します.Mavenコマンドは次のとおりです.
mvn archetype:create -DgroupId=com.shansun.mybatis -DartifactId=lb-ibatis-test
 
次にpomファイルにmybatisおよびmybatis-springの依存性を追加します.次のようになります.
 
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.2.2</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.0.0-RC3</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>
 
ここではmysql,commons-dbcpの2つの依存も追加的に導入されており、データベースへのアクセス時に使用されます.そうしないと、「com.mysql.jdbc.Driver not found」のようなエラーが表示されます.
 
次に、src/main/resourcesディレクトリの下にプロファイルmybatis-test-dsを新規作成します.xmlは、データソース、MapperのConfigLocationsなどの情報を配置し、具体的な内容は以下の通りです.
<?xml version="1.0" encoding="GBK"?>
 
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
 
    <!--     Spring        ,     DAO       @Component  Bean -->
    <context:component-scan base-package="com.shansun.mybatis.model"></context:component-scan>
 
    <!--         -->
    <bean id="dataSourceImpl" class="org.apache.commons.dbcp.BasicDataSource"
       destroy-method="close">
       <property name="driverClassName">
           <value>com.mysql.jdbc.Driver</value>
       </property>
       <property name="url">
           <value>jdbc:mysql://[     ]:3306/[     ]?characterEncoding=UTF-8</value>
       </property>
       <property name="username">
           <value>[   ]</value>
       </property>
       <property name="password">
           <value>[  ]</value>
       </property>
    </bean>
   
    <!--   MyBatis SessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="dataSource" ref="dataSourceImpl"/>
       <!--     Mapper        -->
       <property name="configLocation" value="classpath:ibatis/sqlMapConfig.xml"/>
    </bean> 
</beans>

  
また、上記のプロファイルで説明するsqlMapConfigをsrc/main/resources/ibatis/パスで新規作成します.xml、このファイルはMapperのパスを構成するために使用され、このような処理の利点はmapperの統一管理を便利にすることです.ファイルの内容は次のとおりです.
<?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>
    <mappers>
       <mapper resource="ibatis/UserMapper.xml" />
    </mappers>
</configuration> 

  
上のファイルを見ると、mappersにもう一つのパスUserMapperが指定されていることがわかりました.xml.そう、これが(動的)SQL文などが書かれているところです.例えば、ユーザ番号(user_id)クエリに基づいてユーザ情報(ユーザ名、性別、年齢など)を取得するクエリ方法を実現する.
 
では、ここで一時停止して、まずUserMapperの内容に関心を持っていません.先にUserテーブル構造を説明すると、後の文の理解に役立ちます.Userテーブルの構造は次のとおりです.
フィールド名
を選択します.
長さ
コメント
Id
Bigint
20
プライマリキー
User_id
Bigint
20
ユーザー番号
User_nick
Varchar
20
ユーザーニックネーム
Sex
Tinyint
1
性別:0-男、1-女
Age
Tinyint
3
年齢
Gmt_create
Date
 
作成時間
Gmt_modified
Date
 
変更時間
 
Userテーブル構造を理解した後,UserDOクラス,すなわちHibernateにおけるいわゆるEntityを作成する.DOを作成する原則は,データテーブルに1つずつ対応することである.多くの場合、DO、DAO、Mapperは、abatorツールを使用してコードを自動的に生成することができます.UserDOというクラスを見てみましょう.
package com.shansun.mybatis.model;
 
import java.util.Date;
 
public class UserDO {
    private Long id;
    private Long userId;
    private String userNick;
    private Byte sex;
    private Byte age;
    private Date gmtCreate;
    private Date gmtModified;
   
......setter/getter......
}

  
ここで、テーブル構造を理解し、Entityクラスを作成した後、上で中断した内容を続け、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.shansun.mybatis.model.UserMapper">
    <resultMap id="ibatorgenerated_BaseResultMap" type="com.shansun.mybatis.model.UserDO">
       <result column="id" property="id" jdbcType="BIGINT" />
       <result column="user_id" property="userId" jdbcType="BIGINT" />
       <result column="user_nick" property="userNick" jdbcType="BIGINT" />
       <result column="sex" property="sex" jdbcType="SMALLINT" />
       <result column="age" property="age" jdbcType="SMALLINT" />
       <result column="gmt_create" property="gmtCreate" jdbcType="TIMESTAMP" />
       <result column="gmt_modified" property="gmtModified" jdbcType="TIMESTAMP" />
    </resultMap>
   
    <sql id="commonColumns"> 
      id, user_id, user_nick, sex, age, gmt_create, gmt_modified
   </sql> 
 
    <select id="queryUserByUID" parameterType="Long"
       resultMap="ibatorgenerated_BaseResultMap">
       select <include refid="commonColumns"/>
       from user where user_id=#{userId} limit 1;
    </select>
</mapper>

  
中のラベルの意味は、私はあまり紹介していません.ネット上のこれらの情報はかごを探して、私が紹介したよりも詳しく分かりやすいです.構成全体でDB操作が完了しました.すなわちuser_に従います.idはユーザ情報を照会し,Userdoを返す.
 
構成の面では,上述したユーザ情報の照会を実現するDAO操作を符号化することができるようになった.UserDAOとその実装クラスは以下のようになります.
package com.shansun.mybatis.model;
 
public interface UserDAO {
    public UserDO queryUserByUID(Long userId);
}

  
package com.shansun.mybatis.model;
 
import org.mybatis.spring.support.SqlSessionDaoSupport;
@Component
public class UserDAOImpl extends SqlSessionDaoSupport implements UserDAO {
 
    @Override
    public UserDO queryUserByUID(Long userId) {
       return (UserDO) getSqlSession().selectOne("com.shansun.mybatis.model.UserMapper.queryUserByUID", userId);
    }
}

  
注意深いあなたは主にUserDAOImplにSqlSessionDaoSupportを継承し、sqlSessionを簡単に取得することを目的としています.
 
さて、上記のDAO操作コード業が完了しましたので、テストの主な方法を書きましょう(筆者は怠け者で、ユニットテストをしていません).
public class Main {
    public static void main(String[] args) {
       long userId = 198805;
       ApplicationContext aContext = new FileSystemXmlApplicationContext("classpath:ibatis-test-ds.xml");
       UserDAO userMapper = aContext.getBean(UserDAO.class);
       UserDO userDO = userMapper.queryUserByUID(userId);
       System.out.println(userDO.toString());
    }
}

  
うん、期待していたデータの記録を調べたかどうかテストしてみようJ
 
ソースコードのダウンロード
 
 
By  Mr.Chris