MyBatis入門(IDEA+maven+mybatis+mysql)
前言:寫本文前,博主已經是通過黑馬程式設計師的視訊大致地學過了一遍mybatis了,但無奈當時進度太快,沒來得及好好總結,以致腦海中裡只留下稀薄的印象。因此,為了更好地總結,博主跟著mybatis的官方文件回顧了一下mybatis,並以此博文記錄。
概念:博主看了官方文件的入門部分後特意作了一幅概念圖,能大概反映出mybatis的使用流程
以下是基於maven+IDEA+mysql的mybatis入門開發:
1、建立maven專案
由於本程式只是一個簡單入門,因此是否使用骨架無傷大雅(本文沒有使用)。
附上專案結構圖:
2、pom檔案
因為本文重點是mybatis的使用,因此博主儘量少地用到其他jar包。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Kanject</groupId><artifactId>MyMybatis</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!--mybatis核心包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <!--MySQL的JDBC驅動包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.29</version> </dependency> <!--junit單元測試包--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </project>
本程式用到的jar包有3個:mybatis核心包、mysql核心驅動包、junit單元測試包。
接下來正式開始mybatis的開發~
3、Person、PersonMapper、Person.xml
首先準備Person.java、PersonMapper.java、Person.xml三個檔案。
Person.java
package pojo; public class Person { private int id; private String userName ; private int age ; private String mobilePhone ; public Person(){} public Person(int id, String userName, int age, String mobilePhone) { this.id = id; this.userName = userName; this.age = age; this.mobilePhone = mobilePhone; } public String getUserName() { return userName; } public int getId() { return id; } public void setId(int id) { this.id = id; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getMobilePhone() { return mobilePhone; } public void setMobilePhone(String mobilePhone) { this.mobilePhone = mobilePhone; } @Override public String toString() { return "Person{" + "userName='" + userName + '\'' + ", age=" + age + ", mobilePhone='" + mobilePhone + '\'' + '}'; } }
PersonMapper.java
package mapper; import pojo.Person; public interface PersonMapper { void insertPerson(Person person); Person queryById(int id); void updatePerson(int id); }
Person.xml
<?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"> <mapper namespace="mapper.PersonMapper"> <insert id="insertPerson" parameterType="pojo.Person" > INSERT INTO PERSON(ID,USERNAME,AGE,MOBILEPHONE)VALUES (#{id},#{userName},#{age},#{mobilePhone}) </insert> <select id="queryById" parameterType="int" resultType="pojo.Person"> SELECT * FROM PERSON WHERE ID=#{id} </select> <update id="updatePerson"> UPDATE PERSON SET USERNAME=#{userName},AGE=#{age},MOBILEPHONE=#{mobilePhone} WHERE ID=#{id} </update> </mapper>
然後解釋下三者的區別:
Person.java:對實體的描述,包含了若干個實體的屬性值。
PersonMapper.java:實體在資料庫有哪些行為(博主簡稱為“實體行為”)的介面,對實體行為的大概描述。
Person.xml:實體行為在資料庫操作上的具體實現,包含了 SQL 程式碼和對映定義資訊。
三者的關聯:
Person.xml通過
<mapper namespace="mapper.PersonMapper">
綁定了PersonMapper.java
Person.java是在程式中呼叫mapper方法後封裝返回的結果。
4、mybatis-config.xml
根據概念圖,mybatis-config.xml是mybatis的全域性配置檔案,為SqlSessionFactoryBuilder建立SqlSessionFactory服務。而 SqlSessionFactoryBuilder 除了可以從 XML 配置檔案也可以從一個預先定製的 Configuration 的例項構建出 SqlSessionFactory 的例項(本文采取XML配置檔案的方式)。
<?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"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="123"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/Person.xml"/> </mappers> </configuration>
上面包含了2大塊內容:資料庫連線配置、Person類的mapper對映器
5、測試程式碼
完成上述步驟後,已完成mybatis大體的配置,現在進行程式碼測試。
import mapper.PersonMapper; 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 pojo.Person; import java.io.IOException; import java.io.InputStream; public class Test { @org.junit.Test public void testInsertPerson() throws IOException { //獲取mybatis全域性配置檔案 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //讀取配置檔案的配置資訊,利用SqlSessionFactoryBuilder建立sqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //利用sqlSessionFactory開啟與資料庫的會話 SqlSession sqlSession = sqlSessionFactory.openSession(); try { PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);//通過sqlSession得到mapper Person person = new Person(); person.setAge(3); person.setMobilePhone("33333333"); person.setUserName("333"); personMapper.insertPerson(person);//呼叫mapper的方法 sqlSession.commit();//若是增、刪、改操作,不新增此語句則資料庫不更改 } finally { sqlSession.close(); } } @org.junit.Test public void testQueryById() throws IOException { //獲取mybatis全域性配置檔案 String resouces = "mybatis-config.xml"; InputStream in = Resources.getResourceAsStream(resouces); //讀取配置檔案的配置資訊,利用SqlSessionFactoryBuilder建立sqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); //利用sqlSessionFactory開啟與資料庫的會話 SqlSession sqlSession = sqlSessionFactory.openSession(); try { PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);//通過sqlSession得到mapper Person person = personMapper.queryById(10000);//呼叫mapper的方法 //只讀操作不需要sqlSession.commit() System.out.println(person); } finally { sqlSession.close(); } } }
進行測試,程式正確執行:
小結:本文只是一個很基礎的mybatis入門程式,裡面的配置博主是能少則少地新增。本文展示的也是概念圖中的其中一種實現方式,有興趣的同學參照文件用其他方式實現。希望同學能能夠通過這篇文章對mybatis有個大致的瞭解,有興趣可以自行學習。
後記:本文是博主的第一篇博文,有許多不足,希望大家能多多支援和鼓勵。文章若有錯漏也歡迎大家指正。