mybatis學習(一) mybatis入門
阿新 • • 發佈:2019-01-25
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();
}
}
}