mybatis學習一

mybatis是一個支持普通SQL查詢、存儲過程和高級映射的優秀持久層框架。Mybatis可使用簡單的XML或註解進行配置和原始映射。以將接口和java的pojo映射成數據庫中的記錄

mybatis框架圖

mybatis代碼demo

依賴包html

<dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.42</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>


數據庫建立語句java

CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE T_USER(
    ID INT(11) PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20) DEFAULT NULL,
    SEX CHAR(2) DEFAULT NULL;
    AGE INT(11) DEFAULT NULL 
)

mybatis-config.xmlmysql

<?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">
  <!--  XML 配置文件包含對 MyBatis 系統的核心設置 -->
<configuration>
    <!-- 指定 MyBatis 所用日誌的具體實現 -->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <environments default="mysql">
    <!-- 環境配置,即鏈接的數據庫。 -->
    <environment id="mysql">
    <!--  指定事務管理類型,type="JDBC"指直接簡單使用了JDBC的提交和回滾設置 -->
      <transactionManager type="JDBC"/>
      <!--  dataSource指數據源配置,POOLED是JDBC鏈接對象的數據源鏈接池的實現。 -->
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://192.168.47.151:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
  <!-- mappers告訴了MyBatis去哪裏找持久化類的映射文件 -->
  <mappers>
    <mapper resource="mapper/UserMapper.xml"/>
  </mappers>
</configuration>

UserMapper.xmlsql

<?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="mapper.UserMapper">

<!-- 
    id="save"是惟一的標示符
    parameterType屬性指明插入時使用的參數類型
    useGeneratedKeys="true"表示使用數據庫的自動增加策略
 -->
  <insert id="save" parameterType="com.rookie.bigdata.domain.User" useGeneratedKeys="true">
    INSERT INTO T_USER(name,sex,age)
    VALUES(#{name},#{sex},#{age})
  </insert>
  

</mapper>

Mybatis.java數據庫

public static void main(String[] args) throws IOException {


        // 讀取mybatis-config.xml文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 初始化mybatis,建立SqlSessionFactory類的實例
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(inputStream);
        // 建立Session實例
        SqlSession session = sqlSessionFactory.openSession();
        // 建立User對象
        User user = new User("張三", "男", 26);
        // 插入數據
        session.insert("mapper.UserMapper.save", user);

        // 提交事務
        session.commit();
        // 關閉Session
        session.close();
    }

User.java安全

public class User implements Serializable {
    // 用戶標識
    private Integer id;
    // 用戶姓名
    private String name;
    // 用戶性別
    private String sex;
    // 用戶年齡
    private Integer age;
}

至此保存數據成功
mybatis的執行流程:
1)調用SqlSessionFactoryBuilder對象的Build(inputStream)方法
2)SqlSessionFactoryBuilder會根據輸入流inputStream等信息建立XMLConfigBuilder對象
3)SqlSessionFactoryBuilder調用XMLConfigBuilder對象的parse()方法
4)SqlSessionFactoryBuilder對象解析XML配置文件返回Configuration對象
5)SqlSessionFactoryBuilder根據Configuration對象建立一個DefaultSessionFactory對象
6)SqlSessionFactoryBuilder返回DefaultSessionFactory對象給客戶端,供客戶端使用session

mybatis的核心類

SqlSessionFactoryBuilder:SqlSessionFactoryBuilder 有五個 build() 方法,每一種都容許你從不一樣的資源中建立一個 SqlSessionFactory 實例
SqlSessionFactory:SqlSessionFactory是MyBatis的關鍵對象,它是個單個數據庫映射關係通過編譯後的內存鏡像.SqlSessionFactory對象的實例能夠經過SqlSessionFactoryBuilder對象類得到,而SqlSessionFactoryBuilder則能夠從XML配置文件或一個預先定製的Configuration的實例構建出SqlSessionFactory的實例.每個MyBatis的應用程序都以一個SqlSessionFactory對象的實例爲核心.同時SqlSessionFactory也是線程安全的,SqlSessionFactory一旦被建立,應該在應用執行期間都存在.在應用運行期間不要重複建立屢次,建議使用單例模式.SqlSessionFactory是建立SqlSession的工廠
SqlSession:SqlSession是MyBatis的關鍵對象,是執行持久化操做的獨享,相似於JDBC中的Connection.它是應用程序與持久層之間執行交互操做的一個單線程對象,也是MyBatis執行持久化操做的關鍵對象.SqlSession對象徹底包含以數據庫爲背景的全部執行SQL操做的方法,它的底層封裝了JDBC鏈接,能夠用SqlSession實例來直接執行被映射的SQL語句.每一個線程都應該有它本身的SqlSession實例.SqlSession的實例不能被共享,同時SqlSession也是線程不安全的,絕對不能講SqlSeesion實例的引用放在一個類的靜態字段甚至是實例字段中.也毫不能將SqlSession實例的引用放在任何類型的管理範圍中,好比Servlet當中的HttpSession對象中.使用完SqlSeesion以後關閉Session很重要,應該確保使用finally塊來關閉它.mybatis

mybatis的官方文檔參考 http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

相關文章
相關標籤/搜索