MyBatis實現

使用MyBatis方便對java中的SQL語句進行管理,能夠幫助我們將SQL語句和Java代碼分離,方便了後期因需求變動而對SQL語句進行修改。下面給大家演示一下MyBatis的實現。

要實現我們需要MyBatis的jar包。下載地址https://github.com/mybatis/mybatis-3/releases

首先在數據庫中建立幾條記錄

創建一個IUserInfo的接口,聲明一個由id獲得name的抽象方法。

public interface IUserInfoDao {
	String getUserName(String id);
}

創建xml文件命名爲user_info.xml,在文件中輸入下列代碼。此時這個xml文件對應user_info表

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 命名空間爲接口的地址 -->
<mapper namespace="com.jd.userinfo.dao.IUserInfoDao">
	<!-- 查詢使用select標籤,id與抽象方法名相同,resultType爲返回值類型 -->
	<select id="getUserName" resultType="java.lang.String">
		select user_name from user_info where id=#{id}		
	</select>
</mapper>

創建xml文件,命名爲mybatis_config.xml,在文件中輸入下列代碼,此時這個xml爲myBatis配置文件

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 配置數據庫 -->
	<environments default="test">
		<environment id="test">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
        <!-- 對mapper進行註冊-->
	<mappers>
		<mapper resource="user_info.xml"/>
	</mappers>
</configuration>

注意environments標籤裏可以有很多environment,標籤裏的default屬性爲某個environmentid,表明要使用哪一個數據庫

而前面對數據庫進行操作的xml文件需要在mappers裏進行註冊才能進行啓用

 

這裏注意兩個XML前面的聲明類型不一樣。一個爲mapper,而另一個爲configuration

創建Test類進行測試如下代碼

public static void main(String[] args) {
		try {
			InputStream inputStream = Resources.getResourceAsStream("mybatis_config.xml");
			SqlSessionFactory sqlSessionFactory = new  SqlSessionFactoryBuilder().build(inputStream);
			SqlSession sqlSession = sqlSessionFactory.openSession();
			IUserInfoDao userInfoDao = sqlSession.getMapper(IUserInfoDao.class);
			System.out.println(userInfoDao.getClass().getName());
			String userName = userInfoDao.getUserName("7eb9deed-ec87-416e-abb3-1a5a2ce819de");
			System.out.println(userName);
			sqlSession.close();			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

上述代碼SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);運行時就會創建sqlSession工廠,依照順序去尋找全局配置文件mybatisconfig,找到mapper文件,然後找到Dao文件,然後給Dao創建代理類及代理對象。

sqlSession對象代指一次數據庫連接。

運行結果:

注意一個問題,我們之前雖然創建了接口但是我們並沒有創建實現接口的實現類。而從輸出可以看出userInfoDao是一個代理類。這說明了getName這個方法由代理類實現了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章