一储耐、什么是MyBatis?
MyBatis是一個優(yōu)秀的持久層框架揍诽,它對jdbc的操作數據庫的過程進行封裝籽慢,使開發(fā)者只需要關注 SQL 本身,而不需要花費精力去處理例如注冊驅動、創(chuàng)建connection维咸、創(chuàng)建statement、手動設置參數贱呐、結果集檢索等jdbc繁雜的過程代碼。
Mybatis通過xml或注解的方式將要執(zhí)行的各種statement(statement暑塑、preparedStatemnt)配置起來吼句,并通過java對象和statement中的sql進行映射生成最終執(zhí)行的sql語句锅必,最后由mybatis框架執(zhí)行sql并將結果映射成java對象并返回事格。
二、它相對JDBC的好處
1搞隐、使用傳統方式JDBC訪問數據庫:
(1)使用JDBC訪問數據庫有大量重復代碼(比如注冊驅動驹愚、獲取連接、獲取傳輸器劣纲、釋放資源等)
(2)JDBC自身沒有連接池逢捺,會頻繁的創(chuàng)建連接和關閉連接,效率低
(3)SQL是寫死在程序中癞季,一旦修改SQL劫瞳,需要對類重新編譯倘潜。
(4)對查詢SQL執(zhí)行后返回的ResultSet對象,需要手動處理志于,有時會特別麻煩
2涮因、使用mybatis框架訪問數據庫:
(1)Mybatis對JDBC對了封裝,可以簡化JDBC代碼伺绽。
(2)Mybatis支持連接池(也可以配置其他的連接池)养泡,因此可以提高程序的效率
(3)Mybatis是將SQL配置在mapper文件中,修改SQL只是修改配置文件奈应,類不需要重新編譯澜掩。
(4)對查詢SQL執(zhí)行后返回的ResultSet對象,Mybatis會幫我們處理杖挣,轉換成Java對象肩榕。
三、使用MyBatis過程
1.我們先準備一個數據庫惩妇,創(chuàng)建表和數據(員工表emp)
2.創(chuàng)建工程点把,導入所需jar包、創(chuàng)建測試類
3.導入mysql驅動包
4.引用所有jar包( build path)
5.創(chuàng)建com.aaa.test.TestMybatis測試類屿附,并提供findAll方法(查詢emp表中所有的員工信息)
6.添加sqlMapConfig.xml文件
--1郎逃、在src目錄下,創(chuàng)建sqlMapConfig.xml文件 (MyBatis的核心配置文件)
--2挺份、sqlMapConfig文件頭信息如下:
<?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">
<!-- MyBatis的全局配置文件 -->
<configuration >
</configuration>
7.編寫Emp實體類
--實現Emp類: 提供私有屬性以及對應的getter方法褒翰、setter方法,并重寫toString方法
8.添加EmpMapper.xml文件**
--1匀泊、在src/com/aaa/pojo目錄下优训,創(chuàng)建EmpMapper.xml文件(實體類的映射文件)
--2、EmpMapper.xml文件配置如下:
EmpMapper文件頭信息如下:
<?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一般指定為當前文件的所在包路徑+文件名(將來是接口名)
在程序中通過[ **namespace**+ **id** ]定位到執(zhí)行哪一條SQL語句
-->
<mapper namespace=*""*>
</mapper>
9.實現測試類,并測試
public void findAll() throws IOException{
//1.讀取sqlMapConfig.xml文件各聘,獲取連接數據庫的基本信息
InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
//2.創(chuàng)建SqlSessionFactory工廠對象揣非,
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.通過工廠獲取一個SqlSession對象(用于執(zhí)行SQL及返回結果)
SqlSession session = factory.openSession();
//4.執(zhí)行查詢操作,查詢emp表中的所有記錄
String sqlId = "com.aaa.pojo.EmpMapper.findAll";
List<Emp> emplist = session.selectList( sqlId );
//5.打印list集合
for(Emp emp : emplist){
System.out.println(emp);
}
}
**由于這次使用數據都需要用到上述前三個過程躲因,因此我們可以把其抽取出來**
private SqlSessionFactory factory;
private SqlSession session = null;
//Before 在每次執(zhí)行@Test方法之前都會執(zhí)行
//當前這個方法
@Before
public void init() throws Exception {
//1. 讀取sqlMapConfig.xml文件早敬,獲取配置信息
InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
//2. 通過配置信息,創(chuàng)建一個sqlSessionFactory對象
factory = new SqlSessionFactoryBuilder().build(in);
//3. 通過工廠獲取selSession對象
session = factory.openSession();
}
四大脉、MyBatis入門細節(jié)
1搞监、pojo(Plain Ordinary Java Object): 簡單的Java對象,實際就是普通JavaBean镰矿,也叫做實體類琐驴,用于封裝一類信息。例如:提供Emp類,用于封裝和用戶相關的屬性信息绝淡,比如id員工編號宙刘、name員工姓名、job員工職位牢酵、salary薪資等荐类。再例如:提供Product類,用于封裝和商品相關的屬性信息茁帽,比如id商品編號玉罐、name商品名稱、price單價等潘拨。
而屬性一般是私有的吊输,因此我們還會提供屬性相關的setter和getter方法。
我們一般會把實體類铁追,放在pojo目錄下季蚂,而和實體類相關的mapper文件,也放在相同的目錄下(Maven工程除外)
2琅束、EmpMapper.xml:Emp實體類的映射文件扭屁,和Emp類放在同一目錄下(Maven工程除外)
3、sqlMapConfig.xml:mybatis的全局配置文件涩禀,很多配置信息都會在這里進行配置料滥,比如事務、連接數據庫基本信息艾船,連接池(數據源)等配置
4葵腹、lib及下的jar包:將所需jar包拷貝過來后,還需要引用jar包到工程屿岂,也就是選中jar包践宴,右鍵 --> Build Path --> Add to Build Path即可!
五、錯誤信息
例如:
### Error querying database. Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.aaa.pojo.EmpMapper.findAll'. It's likely that neither a Result Type nor a Result Map was specified.
### The error may exist in com/aaa/pojo/EmpMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select * from emp
修改錯誤:com/aaa/pojo/EmpMapper.xml中的r.findAll的resultType信息出錯爷怀。