1. 程式人生 > 其它 >Mybatis框架(入門)

Mybatis框架(入門)

技術標籤:javamybatisjavamaven

Mybatis框架(入門)

注:在此使用的是maven建立的Java專案

  1. mybaties的環境搭建
  1. 建立maven工程並匯入座標
  1. 開啟IDEA—>Create New Project —> Maven(在此處可以選擇不勾選Create from archetype)—>寫入必要資訊—>finish
  2. 在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>
  1. 引入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
  1. 建立實體類和dao的介面(注意是介面,而不再需要介面實現類)
  1. 在main/java下建立包路徑:itlearn.zhi.domain
  2. 建立實體類: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方法省略
}
  1. 在itlearn.zhi下建立包dao
  2. 在dao包中建立dao層介面:IUserDao
package itlearn.zhi.dao;

import itlearn.zhi.domain.User;

import java.util.List;

public interface IUserDao {
    //查詢所有User
    public List<User> findAll();
}
  1. 在main/resources下建立Mybatis的主配置檔案:SqlMapConfig.xml
  1. 引入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">
  1. 配置環境
<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>
  1. 建立對映配置檔案:IUserDao.xml
  1. 介面對映配置檔案的路徑必須和對應的介面路徑相同,只不過是在resources包中

在main/resources下建立與對映介面相同包路徑。

注:在resources中不能像java資料夾中建立package一樣,而是要逐層建立資料夾。

  1. 引入介面對映配置檔案的約束
<?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">
  1. 進行介面方法配置
<!-- 必須在<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. 環境搭建的注意事項
1.	mybatis的介面對映配置檔案的位置必須和dao介面的包結構相同
2.	每個dao層介面都對應一個介面對映配置檔案【重點】
3.	介面對映配置檔案的mapper標籤namespace屬性的取值必須是dao介面的全限定類名
4.	對映配置檔案的id屬性取值必須是dao介面的方法名
5.	在開發中不需要再寫dao介面的實現類【重點】
  1. 建立測試類MybatisTest,進行入門學習
  1. 呼叫介面方法的步驟:
1.讀取配置檔案
2.建立SqlSessionFactory工廠
3.使用工廠生產SqlSession物件
4.使用SqlSession建立Dao介面的代理物件
5.使用代理物件執行方法
6.釋放資源
內部思路:通過讀取SqlMapConfig配置檔案,建立一個工廠,通過這個工廠生產一個SqlSession物件,這個物件用於建立dao的代理,實現之後可通過此代理物件呼叫dao的方法。
  1. 程式碼展示:
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. 注意事項:
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.	建立工廠使用的是:構建者模式:將建立物件的具體細節隱藏,使使用者直接呼叫方法即可建立物件。
  1. 註解開發(簡單入門)

把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();