Mybatis原理和SqlSession

湖南禿頭怪發表於2020-09-25

Mybatis 環境搭建

1.下載mybatis
在github上下載
2.匯入依賴
測試相關的包: junit hamcrest
日誌相關的包:log4j-1.2.16 slf4-api slf4j-log4j12
資料庫相關jar包: mysql-connector
Mybatis先關jar包: mybaits-3.4.5

 <!-- junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    
    <!-- MySql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.32</version>
    </dependency>
    
    <!-- Mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>
    
    <!--日誌包-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

3.建立log4j檔案
(1)首先建立resources包(src\main\resources
(2)在resources包下建立log4j.properties檔案
在這裡插入圖片描述

在這裡插入圖片描述
(3)配置log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

2.Mybatis操作流程

(1)mybatis開發流程
》1 建立SqlSessionFactoryBuilder物件
》2 建立SqlSessionFactory物件
》3 載入SqlMapConfig.xml配置檔案
》4 建立SqlSession物件
》5 執行SqlSession物件執行刪除
》6 列印結果
》7 釋放資源

詳細程式碼

    //建立SqlSessionFactoryBuilder物件
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //建立SqlSessionFactor物件
        InputStream inputStream=TestMybatis01.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);//載入檔案,輸入流
        //建立SqlSession物件
        SqlSession sqlSession=sqlSessionFactory.openSession();
        System.out.println(sqlSession);
        //執行sql語句
       User user=new User();
       user.setId(8);
       user.setName("xjj");
       sqlSession.insert("com.xjj.bean.User.insetUser",user);
        sqlSession.commit();//mybatis的session不會自動提交,必須手動提交

        sqlSession.close();

mybatis核心配置檔案

(1)建立SqlMapConfig.xml檔案
在src\main\resources下,建立方法和log4j相同
在這裡插入圖片描述
(2)配置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">
<!--dtd是對xml配置標籤與屬性的約束-->
<configuration>
    <!--    environments環境  開發環境,生產環境-->
    <environments default="development">
        <environment id="development">
            <!--    使用jdbc的事務管理  -->
            <transactionManager type="JDBC"/>
            <!--    dataSource Mybatis自帶資料來源連線池-->
            <dataSource type="POOLED">
                <!--    四大資訊 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost/user?characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 配置多個對映檔案-->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

(3)對映檔案
在這裡插入圖片描述
在src\main\resources下建立UserMapper.xml檔案
建立方法和上述兩個檔案相同

(4)配置對映檔案

<?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">
<!-- map的約束檔案-->
<!-- namespace 名稱空間 防止id衝突找不到正確的id-->
<!-- id Mybatis是將sql語句寫在xml檔案中,以後session根據namesapce.id 合在一起獲取sql-->
<!-- 在jdbc中,sql語句使用?作佔位符,但在mybatis #{id}-->
<mapper namespace="com.xjj.bean.User">
    <delete id="deleteById" parameterType="int" >
        delete from user where id = #{id}
    </delete>
    <insert id="insetUser" >
        insert into user (id,name) values (#{id},#{name})
    </insert>

    <select id="findUserById"  resultType="com.xjj.bean.User" >
        select * from user  where name = #{name}
    </select>
</mapper>

MySessionUtil

1.靜態程式碼快
2.getSession()方法
建立MySessionUtil.java
src\main\com\xjj\util\MySessionUtil.java

package com.xjj.util;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class MysqlSessionUtil {
        private static SqlSessionFactory sessionFactory;
        //static 靜態程式碼只會執行一次
    static{
        //   建立SqLSessionFactoryBuilder物件
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
        //建立SqlSessionFactory物件
            InputStream inputStream =MysqlSessionUtil.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
            sessionFactory=sqlSessionFactoryBuilder.build(inputStream);//參1 輸入流,載入SqlMapConfig.xml檔案
        }
    public static SqlSession getSession(){
        //建立SqlSession物件
    SqlSession sqlSession=sessionFactory.openSession();
    return sqlSession;
    }
}

建立TestMybatis02()檔案
src\main\test\java\com\xjj\pack01\TestMybatis02

package com.xjj.pack01;

import com.xjj.util.MysqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class TestMybatis02 {
@Test
        public void  test01(){
    //建立Sqlsession物件,呼叫getSession方法
    SqlSession sqlSession = MysqlSessionUtil.getSession();
    System.out.println(sqlSession);
    sqlSession.delete("com.xjj.bean.User.deleteById",1);//刪除id編號為1的user的所有資訊
    sqlSession.commit();//mybatis不會自動提交session
    sqlSession.close();//釋放資源
    }
}


相關文章