摘要:一定義是一款優(yōu)秀的持久層框架,它支持定制化存儲過程以及高級映射。別名與類中的屬性名保持一致。接口的名字建議為,與文件保持一致編寫文件,名字與接口名保持一致。
一、定義
MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄
官網(wǎng):http://www.mybatis.org/
二、搭建mybatis環(huán)境 1、導(dǎo)入mybatis依賴包
cglib-2.2.2.jar
cgilb代理,用來自動創(chuàng)建類、對象
commons-logging-1.1.1.jar
通用日志包,主要用于打印日志信息
javassist-3.17.1-GA.jar
字節(jié)碼包,主要是操作類、對象的屬性、方法(反射)
mybatis-3.2.7.jar
mybatis核心功能包
mysql-connector-java-5.1.30.jar
數(shù)據(jù)庫連接包,連接數(shù)據(jù)庫
2、便攜mybatis的主配置文件。主配置文件內(nèi)容包括:配置連接數(shù)據(jù)庫的參數(shù):驅(qū)動、url、賬號、密碼
主配置文件的作用:管理連接
主配置文件示例:
3、準(zhǔn)備數(shù)據(jù)庫和數(shù)據(jù) 4、編寫POJO類
要求:類名最好與表名一致,屬性名最好與字段名一致
如果屬性名與表中的字段名不一致,會造成查出來的結(jié)果無法被封裝成對應(yīng)的類,這個時候可以通過在sql語句中,給查詢的字段取別名解決該問題。別名與類中的屬性名保持一致。
作用
編寫sql操作數(shù)據(jù)庫
mapper文件的取名方式:POJO類名+Mapper.xml
6、在主配置文件中加載mapper文件作用:讓mapper的配置生效
二、mybatis:自動映射的原理1、執(zhí)行sql語句查詢除結(jié)果即以及字段的名字
2、根據(jù)resultType的類型調(diào)用對應(yīng)POJO類的無參構(gòu)造方法創(chuàng)建對象
2.1 獲取對應(yīng)的pojo類的字節(jié)碼對象
2.2 根據(jù)字節(jié)碼對象調(diào)用newInstance()->無參構(gòu)造創(chuàng)建對象
3、根據(jù)結(jié)果集中字段的名字,獲取到setter方法,然后利用setter方法給對應(yīng)的屬性賦值
例如如果結(jié)果集中字段名叫做uid,那么mybatis會根據(jù)這個名字自動拼接出setter方法的名字,然后根據(jù)方法名找到對應(yīng)的方法,再通過setter方法進(jìn)行賦值。
==示例:==
xml文件
insert into person values(#{id},#{name},#{age}) delete from person where id = #{id} update person set name=#{name} where id=#{id}
測試函數(shù)‘
package com.woniu.test; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; 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 com.woniu.pojo.Person; import com.woniu.util.Page; /* * mybatis 中的核心API類 * SqlSessionFactory:用于創(chuàng)建SqlSession對象 * SqlSession:用來操作數(shù)據(jù)庫的對象 * * mybatis 可以根據(jù)mapper文件中的配置將查詢出來的數(shù)據(jù)自動映射 * * $:用于獲取靜態(tài)資源 * #:用于sql語句中獲取動態(tài)資源 * */ public class Test1 { public static void main(String[] args) throws IOException { //1、加載主配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //2、創(chuàng)建工廠 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); //3、創(chuàng)建SqlSession SqlSession session = factory.openSession(); //查詢所有 List三、接口映射persons = session.selectList("abc.selectAll"); System.out.println(persons); //以ID查詢 Object obj = session.selectOne("abc.selectById", 1); System.out.println(obj); //以名字查詢 obj = session.selectOne("abc.selectByName", "zhangsan"); System.out.println(obj); //mybatis只支持單參傳遞,如果想要傳遞多個參數(shù),那么需要想辦法通過一個參數(shù)來傳遞多個數(shù)據(jù) //常見方式有兩種:map、pojo類 //通過map方式 Map map = new HashMap<>(); map.put("aaa", "1"); map.put("bbb","zhangsan"); obj = session.selectOne("abc.selectByIdAndName", map); System.out.println(obj); //通過pojo類方式 Person person = new Person(); person.setId(1); person.setName("zhangsan"); obj = session.selectOne("abc.selectByIdAndName2", person); System.out.println(obj); //插入數(shù)據(jù) person = new Person(6,"wangsiting",22); int row = session.insert("abc.addPerson",person); //mybatis默認(rèn)將自動提交關(guān)閉了,在進(jìn)行增刪改時需要手動提交 session.commit(); System.out.println(row); //刪除數(shù)據(jù) row = session.delete("abc.deletePersonById", 6); session.commit(); System.out.println(row);//為什么刪除一行數(shù)據(jù)時row為2,沒有刪除時,row為1? //模糊查詢 //like:模糊查詢時通配符應(yīng)該在Java程序中拼接好,傳入sql語句中 persons = session.selectList("abc.selectLike","%a%"); System.out.println(persons); //分頁查詢 Page page = new Page<>(); page.setIndex(0); page.setCount(1); page.setData(session.selectList("abc.selectPage", page)); System.out.println(page); //5、關(guān)閉 session.close(); } }
編寫接口,編寫操作數(shù)據(jù)庫的方法。接口的名字建議為POJO+Mapper,與mapper文件保持一致
編寫mapper文件,名字與接口名保持一致。mapper文件需要和接口在同一個包下面
mapper 文件中的namespace值必須是接口的全路徑(包名+接口名)
在mapper文件中編寫與接口中方法對應(yīng)SQL語句,要求SQL的id與方法名保持一致。可以不用指定參數(shù)類型
在mybatis主配置文件中加載接口
在調(diào)用sql語句的地方通過sqlsession對象獲取mapper對象
==示例==
接口
package com.woniu.mapper; import java.util.List; import com.woniu.pojo.Teacher; public interface TeacherMapper { public Listall(); public Teacher findById(int tid); public Teacher findByIdAndName(int tid,String tname); public Teacher findByIdAndName2(Teacher teacher); }
xml文件
測試類
package com.woniu.test; 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 com.woniu.mapper.TeacherMapper; import com.woniu.pojo.Teacher; public class Test3 { public static void main(String[] args) throws IOException { //1、加載主配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //2、創(chuàng)建工廠 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); //3、創(chuàng)建SqlSession SqlSession session = factory.openSession(); TeacherMapper mapper = session.getMapper(TeacherMapper.class); System.out.println(mapper.all()); System.out.println(mapper.findById(2)); System.out.println(mapper.findByIdAndName(1, "lisi")); System.out.println(mapper.findByIdAndName2(new Teacher(1,"lisi"))); //5、關(guān)閉 session.close(); } }四、在mybatis中獲取參數(shù)值方式
如果參數(shù)是基本類型、包裝類、String類型,可以通過任意變量名獲取
如果參數(shù)是map類型,應(yīng)該使用key獲取參數(shù)
如果參數(shù)是自定義類型,應(yīng)該使用類的屬性名獲取參數(shù)
如果采用接口映射實現(xiàn)多參傳遞的話,在獲取參數(shù)時應(yīng)該采用{0,1,param1,param2}的方式獲取參數(shù)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/75230.html
摘要:一使用快速創(chuàng)建項目關(guān)于如何快速創(chuàng)建項目,這個可以參考下面這篇文章項目管理工具基礎(chǔ)入門系列一二快速配置依賴包打開文件,快速配置包,配置代碼如下依賴包數(shù)據(jù)庫驅(qū)動依賴包測試依賴包三快速創(chuàng)建實體類創(chuàng)建類,代碼如下四 一、使用 IDEA 快速創(chuàng)建 Maven 項目 關(guān)于如何快速創(chuàng)建 Maven 項目,這個可以參考下面這篇文章: Maven 項目管理工具基礎(chǔ)入門系列(一) 二、快速配置 MyBat...
摘要:核心流程三大階段縷清思路也就是核心流程之后,我們就開始寫代碼了,詳見下節(jié) Mybatis快速入門 步驟: 1.加入mybatis的依賴 2.添加Mybatis的配置文件 3.場景介紹 4.編寫實體類丶mapper接口及mapper.xml文件 5.編寫測試代碼 demo: public class TUser { private Integer id; priva...
摘要:從使用到原理學(xué)習(xí)線程池關(guān)于線程池的使用,及原理分析分析角度新穎面向切面編程的基本用法基于注解的實現(xiàn)在軟件開發(fā)中,分散于應(yīng)用中多出的功能被稱為橫切關(guān)注點如事務(wù)安全緩存等。 Java 程序媛手把手教你設(shè)計模式中的撩妹神技 -- 上篇 遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經(jīng)風(fēng)雨慢慢變老,回首走過的點點滴滴,依然清楚的記得當(dāng)初愛情萌芽的模樣…… Java 進(jìn)階面試問題列表 -...
摘要:添加依賴新建項目選擇三個依賴對于已存在的項目可以在加入,將會幫你自動配置好配置基本信息然后在下添加基本配置數(shù)據(jù)庫連接地址數(shù)據(jù)庫賬號數(shù)據(jù)庫密碼數(shù)據(jù)庫驅(qū)動創(chuàng)建實體創(chuàng)建一個實體,包含姓名年齡屬性創(chuàng)建數(shù)據(jù)訪問接口創(chuàng)建一個 添加依賴 新建項目選擇web,MyBatis,MySQL三個依賴 showImg(https://segmentfault.com/img/bV2l1L?w=1684&h=1...
閱讀 2682·2021-09-06 15:02
閱讀 3368·2021-09-02 10:18
閱讀 2925·2019-08-30 15:44
閱讀 826·2019-08-30 15:43
閱讀 2040·2019-08-30 14:08
閱讀 2849·2019-08-30 13:16
閱讀 1501·2019-08-26 13:52
閱讀 1010·2019-08-26 12:21