使用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屬性爲某個environment的id,表明要使用哪一個數據庫
而前面對數據庫進行操作的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這個方法由代理類實現了。