·MyBatis前身是iBatis,本是Apache的一個開源的項目mysql
·ORM框架git
·實體類和SQL語句之間創建映射關係github
·基於SQL語法,簡單易學sql
·能瞭解底層封裝過程數據庫
·SQL語句封裝在配置文件中,便於統一管理與維護,下降程序的耦合度編程
·方便程序代碼調試緩存
1.下載mybatis-3.2.2.jar包並導入工程session
2.編寫MyBatis核心配置文件(configuration.xml)mybatis
3.建立實體類-POJOapp
4.DAO層-SQL映射文件(mapper.xml)
5.建立測試類
讀取核心配置文件mybatis-config.xml
建立SqlSessionFactory對象,讀取配置文件
建立SqlSession對象
調用mapper文件進行數據操做
·與JDBC相比,減小了50%以上的代碼量
·最簡單的持久化框架,小巧並簡單易學
·SQL代碼從程序代碼中完全分離,可重用
·提供XML標籤,支持編寫動態SQL
·提供映射標籤,支持對象與數據庫的ORM字段映射
·SQL語句編寫工做量大,對開發人員有必定要求
·數據庫移植性差
·MyBatis的核心對象
SqlSessionFactoryBuilder
SqlSessionFactory
SqlSession
·mybatis-config.xml 系統核心配置文件
·mapper.xml SQL映射文件
·用過即丟,其生命週期只存在於方法體內
·可重用其來建立多個 SqlSessionFactory 實例
·負責構建SqlSessionFactory,並提供多個build方法的重載
·讀取XML文件構造方式:
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
·SqlSessionFactory是每一個MyBatis應用的核心
·做用:建立SqlSession實例
SqlSession session = sqlSessionFactory.openSession(boolean autoCommit);
·做用域:Application
·生命週期與應用的生命週期相同
·單例
存在於整個應用運行時,而且同時只存在一個對象實例
·包含了執行SQL所需的全部方法
·對應一次數據庫會話,會話結束必須關閉
·線程級別,不能共享
SqlSession session = sqlSessionFactory.openSession();
try {
// do work
} finally {
session.close();
}
注意 在SqlSession裏能夠執行屢次SQL語句,但一旦關閉了SqlSession就須要從新建立
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
SqlSession sqlSession = factory.openSession();
·經過SqlSession實例直接運行映射的SQL語句
·基於Mapper接口方式操做數據
·configuration 配置
·properties 能夠配置在Java 屬性配置文件中
·settings 修改 MyBatis 在運行時的行爲方式
·typeAliases 爲 Java 類型命名一個別名(簡稱)
·typeHandlers 類型處理器
·objectFactory 對象工廠
·plugins 插件
·environments 環境
·environment 環境變量
·transactionManager 事務管理器
·dataSource 數據源
·mappers 映射器
注意元素節點的順序!
<?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">
<!--根節點,XMl只能有一個-->
<configuration>
<settings>
<!--二級緩存-->
<setting name="cacheEnabled" value="true"/>
</settings>
<!--一個environments有N個environment-->
<typeAliases>
<package name="cn.bdqn.entity"></package>
</typeAliases>
<environments default="development">
<environment id="development">
<!--
transactionManager:JDBC保證事務的
update
delete
事務分類:JDBC:編程式事務
xxx.beginTransaction()
tx.commit()
tx.rollback()
配置式事務
JDBC|MANAGED
區別
-->
<transactionManager type="JDBC"></transactionManager>
<!--
POOLED:MyBatis內置的鏈接池
c3p0鏈接池
POOLED 、UNPOOLED 、JNDI
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///blog"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- <package name="cn.bdqn.dao"></package>-->
<mapper resource="cn/bdqn/dao/DeptMappr.xml"></mapper>
<mapper resource="cn/bdqn/dao/Ibndao.xml"></mapper>
<mapper resource="cn/bdqn/dao/IEmpDAO.xml"></mapper>
<mapper resource="cn/bdqn/dao/ICategoryDAO.xml"></mapper>
<mapper resource="cn/bdqn/dao/ITeacher.xml"></mapper>
</mappers>
</configuration>
<?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:
命名空間:區分不一樣空間下的同名SQLID
A: findlAll
B: findAll
-->
<mapper namespace="cn.bdqn.dao.IDeptDao">
<cache/>
<!--SQL標籤
id:惟一鎖定到SQL標識
paramenterType:SQL語句的入參 能夠省略
resultType:
增刪除操做:不能 寫
查詢:單個實體的類型
-->
<sql id="aa">
blogId,blogAuthor,blogAddress,blogDel
</sql>
<resultMap id="DeptMap" type="Dept">
<!--<result column="BlogAuthorr" property="blogAuthor"/>-->
</resultMap>
<!--查詢全部-->
<select id="getAll" resultMap="DeptMap">
/*SQL文:SQL語句*/
SELECT <include refid="aa"></include>FROM bloginfo
</select>
</mapper>
https://github.com/qjtlovezch/Y2165/tree/master/_02MyBatis