MyBatis簡介
MyBatis的前身叫iBatis,是一個持久層的框架,是apache下的頂級項目。本是apache的一個開源項目, 2010年這個項目由apache software foundation 遷移到了google code,並且改名爲MyBatis。MyBatis 是支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。
MyBatis 是一個可以自定義SQL、存儲過程和高級映射的持久層框架,MyBatis可以將向 preparedStatement 中的輸入參數自動進行輸入映射,將查詢結果集靈活映射成java對象。(輸出映射)。MyBatis 移除了大部分的JDBC代碼、手工設置參數和結果集重獲。MyBatis 只使用簡單的XML 和註解來配置和映射基本數據類型、Map 接口和POJO 到數據庫記錄。相對Hibernate和Apache OJB等“一站式”ORM解決方案而言,Mybatis 是一種“半自動化”的ORM實現。
需要使用的Jar包:
mybatis-3.4.6.jar(mybatis核心包)
mybatis-spring-1.0.0.jar(與Spring結合包)
Mybatis的運行環境(jar包)下載
mybaits的代碼由github.com管理,地址:https://github.com/mybatis/mybatis-3/releases
下載完成mybatis-3.4.6.zip解壓即可
mybatis-3.4.6.jar:mybatis的核心包
lib:mybatis的依賴包
mybatis-3.4.6.pdf:mybatis使用手冊
MyBatis環境搭建步驟
所需jar包:
log4j-1.2.16.jar
mybatis-3.2.2.jar
mysql-connector-java-5.1.0-bin.jar
項目結構:
1、新建JavaWeb項目
2、導入jar包,WebContent/WEB-INF/lib文件夾下,然後全部選中所有jar包,右鍵build path構建一下即可。
如果你是使用maven構建工程的話,那就對應在pom.xml文件中添加對應依賴即可。
3、項目 → 右鍵 → new → source folder 創建包資源管理器 → 這裏創建的是 resources
4、在 resources 文件夾下創建文件名爲 log4j.properties 的文件 複製如下代碼,保存:
# Global logging configuration
# 開發環境下,日誌級別要設置成DEBUG或者ERROR
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
mybatis默認使用log4j作爲輸出日誌信息。
5、在 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>
<!-- 和spring整合後 environments配置將廢除-->
<!-- 引入 database.properties 文件 -->
<properties resource="database.properties"></properties>
<!-- 配置log4j,配置後後臺會自動對SQL語句輸入 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<environments default="development">
<environment id="development">
<!-- 配置事務管理,此處採用JDBC的事務管理 -->
<transactionManager type="JDBC"/>
<!-- 數據庫連接池,配置數據庫連接信息 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- resource:dao層映射的路徑 -->
<mapper resource="com/yuntu/dao/user/UserMapper.xml"/>
</mappers>
</configuration>
mybatis-config.xml是mybatis核心配置文件,上邊文件的配置內容爲數據源、事務管理。
6、在 resources 文件夾下創建文件名爲 database.properties 的數據庫配置文件
driver=com.mysql.jdbc.Driver
#在和mysql傳遞數據的過程中,使用unicode編碼格式,並且字符集設置爲utf-8
url=jdbc:mysql://127.0.0.1:3306/SMBMS?useUnicode=true&characterEncoding=utf-8
user=root
password=123456
7、創建實體類(POJO)
8、創建Dao層,新建SQL映射文件(UserMapper.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">
<!--
namespace:命名空間,作用爲,對sql進行分類化管理,理解sql隔離,
注意:使用mapper代理方法開發,namespace有特殊作用
-->
<mapper namespace="test">
<!--在映射文件中配置sql-->
<!--
通過select執行數據庫查詢
id:標識映射文件的sql
將sql語句封裝到mappedStatement對象中,所以將id稱爲Statement的id
resultType:指定sql輸出結果的所映射的Java對象類型,select指定的resultType表示將單條記錄映射成的Java對象
-->
<!-- 查詢用戶總數 -->
<select id="count" resultType="int">
select count(1) as count from smbms_user
</select>
</mapper>
9、創建測試類(JUnit Test單元測試)
實現思路:
1.定義mybatis配置文件名字的變量
String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource);
2.創建會話工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
3.通過工廠得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
4. 通過SqlSession操作數據庫
//第一個參數:映射文件中的statement的id,等於namespace+"."+statement的id
//第二個參數:指定和映射文件中所匹配的所有parameterType的類型
//sqlSession.selectOne()的結果是映射文件中所匹配的resultType類型的對象 User user =
sqlSession.selectOne("test.findUserById",1);
System.out.println(user); /
/釋放資源
sqlSession.close();
示例:
package com.yuntu.test;
import static org.junit.jupiter.api.Assertions.*;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.junit.jupiter.api.Test;
class UserMapperTest {
private Logger logger = Logger.getLogger(UserMapperTest.class);
@Test
void test() {
//mybatis配置文件
String resource="mybatis-config.xml";
SqlSession sqlSession = null;
int count=0;//用來接收結果
try {
//1.根據 Resources(mybatis配置文件名) 獲取 mybatis-config.xml 的輸入流
InputStream is = Resources.getResourceAsStream(resource);
//2.創建核心對象 SqlSessionFactory 對象,來完成配置文件的讀取
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3.創建SqlSession對象
sqlSession=factory.openSession();
//4.調用mapper文件對數據進行操作 ps:檢查mapper是否在mybatis-config.xml中進行配置
count = sqlSession.selectOne("com.yuntu.dao.user.UserMapper.count");
logger.debug("當前系統一共有"+count+"用戶");
} catch (IOException e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
}