1. 程式人生 > 實用技巧 >1、Mybatis官方文件-入門

1、Mybatis官方文件-入門

Mybatis官方文件-入門

入門

第一個Mybatis程式

首先是Mybatis的HelloWorld,要使用mybatis需要進行以下幾步:

1、匯入jar,一般使用pom.xml,即maven進行匯入

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>

2、構建SqlSessionFactory,有兩種方法,一種是通過xml檔案,另一種是使用Java類,主要使用第一種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="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

需要注意的是:

  • 首先這裡的${url}是從properties檔案裡面讀出來的,所以要進行配置

    <properties resource="db.properties"></properties>
    

    其中這個db.properties,也是在resources的目錄下面。

我這裡的一個配置是:

<?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>
    <properties resource="db.properties"></properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${m-driver}"/>
                <property name="url" value="${m-url}"/>
                <property name="username" value="${m-username}"/>
                <property name="password" value="${m-password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/BlogMapper.xml"/>
    </mappers>
</configuration>

目錄結構是:

到這一步我們已經配置好xml檔案了,下一步是建立SqlSessionFactory的示例。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

指的注意的是其中的Resources.get.....這個類和方法是mybatis自帶的。

第三步是從SqlSessionFactory中獲取SqlSession。

try (SqlSession session = sqlSessionFactory.openSession()) {
  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
}

上面這是第一種執行sql的方法,第二種方法是

try (SqlSession session = sqlSessionFactory.openSession()) {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101);
}

涉及的程式碼如下:

  • Blog

    @Data
    @ToString
    public class Blog {
            private String id;
            private String title;
            private String author;
            private Date createTime;
            private int views;
    }
    
  • BlogMapper

    public interface BlogMapper {
        Blog selectBlog(String id);
    }
    
  • BlogMapper.xml

    <?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 namespace="com.lvgj.mapper.BlogMapper">
        <select id="selectBlog" resultType="com.lvgj.pojo.Blog">
        select * from blog where id = #{id}
      </select>
    </mapper>
    
  • 建立資料庫

    CREATE TABLE `blog` (
      `id` varchar(50) NOT NULL COMMENT '部落格id',
      `title` varchar(100) NOT NULL COMMENT '部落格標題',
      `author` varchar(30) NOT NULL COMMENT '部落格作者',
      `create_time` datetime NOT NULL COMMENT '建立時間',
      `views` int(30) NOT NULL COMMENT '瀏覽量'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    應該得到的答案:

探究已對映的SQL語句

檔案:

<?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 namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

名稱空間作用:一個是利用更長的全限定名來將不同的語句隔離開來,同時也實現了你上面見到的介面繫結。長遠來看,只要將名稱空間置於合適的 Java 包名稱空間之中,你的程式碼會變得更加整潔,也有利於你更方便地使用 MyBatis。

最後上面的檔案還可以使用註釋代替:

package org.mybatis.example;
public interface BlogMapper {
  @Select("SELECT * FROM blog WHERE id = #{id}")
  Blog selectBlog(int id);
}

作用域(Scope)和生命週期

SqlSessionFactoryBuilder

作用域:一旦建立了SqlSessionFactory就可以銷燬了,所以應當是區域性方法作用域

SqlSessionFactory

一旦建立,在應用執行期間就應該一直存在,沒有任何理由拋棄它,所以應該是屬於一種單例來看它。SqlSessionFactory 的最佳作用域是應用作用域

SqlSession

每個執行緒都應該有它自己的 SqlSession 例項,最佳的作用域是請求或方法作用域。絕對不能將 SqlSession 例項的引用放在一個類的靜態域,甚至一個類的例項變數也不行。用後一定要關閉

對映器示例:getMapper()...

對映器例項應該在呼叫它們的方法中被獲取,使用完畢之後即可丟棄。