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