Mybatis 的使用(集成Spring梅猿、SpringBoot)
昨天在學習項目工程時發(fā)現(xiàn)項目對mybatis用的還是挺多的氓辣,之前也是有用過,覺得還是自己做下筆記記錄一下袱蚓。Mybatis是一個數(shù)據訪問層框架钞啸,和大多數(shù)同類框架一樣,Mybatis節(jié)省了開發(fā)人員使用jdbc底層操作數(shù)據庫很大一部分代碼喇潘,使用mybatis体斩,開發(fā)人員只需要將sql寫在配置文件中,并聲明該sql返回值和java類型的映射即可颖低。當然mybatis還支持針對接口編程絮吵,如果你把mybatis和spring兩者做一個集成,你將發(fā)現(xiàn)你無須為接口聲明實現(xiàn)類就可以操作數(shù)據庫忱屑,而你需要做的函卒,只是在xml文件中做相關聲明告訴mybatis即可奖年,mybatis底層會幫我們處理和數(shù)據庫的鏈接等操作。
下面我不會講解mybatis的相關理論知識,因為官網其實說的很明白了绘沉,而我需要做的,只是從3個應用方式層面展開講解疚颊,這3個層面分別是編程方式使用mybatis,基于注解使用mybatis,spring集成mybatis霜瘪,所有工程均采用maven進行構建。
為了方便演示食店,在此我貼出相關數(shù)據庫腳本和一些公共的組件如(mapper接口):
create database test;CREATE TABLE `test`.`student` ( `id` INT NOT NULL AUTO_INCREMENT, `NAME` VARCHAR(45) NULL, `AGE` INT NULL, `ADDRESS` VARCHAR(45) NULL, PRIMARY KEY (`id`), UNIQUE INDEX `id_UNIQUE` (`id` ASC));
StudentMapper.java接口
package com.wokao666.mappers;import java.util.List;import java.util.Map;import com.wokao666.entity.Student;/** * * The class StudentMapper. * * Description:學生mapper * * @author: huangjiawei * @since: 2018年6月7日 * @version: $Revision$ $Date$ $LastChangedBy$ * */public interface StudentMapper { public Student getById(Map param); public List listStudents();}
實體類Student.java
package com.wokao666.entity;/** * * The class Student. * * Description:學生實體類 * * @author: huangjiawei * @since: 2018年6月7日 * @version: $Revision$ $Date$ $LastChangedBy$ * */public class Student { private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } private String name; private String address; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getAge() { return age; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", address=" + address + ", age=" + age + "]"; } public void setAge(int age) { this.age = age; } public Student(int id, String name, String address, int age) { super(); this.id = id; this.name = name; this.address = address; this.age = age; } public Student() { }}
StudentMapper.xml
select * from Student where id = #{id}; select * from Student;
mybatis-config.xml
一渣淤、使用mybatis編程方式操作數(shù)據庫
在mybatis中赏寇,程序的構建式通過一個叫SqlSessionFactory開始的,SqlSessionFactory可以通過SqlSessionFactoryBuilder進行構建价认,SqlSessionFactoryBuilder支持從一個配置文件流中進行構建嗅定。
pom.xml
4.0.0 mybatisTest mybatisTest 0.0.1-SNAPSHOT jar mybatisTest 1.8 org.mybatis mybatis 3.4.6 mysql mysql-connector-java 8.0.11
Test.java
package com.wokao666.test;import java.io.IOException;import java.io.InputStream;import java.util.Arrays;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.wokao666.entity.Student;import com.wokao666.mappers.StudentMapper;/** * * The class Test. * * Description:編程方式使用mybatis * * @author: huangjiawei * @since: 2018年6月8日 * @version: $Revision$ $Date$ $LastChangedBy$ * */public class Test {public static void main(String[] args) throws IOException { //讀取我們的配置文件 InputStream input = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input); // 打開一個會話session SqlSession session = factory.openSession(); // 構建查詢參數(shù) Map paramMap = new HashMap(); paramMap.put("id", 2); //測試使用id獲取一條記錄 Student stu = session.selectOne("getById", paramMap); System.err.println(stu.toString()); // 測試使用命名空間查詢一條記錄(接口) StudentMapper mapper = session.getMapper(StudentMapper.class); System.err.println(mapper.getById(paramMap)); // 測試獲取一個列表 List stuList = session.selectList("listStudents"); System.err.println(Arrays.toString(stuList.toArray())); }}
程序輸出
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.Fri Jun 08 14:50:11 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.Student [id=2, name=Mike, address=浙江省, age=24]Student [id=2, name=Mike, address=浙江省, age=24][Student [id=1, name=HUANGJIAWEI, address=廣東省, age=23], Student [id=2, name=Mike, address=浙江省, age=24]]
二、基于注解的mybatis
這篇博客只是演示了對于簡單sql的使用用踩,像那些復雜的sql(如關聯(lián)查詢join)等渠退,官網有做相關講解,后續(xù)小編也可能會進行總結脐彩。因為我們都知道碎乃,mybatis推薦我們將sql語句寫到各種mapper.xml中,當我們的業(yè)務非常龐大時惠奸,系統(tǒng)中無疑就會有很多我們新建的各種xml文件梅誓,當然我們更希望xml文件越少越好,因此佛南,mybatis支持開發(fā)者使用基于接口和注解的方式使用mybatis,對于一些簡單的sql而言梗掰,我們沒有必要將它寫在xml文件中,相反我們更加推薦將簡單的sql寫在注解中嗅回,而復雜的sql交給xml文件管理及穗。
下面我將演示兩種基于注解使用mybatis的方式,一種是改寫第一種基于編程的方式绵载,第二種將使用spring-boot來集成mybatis埂陆,當然,第二種方式會更加地實用尘分,更加貼近我們的真實開發(fā)猜惋,或者說跟多開發(fā)者本來就是這么用的,哈哈培愁!
1著摔、基于編程方式的注解使用
在StudentMapper.java接口中增加一個新方法,如下:
package com.wokao666.mappers;import java.util.List;import java.util.Map;import org.apache.ibatis.annotations.Select;import com.wokao666.entity.Student;/** * * The class StudentMapper. * * Description:學生mapper * * @author: huangjiawei * @since: 2018年6月7日 * @version: $Revision$ $Date$ $LastChangedBy$ * */public interface StudentMapper { // 此處將sql寫在接口的注解上定续,簡單粗暴 @Select("select * from Student where id=1") public Student get(); public Student getById(Map param); public List listStudents();}
然后在第一小結的Test.java最后加上這一行代碼即可谍咆。
System.err.println(mapper.get());
2、基于spring-boot使用mybatis
代碼下載地址: github.com/SmallerCode…
工程結構圖如下:
該工程分為三層私股,即controller摹察、service和dao層,即傳統(tǒng)的mvc模型倡鲸。
導入工程之后啟動MybatisDemoApplication.java類供嚎,然后瀏覽器輸入http://localhost:7000/get.json?id=1即可!
三、集成Spring
任何時候克滴,當我們在應用代碼層面對數(shù)據庫進行操作時逼争,我們首先要做的,那么就是配置一個合適的數(shù)據源劝赔,數(shù)據源可以很簡單的配置jdbc的url誓焦、driver、username着帽、password等參數(shù)杂伟,當然更高級的做法是我們可以采用像c3p0、druid這樣的數(shù)據庫連接池來管理我們的數(shù)據源仍翰,在此處赫粥,小編采用阿里巴巴提供的連接池druid。
Spring集成mybatis最關鍵的就是加入一個依賴包歉备,即:
org.mybatis mybatis-spring 1.3.1
最后總結下傅是,mybatis就是一個數(shù)據訪問框架,大體上其特性就是盡可能減少寫底層jdbc鏈接的代碼蕾羊,同時,對于數(shù)據庫實體和java對象之間的映射帽驯,mybatis也幫我們完成了龟再。當然,如果你想深入學習mybatis尼变,我建議你去mybatis官網系統(tǒng)學習利凑,mybatis功能很強大的,如果你的sql中需要進行條件判斷嫌术,mybatis運行你在mapper文件的sql中使用諸如標簽進行判斷哀澈,
如果想學習Java工程化、高性能及分布式度气、深入淺出割按。微服務、Spring磷籍,MyBatis适荣,Netty源碼分析的朋友可以加我的Java進階群:617434785,群里有阿里大牛直播講解技術院领,以及Java大型互聯(lián)網技術的視頻免費分享給大家弛矛。