-
MyBatis 是一款優秀的持久層框架
-
它支持自定義 SQL、存儲過程以及高級映射
-
MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作
-
MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄。
-
MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。
- 以上內容摘自官網和百度百科
獲得MyBatis
-
maven倉庫
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
數據庫准備
1. 導入基本依賴
使用Maven項目導入基本依賴
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!--這個是用於分步發布程序-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
2. 配置mybatis-configxml文件
在resources文件夾下新建一個mybatis-config.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="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3308/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="mysql"/>
</dataSource>
</environment>
</environments>
<!-- 每一個Mapper.xml都需要Mybatis核心配置文件中注冊 -->
<mappers>
<mapper resource="com/rzp/dao/UserMapper.xml"/>
</mappers>
</configuration>
3.創建sqlSessionFactory工具類及其對象
創建MybatisUtils類,出於開發習慣按以下結構配置。
//創建sqlSessionFactory工具類
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static{
InputStream inputStream = null;
try {
//使用Mybatis,就是利用該工具類獲取sqlSessionFacitory對象
String resource = "mybatis-config.xml";
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//創建對象
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
4.編寫代碼
示例
-
注意事項:要把IDEA的編譯方式改成UTF-8,否則編譯出來的xml文件中文是亂碼,導致程序執行會報錯:1字節的UTF-8序列的字節1無效
-
總覽
-
實體類User
package com.rzp.pojo;
public class User {
private int id;
private String name;
private String pwd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
}
-
Mapper接口(UserMapper)
public interface UserMapper {
List<User> getUserList();
}
-
Mapper對應xml文件(UserMapper.xml)文件
- 注意這個文件名字和路徑必須和我們第一個xml配置文件:mybatis-config.xml中最后一項配置的Mapper路徑一樣。
<?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=綁定一個對應的Dao/Mapper接口-->
<!--namespace名字要與Mapper接口對應-->
<mapper namespace="com.rzp.dao.UserMapper">
<!--
id就是Mapper接口中方法的名字
resultType就是返回的類型,嚴格來說現在返回的是list,這種情況下是返回的泛式
-->
<select id="getUserList" resultType="com.rzp.pojo.User">
select * from mybatis.user
</select>
</mapper>
-
測試方法
- 其實不必要用try catch來包圍,但是官方推薦使用,主要是為了finally關閉資源
測試結果
拓展1
-
java 7開始支持try-with-resource方法,寫法是:
try(在這里放入要new的對象){
}catch(){
}
try catch執行完以后會自動關閉對象的資源,用於IO或者sqlSession都可以,其實就相當於省略了finally的關閉資源
-
就可以改成這樣
try(SqlSession sqlSession = MybatisUtils.getSqlSession()){
//執行SQL
//方式一:getMapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
}catch (Exception e){
e.printStackTrace();
}
-
但是如果是maven項目,pom文件要制定jdk版本,否則會發生編譯錯誤:Try-with-resources are not supported at language level '5’
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
拓展2
除了使用getMapper方法外,還可以使用以下方式調用:
//獲得sqlSession對象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try{
//方式二:
List<User> usersList = sqlSession.selectList("com.rzp.dao.UserMapper.getUserList");
for (User user : usersList) {
System.out.println(user);
}
}catch (Exception e){
e.printStackTrace();
}finally {
//關閉sqlSession
sqlSession.close();
}
-
這是舊版本的方法。
-
顯然,這個方法在編寫的時候必須選擇合適的方法,而且調用的UserMapper的方法時也沒有那么方便。這個方法官方不推薦使用。
這是我的GitHub地址
https://github.com/renzhongpei?tab=repositories