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()...
對映器例項應該在呼叫它們的方法中被獲取,使用完畢之後即可丟棄。