1. 程式人生 > >mybatis學習(一) mybatis入門

mybatis學習(一) mybatis入門

       mybatis(3.3.1version)是一個比較輕量級的O/R Mapping框架,跟Hibernate對比安裝和配置都要簡單許多。將mybatis.jar引入到專案中即可。安裝之後下面的工作就是要配置相關檔案。mybatis配置檔案主要包含兩個部門一個是核心配置檔案也可稱為主配檔案,另一部分的配置就是若干個Mapper配置檔案。

        mybatis主配置檔案,配置項標籤要有序,順序如下

(   properties?, settings?, typeAliases?,  typeHandlers?,  objectFactory?,   objectWrapperFactory?,   plugins?,environments?,databaseIdProvider?,mappers?)

<?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 resource="conf/datasource/jdbc.properties"></properties>
	<settings>
		<!-- 配置開啟日誌 Log4j -->
		<setting name="logImpl" value="LOG4J"/>
		<!-- <setting name="logImpl" value="SLF4J"/> -->
	</settings>
	
	<typeAliases>
		<typeAlias alias="Group" type="org.lian.domain.Group"/>
		<package name="org.lian.domain"/>
	</typeAliases>
	
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
     <dataSource type="POOLED">
        <property name="driver" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
      </dataSource>
    </environment>
  </environments>
  
  <mappers>
    <mapper resource="conf/mybatis/mapper/GroupMapper.xml"/>
    <mapper resource="conf/mybatis/mapper/MusicMapper.xml"/>
  </mappers>
  
</configuration>

        下面是*Mapper.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="org.lian.domain.Music">
	
	<!-- <resultMap id="musicResult" type="Music">
		<id property="groupId" column="group_id"/>
		<result property="groupName" column="group_name"/>
	</resultMap> -->
	
	<!-- <select id="selectGroup" parameterType="String" resultType="Group">
		select group_id ,group_name from t_group  where group_id = #{group_id}
	</select> -->
	<!-- 開啟二級快取 Music domain類 Javabean物件要實現Serializable介面  -->
	<!-- <cache/> -->
	<sql id="musicColumns"> id, name, singer, author, composer, album, duration, style  </sql>
	<select id="selectMusic" parameterType="String" resultType="Music">
		select
		<include refid="musicColumns"></include>
		from t_music
		where id = #{musicId}
	</select>
</mapper>

       domain實體類Music.java,省略setter和getter方法,這裡採用了mybatis註解,來簡化typeAliases配置。

@SuppressWarnings("serial")
@Alias("Music")
public class Music implements Serializable {

	private String id;
	/**
	 * 名稱
	 */
	private String name;
	/**
	 * 歌手
	 */
	private String singer;
	/**
	 * 專輯
	 */
	private String album;
	/**
	 * 歌曲時長
	 */
	private String duration;
	/**
	 * 作詞
	 */
	private String author;
	/**
	 * 作曲
	 */
	private String composer;
	/**
	 * 曲風
	 */
	private String style;

}

        上面工作將jdomain類Javabean物件和mybatis對映上,下面工作如何來獲取SqlSessionFactory和SqlSession物件,這是我們寫dao層要使用到最重要的兩個物件。

public class MyBatisUtil {

	private static final SqlSessionFactory sqlSessionFactory = buildSqlSessionFactory();

	private static SqlSessionFactory buildSqlSessionFactory() {
		String resource = "conf/mybatis/mybatis_core.xml";
		InputStream inputStream;
		try {
			inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
					.build(inputStream);
			return sqlSessionFactory;
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException();
		}
	}

	public static SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}

}

        dao層通過SqlSession物件來訪問資料庫

public class MusicDaoImpl implements MusicDao {

	@Override
	public Music selectMusicById(String musicId) {
		StringBuilder statement = new StringBuilder();
		statement.append(namespace);
		statement.append("selectMusic");
		SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
		try {
			// 這裡使用泛型
			Music music = sqlSession.selectOne(statement.toString(), musicId);
			return music;
		} finally {
			sqlSession.close();
		}
	}
}