Mybatis框架(入門)
阿新 • • 發佈:2021-01-26
Mybatis框架(入門)
注:在此使用的是maven建立的Java專案
- 建立maven工程並匯入座標
- 開啟IDEA—>Create New Project —> Maven(在此處可以選擇不勾選Create from archetype)—>寫入必要資訊—>finish
- 在pom.xml中匯入依賴jar包
<groupId>zhi.itlearn</groupId> <artifactId>java_mybatis</artifactId
> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <!-- 設定打包方式 --> <!-- 匯入依賴jar包。 其中:mybatis、mysql-connector-java是必須的依賴 log4j:日誌和junit測試是非必須的--> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.32</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
- 引入log4j.properties檔案(附:具體配置程式碼。若檔案丟失可直接自建立)
# Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal log4j.rootCategory=debug, CONSOLE, LOGFILE # Set the enterprise logger category to FATAL and its only appender to CONSOLE. log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE # CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n # LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=d:\axis.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
- 建立實體類和dao的介面(注意是介面,而不再需要介面實現類)
- 在main/java下建立包路徑:itlearn.zhi.domain
- 建立實體類:User
package itlearn.zhi.domain; import java.io.Serializable; import java.util.Date; /* * 實體類應該實現Serializable介面 * */ public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex; private String address; //get、set和toString方法省略 }
- 在itlearn.zhi下建立包dao
- 在dao包中建立dao層介面:IUserDao
package itlearn.zhi.dao; import itlearn.zhi.domain.User; import java.util.List; public interface IUserDao { //查詢所有User public List<User> findAll(); }
- 在main/resources下建立Mybatis的主配置檔案:SqlMapConfig.xml
- 引入SqlMapConfig.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> <!-- 配置環境 --> <environments default="mysql"> <!-- 這裡的default屬性值不固定,建議與當前使用的資料庫名稱相同 --> <!-- 配置mysql的環境 --> <environment id="mysql"> <!-- 這裡的id屬性值必須和上面default值相同 --> <!-- 配置事務的型別:JDBC --> <transactionManager type="JDBC"></transactionManager> <!-- 配置資料來源(連線池) --> <dataSource type="POOLED"> <!-- 配置連線事務的四個基本資訊 --> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <!-- 指定對映配置檔案的位置,對映配置檔案指的是每個dao獨立的配置檔案 --> <mappers> <mapper resource="itlearn/zhi/dao/IUserDao.xml"></mapper> </mappers> </configuration>
- 建立對映配置檔案:IUserDao.xml
- 介面對映配置檔案的路徑必須和對應的介面路徑相同,只不過是在resources包中
在main/resources下建立與對映介面相同包路徑。
注:在resources中不能像java資料夾中建立package一樣,而是要逐層建立資料夾。
- 引入介面對映配置檔案的約束
<?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></mapper>中 --> <mapper namespace="itlearn.zhi.dao.IUserDao"> <!-- namespace屬性值必須是dao介面的全限定類名 --> <select id="findAll" resultType="itlearn.zhi.domain.User"><!-- id屬性必須對應介面中的方法 --> SELECT * FROM USER; <!-- 具體的實現語句 --> </select> </mapper>
- 環境搭建的注意事項
1. mybatis的介面對映配置檔案的位置必須和dao介面的包結構相同 2. 每個dao層介面都對應一個介面對映配置檔案【重點】 3. 介面對映配置檔案的mapper標籤namespace屬性的取值必須是dao介面的全限定類名 4. 對映配置檔案的id屬性取值必須是dao介面的方法名 5. 在開發中不需要再寫dao介面的實現類【重點】
- 建立測試類MybatisTest,進行入門學習
- 呼叫介面方法的步驟:
1.讀取配置檔案 2.建立SqlSessionFactory工廠 3.使用工廠生產SqlSession物件 4.使用SqlSession建立Dao介面的代理物件 5.使用代理物件執行方法 6.釋放資源 內部思路:通過讀取SqlMapConfig配置檔案,建立一個工廠,通過這個工廠生產一個SqlSession物件,這個物件用於建立dao的代理,實現之後可通過此代理物件呼叫dao的方法。
- 程式碼展示:
package itlearn.zhi.test; import itlearn.zhi.dao.IUserDao; import itlearn.zhi.domain.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.List; public class MybatisTest { public static void main(String[] args) throws IOException { //1.讀取配置檔案 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.建立SqlSessionFactory工廠 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); //3.使用工廠生產SqlSession物件 SqlSession session = factory.openSession(); //4.使用SqlSession建立Dao介面的代理物件 IUserDao dao = session.getMapper(IUserDao.class); //5.使用代理物件執行方法 List<User> users = dao.findAll(); for (User user : users) { System.out.println(user); } //6.釋放資源 session.close(); in.close(); } }
- 注意事項:
1. 讀取核心配置檔案:使用InputStream流,讀取核心配置檔案的程式碼為: Resources.getResourceAsStream("SqlMapConfig.xml"); 2. 建立SqlSessionFactory物件的時候,SqlSessionFactory是一個介面,不能直接new,只能通過實現類(SqlSessionFactoryBuilder)建立物件來接收。 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in);//傳入輸入流物件 3. 產生動態代理呼叫的方法為:getMapper(傳入dao層介面的位元組碼物件),使用dao層介面接收 IUserDao dao = session.getMapper(IUserDao.class); 4. 建立工廠使用的是:構建者模式:將建立物件的具體細節隱藏,使使用者直接呼叫方法即可建立物件。
- 註解開發(簡單入門)
把IUserDao.xml移除,在dao介面的方法上使用@Select註解,並且指定sql語句。
同時需要在SqlMapConfig.xml中的mapper配置時,使用class屬性指定dao介面的全限定類名
<mappers> <mapper class="itlearn.zhi.dao.IUserDao"></mapper> </mappers> @Select("select * from user;") public List<User> findAll();