(一)為什么要用Mybatis?
(1)Mybatis對比JDBC而言,sql(單獨寫在xml的配置文件中)和java編碼分開,功能邊界清晰,一個專注業務,一個專注數據。
(2)Mybatis是持久層框架,避免了大部分JDBC代碼和手動設置參數以及獲取結果集。
(3)Mybatis可以用簡單的XML或注解進行配置和原始映射,將接口和Java對象映射成數據庫中的記錄。(不用像JDBC中實體類屬性一 一對應表列名)
(4)Mybatis是一個半自動的ORM框架。
(二)Mybatis項目構建
1、開發環境準備
(1)單擊SSM2項目名,右鍵new一個module,選擇“Maven Archetype”,命名為mybatis01,并給其指定gav:
(2)在pom.xml中導入相關jar包:
<!--導入MyBatis的HelloWorld相關jar包--><dependencies><!--導入MySQL的驅動包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version></dependency><!--導入MyBatis的jar包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!--junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--log4j--><!--日志記錄:查看sql語句,參數綁定,查詢結果查看--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>
(3)創建ssm數據庫及兩個表
(4)創建實體類
對應employees表在src的main下面的java文件夾下新建com.atguigu.bean文件夾,里面新建一個實體類Employee,對應表的列名新建對應屬性。
2、MyBatis框架的搭建
(1)創建持久層接口
在src的main下面的java文件夾下新建com.atguigu.dao文件夾,在里面新建EmployeeDao接口,里面只寫了一個根據主鍵查詢Employee對象的抽象方法:
public interface EmployeeDao {//根據主鍵查詢Employee對象Employee getById(Integer id);
}
(2)創建接口的實現類
Mybatis通過映射文件替代持久層接口的實現類(將sql語句寫在配置文件內)。
在main的resource文件夾下新建EmployeeDao.xml文件,里面要寫的頭信息去哪里找呢?
去官網鏈接,選擇“入門”,找到“探究已映射的SQL”:
里面的代碼就是我們需要的,復制一份到EmployeeDao.xml中,進行修改:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper標簽就是根節點,有一個namespace的屬性:指定映射文件對應的持久層接口是誰?所以屬性值是接口全類名-->
<mapper namespace="com.atguigu.dao.EmployeeDao"><!--實現該抽象方法:Employee getById(Integer id); --><select id="getById" parameterType="int" resultType="com.atguigu.bean.Employee">select id,last_name lastName,email,gender,salary,dept_id deptId from employees where id=#{id}</select>
</mapper>
3、創建Mybatis的核心配置文件
設置你要連接的數據庫是哪個,加載映射文件。
在main的resource文件夾下新建mybatis-config.xml文件,里面要寫的頭信息去哪里找呢?
去官網鏈接,選擇“入門”,找到“從XML中構建SqlSessionFactory”:
將代碼復制一份到mybatis-config.xml中,進行修改:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--環境:設置數據庫的連接信息:講完Spring之后,不用這個了--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ssm"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!--加載映射文件--><mappers><mapper resource="EmployeeDao.xml"/></mappers>
</configuration>
4、測試
在test文件夾下的java文件夾下新建com.atguigu文件夾,在里面新建MyBatisTest類進行測試。
public class MyBatisTest {//下面的代碼,后面將Spring之后都不用寫,只是暫時對MyBatis做測試@Testpublic void testMyBatis(){try {//1. 加載MyBatis的核心配置文件InputStream input = Resources.getResourceAsStream("mybatis-config.xml");//注意:Resource導的是ibatis那個類里的,別導錯了//2. 創建SqlSessionFactory工廠對象(設計模式之工廠模式)SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input);//3. 從工廠內獲得一個SqlSession對象(看做之前的Connection)SqlSession sqlSession = factory.openSession();//4. 通過SqlSession對象獲取到EmployeeDao的對象// (獲得的肯定是EmployeeDao的實現類對象,MyBatis根據映射文件生成的)EmployeeDao employeeDao = sqlSession.getMapper(EmployeeDao.class);//5. 通過EmployeeDao調用方法即可Employee employee = employeeDao.getById(1);System.out.println("employee="+employee);//6. sqlSession對象需要關閉(按照常理應該在finally中關)sqlSession.close();} catch (IOException e) {throw new RuntimeException(e);}}
}
執行Test,可以看到控制臺輸出了id=1的Employee對象了: