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