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