簡介
MyBatis 是支持定製化 SQL、存儲過程以及高級映射的優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以對配置和原生Map使用簡單的 XML 或註解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。
配置與使用
- 引入相應的jar包 mybatis基本包,mysql驅動包,log4j日誌包
- 建立dao層,dao層需要一個接口文件和一個xml文件,接口文件的文件名要和xml文件名一模一樣
- 建立mybatis的配置文件
a.配置數據源 詳情請看xml文件
b.配置dao層的xml文件 - 在dao層寫接口,寫響應的sql調用的方法
- 測試sql語句
mybatis-config.xml
<?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>
<!--相關的設置-->
<settings>
<!--mybatis log4j的日誌 -->
<setting name="logImpl" value="LOG4J" />
</settings>
<!--所有的數據源
default指定默認的數據源 填入數據源的ID
-->
<environments default="mysqlDataSource">
<!--單個數據源-->
<environment id="mysqlDataSource">
<!--事務類型 -->
<transactionManager type="JDBC"></transactionManager>
<!--數據連接池-->
<dataSource type="POOLED">
<!--數據源的4個配置 驅動,地址,用戶名,密碼-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/emp"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 註冊dao層 -->
<mappers>
<!--單個註冊dao分爲 源代碼註冊和資源文件(xml)註冊-->
<mapper class="com.dao.IEmpDao"></mapper>
<!--<mapper resource="com/dao/IEmpDao.xml"></mapper>-->
</mappers>
</configuration>
public interface IEmpDao {
/*查詢所有的Emp*/
public List<Emp> findAllEmp();
//根據ID查詢人員
public Emp findByID(int empno);
}
IEmpDao.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">
<!-- 指定當前配置文件的接口文件 namespace來指定 全路徑-->
<mapper namespace="com.igeek.dao.IEmpDao">
<!--指定我的sql語句
id 代碼接口中方法名
resultType 返回值的類型(泛型)
parameterType 參數類型
-->
<select id="findAllEmp" resultType="com.entity.Emp">
select * from emp
</select>
<select id="findByID" resultType="com.entity.Emp" parameterType="int">
select * from emp where empno = #{empno}
</select>
</mapper>
public class MybatisUtil {
public static SqlSession getSession(){
//1.加載mybatis的配置文件
//mybatis提供了讀取配置文件輸入流的工具類
InputStream is = null;
try {
is = Resources.getResourceAsStream("mybatis-config.xml");
} catch (IOException e) {
e.printStackTrace();
}
//2.SqlSessionFactory mybatis的工廠類
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3.SqlSession mybatis查詢組件(類似於原本JDBC連接)
SqlSession sqlSession =factory.openSession();
return sqlSession;
}
}
public class TestMybatis {
@Test
public void test1() throws IOException {
//1.加載mybatis的配置文件
//mybatis提供了讀取配置文件輸入流的工具類
//InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2.SqlSessionFactory mybatis的工廠類
//SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3.SqlSession mybatis查詢組件(類似於原本JDBC連接)
//SqlSession sqlSession =factory.openSession();
//4.sqlSession動態生成dao層接口的實現類
// a.接口和xml文件一定要同名
// b.接口和xml文件一定要放在同一層目錄
// c.一定要在mybatis的配置文件中註冊這個dao
//通過工具類得到sqlSession
SqlSession sqlSession = MybatisUtil.getSession();
//5.得到實現類
IEmpDao dao = sqlSession.getMapper(IEmpDao.class);
List<Emp> emps = dao.findAllEmp();
System.out.println(emps);
IEmpDao dao = sqlSession.getMapper(IEmpDao.class);
Emp emp = dao.findByID(7654);
System.out.println(emp);
}
}