天天看點

第二章 MyBatis入門愛玩酷原創(https://www.iplayers.cn)文章來自(第二章   MyBatis入門)

愛玩酷原創(https://www.iplayers.cn)

文章來自(第二章   MyBatis入門)

一、從 XML 中創造 SqlSessionFactory SqlSessionFactory SqlSessionFactory

加載資源配置

String resource = "org/mybatis/example/Configuration.xml";Reader reader = Resources.getResourceAsReader(resource);sqlMapper = new SqlSessionFactoryBuilder().build(reader);

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>

二、不使用 XML 檔案建立 SqlSessionFactory SqlSessionFactory SqlSessionFactory qlSessionFactor

使用java生成xml配置

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();

TransactionFactory transactionFactory = new JdbcTransactionFactory();

Environment environment =new Environment("development", transactionFactory, dataSource);

Configuration configuration = new Configuration(environment);

configuration.addMapper(BlogMapper.class);

SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(configuration);

三、使用 SqlSessionFactory SqlSessionFactory SqlSessionFactory qlSessionFactory 擷取 SqlSession SqlSession SqlSession

方式一使用

SqlSession session = sqlMapper.openSession();

try {

Blog blog = (Blog) session.select("org.mybatis.example.BlogMapper.selectBlog", 101);

} finally {

session.close();

}

方式二使用接口

SqlSession session = sqlSessionFactory.openSession();

try {

BlogMapper mapper = session.getMapper(BlogMapper.class);

Blog blog = mapper.selectBlog(101);

} finally {

session.close();

}

方式三

使用 JAVA 注解方式來取代。比如,上面的 XML 語句可以替換為:

package org.mybatis.example;

public interface BlogMapper {

@Select("SELECT * FROM blog WHERE id = #{id}")

Blog selectBlog(int id);

}

優點:一、它不依賴字元串,可以減少出錯。二、如果你的 IDE 有代碼自動完成功能,你可以很快導航到你的 SQL 語句(因為已經轉化為方法名)。三、你不再需要設定傳回值類型,因為接口限定了傳回值和參數。

四、探究 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" parameterType="int" resultType="Blog">

select * from Blog where id = #{id}

</select>

</mapper>

五、作用域和生命周期

1.SqlSessionFactoryBuilder

已經建立好了一個 SqlSessionFactory 後就不用再保留它。是最好不要強行保留,因為 XML 的解析資源要用來做其它更重要的事。

2.SqlSessionFactory 

,SqlSessionFactory 就會在整個應用過程中始終存在也,不建議多次建立 SqlSessionFactory,作用域是 Application,單例生命周期。

3.SqlSession

每個線程都有自己的 SqlSession 執行個體,SqlSession 執行個體是不能被共享,也是不是線程安全的,最好使用 Request 作用域或者方法體作用域

4.Mapper 執行個體

Mapper 是一種你建立的用于綁定映射語句的接口。Mapper 接口的執行個體是用 SqlSession 來獲得的。

同樣,從技術上來說,最廣泛的 Mapper 執行個體作用域像 SqlSession 一樣,使用請求作用域。确切地說,

在方法被調用的時候調用 Mapper 執行個體,然後使用後,就自動銷毀掉。不需要使用明确的登出。當一個請求執行正确無誤的時候,像 SqlSession 一樣,

你可以輕而易舉地操控這一切。保持簡單性,保持 Mapper 在方法體作用域内。