(七)配置及び用法のMyBatis


半ORMフレームワークと言える構成を紹介します.それはMybatisです.mybatisを紹介する時、私はHibernateとあまり関わりたくありません.ORMの性質がありますが、混乱しないようにはっきりしています.ここでは、Springなどのフレームワークとの統合はともかく.Mybatisをダウンロードして行くことができます
http://code.google.com/p/mybatis/ .この文書のラベルの中には、タイプ別名、マッピング別名などが使用されています.コンテキストの比較を参照して、積極的に試してください.
現在使用されているパッケージ:asm-3.1.jar、cglib-2.2.jar、commons-logging-1.1.1.jar、log 4 j-1.2.3.1.jar、mybatis-3.0.5.jar、mybatis-3.0.5-javadoc.jar、mybatis-3.0.5-sources.jar、slf 4 j-api-1.5.8.jar、slf 4 j-log 4 j 12-1.5.8.jar、mysql-connector-java-5.0.5-bin.jar
(1)使用される永続化Bean:

public class Student {
	private Integer uid;
	private String studentName;
	private List<Score> score;//    。
   //getter and setter  
}

public class Score {
	private Integer sid;
	private String scoreName;
	private Student student;//    
   //getter and setter  
}

(1)mysql.propertiesの構成(具体的なデータソース情報を設定):

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybaties
username=root
password=123

(2)mysql-config.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>
//         :properties,settings,typeAliases,typeHandlers,objectFactory,objectWrapperFactory,plugins,environments,mappers,        ,         !

<properties resource="mysql.properties" />//      ,                  ,      
<!--       ,             ,      -->
<typeAliases>
	<typeAlias type="com.lrl.entity.Student" alias="StudentEntity" />
	<typeAlias type="com.lrl.entity.Score" alias="ScoreEntity" />
</typeAliases>
<!--       -->
<environments default="development">//    id(         develpment)
   <environment id="development">//      id 
	<transactionManager type="JDBC" >
	</transactionManager>
	<!--       -->
	<dataSource type="POOLED">//UNPOOLED          ( ),POOLED              ( ),JNDI( Spring   )
	<property name="driver" value="${driver}" />//$          
		<property name="url" value="${url}" />
		<property name="username" value="${username}" />
		<property name="password" value="${password}" />
	</dataSource>
   </environment>
</environments>
<!--         Mapper -->
<mappers>
	<mapper resource="com/lrl/entity/ScoreMapper.xml" />
</mappers>
</configuration>

(3)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              (           ) -->
<mapper namespace="com.lrl.dao.ScoreDao">
	<!-- Score      -->
	<resultMap type="ScoreEntity" id="scoreResult">
		<id property="sid" column="sid" />
		<result property="scoreName" column="scoreName" />
   <!--    -->
	<association property="student" column="uid" javaType="StudentEntity"
resultMap="studentResult" >//  resultMap="studentResult"          
            <id property="uid" column="uid"/> 
            <result property="studentName" column="studentName"/>
	</association>
        //association      :
        <association property="student" column="uid" javaType="StudentEntity">//       ,   resultMap="studentResult"    
            <id property="uid" column="uid"/> 
            <result property="studentName" column="studentName"/>
	</association>
        //association      :
        <association property="student" column="uid" javaType="StudentEntity"
	 	select="findStudentById" >//   N+1  ,   
        </association>
	</resultMap>
	<!-- Student      -->
	<resultMap type="StudentEntity" id="studentResult">
		<id property="uid" column="uid" />
		<result property="studentName" column="studentName" />
		<collection property="score" ofType="ScoreEntity" >
			<id property="sid" column="sid" />
			<result property="scoreName" column="scoreName" />
		</collection>
	</resultMap>
       //PS:resultMap   <constructor></constructor><discriminator></discriminator>   ,       ,        !
	<!--        ,id      -->//resultType     ,resultMap      
	<select id="findById" parameterType="Integer" resultType="ScoreEntity">
		select
		* from Score s where s.sid=#{sid}//#{}       ,          ,            。                
	</select>

	<select id="findScoreToStudent" parameterType="Integer"
		resultMap="scoreResult">
		select * from Score s left outer join Student u on
		s.uid=u.uid where s.sid=#{sid}//  resultMap,            ,   resultType    ,     .
	</select>
	<select id="findStudentToScore" parameterType="Integer"
		resultMap="studentResult">
		select * from Student u left outer join Score s on
		u.uid=s.uid where u.uid=#{uid}
	</select>

	<update id="updateByEntity" parameterType="ScoreEntity">
		update Score s set s.scoreName=#{scoreName} where s.sid=#{sid}<!--
			  #{}   ScoreEntity   ,      !
		-->
	</update>
//  <insert></insert>,<delete></delete>   。              。
</mapper>

(4)マッパーインタフェース:

public interface ScoreDao {
	public Score findById(Integer sid);
	public Score findScoreToStudent(Integer sid);
	public void updateByEntity(Score score);
	public Student findStudentToScore(Integer uid);
}

//     UserMapper.xml(   )  <select></select><update></update>       。                  @Select、@Insert  :
@Select("select * from Score s where s.sid=#{sid}")
public Score findById(Integer sid);

(5)テスト:

String resource = "mysql-config.xml";
 Reader reader = Resources.getResourceAsReader(resource);//      
 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//  SqlSessionFactory,      
 SqlSession session = sessionFactory.openSession(true);// true         ,     ,     session.commit()    ,         。
 ScoreDao scoreDao = session.getMapper(ScoreDao.class);//ScoreDao          ,      namespace           。
 Score score = scoreDao.findById(1);
 System.out.println(score.getScoreName());//           

mybatisの基本的な構成は以下の通りです.より深いレベルで使用するには、ドキュメントを参照してください.ドキュメントの文章の先頭にあるアドレスはダウンロードされています.何か間違いがあったらメッセージを残して、一緒に勉強してください.ありがとうございます.