一、配置流程
1.流程示意圖(通過XML映射文件實現):
2.流程:
2.1 導入包:
2.1.1 下載包
數據庫驅動包(本文以MySQL為例):https://mvnrepository.com/artifact/mysql/mysql-connector-java
Mybatis框架包:https://mvnrepository.com/artifact/org.mybatis/mybatis
2.1.2 導入程序
將jar包放入程序新建的文件夾
選中jar包,右鍵Build Path->Add to Build Path,結果如圖,jar包已加載進程序內
2.2 添加規則文件
規則文件的位置:①\mybatis-3.4.1\org\apache\ibatis\builder\xml
②打開上面下載的Mybatis框架文件夾,查找dtd
規則文件的Key:官方文檔內Ctrl+F查找public:
選擇Window->Preferences
點擊OK,重復上面的操作,完成添加Mapper規則文件。
2.3.編寫配置文件
2.3.1 創建XML文件
在src文件下創建XML文件,填寫文件名為MybatisConfig.xml,然后Next:
選擇DTD文件,然后Next,
選擇創建配置文件,然后Next->FInish,創建成功。
2.3.2 編寫文件

1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" > 3 <configuration> 4 <!--environments標簽用於配置數據庫連接信息,可以配置多個數據庫的連接信息 5 default屬性:環境集里面可以配置多個數據庫連接環境,但是必須要指定默認的環境,指定的是環境environment標簽的ID 6 --> 7 <environments default="sms"> 8 <!-- environment環境標簽 ,用於配置一個數據庫連接的信息--> 9 <environment id="sms"> 10 <!--指定使用的事務類型 11 JDBC : 使用JDBC的事務處理 12 MANAGER: 不需要事務處理 13 --> 14 <transactionManager type="JDBC"></transactionManager> 15 <!--dataSource標簽:配置數據庫連接信息 16 type:配置數據源的類型 17 JNDI :使用JNDI數據源,就是在web服務器配置數據源,讓程序調用 18 POOLED : 使用默認內置的連接池 19 UNPOOLED:使用直連數據庫,不需要連接池 20 --> 21 <dataSource type="POOLED"> 22 <!-- 連接四要素 --> 23 <property name="driver" value="org.gjt.mm.mysql.Driver"/> 24 <property name="url" value="jdbc:mysql://localhost:3306/sms"/> 25 <property name="username" value="root"/> 26 <property name="password" value="12345"/> 27 </dataSource> 28 </environment> 29 </environments> 30 <!-- 配置指定加載的映射文件 --> 31 <mappers> 32 <mapper class="cn.zwj.mapper.StudentMapper"></mapper> 33 </mappers> 34 </configuration>
2.4 映射文件和映射接口
因為映射文件和映射接口要向對應,所以使用相同命名表示他們的對應關系,在多映射文件中可以很好找到相對應的接口
創建一個映射文件,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="cn.zwj.mapper.StudentMapper">
<!-- #{}類似於?(預處理塊),與POJO中的變量名對應 -->
<insert id="insert">
INSERT INTO tb_student (STUDENT_NAME, STUDENT_PWD, STUDENT_STATUS, CREATE_DATE, STUDENT_ACCOUNT) VALUES (#{studentName}, #{studentPwd}, #{studentStatus}, #{createDate}, #{studentAccount})
</insert>
</mapper>

1 package cn.zwj.mapper; 2 3 import cn.zwj.pojo.Student; 4 5 public interface StudentMapper { 6 int insert(Student student); 7 }
通過XML中的<mapper>標簽的namespace屬性,來綁定對應的接口,<insert>標簽的id屬性值為借口中的方法名
2.5 POJO

1 import java.io.Serializable; 2 import java.util.Date; 3 4 public class Student implements Serializable{ 5 private static final long serialVersionUID = -9125884258413809899L; 6 public Long studentId;//bigint(20) not null auto_increment comment '學生編號', 7 public String studentName;//varchar(50) null default null comment '姓名', 8 public String studentPwd;//varchar(50) null default null comment '密碼', 9 public Integer studentStatus;//int(11) null default null comment '狀態', 10 public Date createDate;//datetime null default null comment '創建時間', 11 public String studentAccount;//varchar(50) null default null comment '學生帳號', 12 public Long getStudentId() { 13 return studentId; 14 } 15 public void setStudentId(Long studentId) { 16 this.studentId = studentId; 17 } 18 public String getStudentName() { 19 return studentName; 20 } 21 public void setStudentName(String studentName) { 22 this.studentName = studentName; 23 } 24 public String getStudentPwd() { 25 return studentPwd; 26 } 27 public void setStudentPwd(String studentPwd) { 28 this.studentPwd = studentPwd; 29 } 30 public Integer getStudentStatus() { 31 return studentStatus; 32 } 33 public void setStudentStatus(Integer studentStatus) { 34 this.studentStatus = studentStatus; 35 } 36 public Date getCreateDate() { 37 return createDate; 38 } 39 public void setCreateDate(Date createDate) { 40 this.createDate = createDate; 41 } 42 public String getStudentAccount() { 43 return studentAccount; 44 } 45 public void setStudentAccount(String studentAccount) { 46 this.studentAccount = studentAccount; 47 } 48 }
與數據庫中的一個表對應的實體類,實現set/get方法
2.6 會話構建工具類

1 import java.io.IOException; 2 import java.io.Reader; 3 4 import org.apache.ibatis.io.Resources; 5 import org.apache.ibatis.session.SqlSession; 6 import org.apache.ibatis.session.SqlSessionFactory; 7 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 8 9 public class MybatisUtils { 10 //對外只開放一個工廠 11 public static final SqlSessionFactory SSF = createSqlSessionFactory(); 12 //聲明一個線程變量 13 public static final ThreadLocal<SqlSession> THREAD_LOCAL = new ThreadLocal<>(); 14 15 //1.獲得會話工廠 16 private static SqlSessionFactory createSqlSessionFactory() { 17 try { 18 //讀取配置文件 19 Reader reader = Resources.getResourceAsReader("MybatisConfig.xml"); 20 //創建會話工廠構建類對象 21 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 22 //構建會話工廠 23 return builder.build(reader); 24 } catch (IOException e) { 25 // TODO Auto-generated catch block 26 e.printStackTrace(); 27 } 28 return null; 29 } 30 31 //2.獲得會話 32 public static SqlSession getSession() { 33 if (THREAD_LOCAL.get() == null) { 34 SqlSession session = SSF.openSession(); 35 THREAD_LOCAL.set(session); 36 } 37 return THREAD_LOCAL.get(); 38 } 39 40 public static void close() { 41 if (THREAD_LOCAL.get() != null) { 42 SqlSession session = THREAD_LOCAL.get(); 43 session.close(); 44 THREAD_LOCAL.remove(); 45 } 46 } 47 }
為什么只對外開放一個工廠?
答:因為如果出現多個數據源,數據庫的連接就可能來自於不同的數據源!導致數據庫連接無法同步,從而導致事務失效!
為什么要聲明一個線程變量?
答:同訪問的一條線程,獲得的會話是相同的,實現線程安全
2.7.測試

1 import org.apache.ibatis.session.SqlSession; 2 import org.junit.Test; 3 4 import cn.zwj.mapper.StudentMapper; 5 import cn.zwj.pojo.Student; 6 import cn.zwj.utils.MybatisUtils; 7 8 public class StudentTest { 9 @Test 10 public void test1() { 11 //獲得會話 12 SqlSession session = MybatisUtils.getSession(); 13 //構建映射接口 的動態對象 14 StudentMapper studentMapper = session.getMapper(StudentMapper.class); 15 Student student = new Student(); 16 student.setStudentName("張三1"); 17 int insert = studentMapper.insert(student); 18 System.out.println(insert); 19 //提交事務 20 session.commit(); 21 MybatisUtils.close(); 22 } 23 }
當控制台輸出一個大於0的數字,表示成功實現運用mybatis框架操作數據庫
2.8 修改為注解實現
2.8.1 流程示意圖:
2.8.2 修改代碼:

1 import org.apache.ibatis.annotations.Insert; 2 import org.apache.ibatis.annotations.Options; 3 4 import cn.zwj.pojo.Student; 5 6 public interface StudentMapper { 7 @Insert("INSERT INTO tb_student (STUDENT_NAME, STUDENT_PWD, STUDENT_STATUS, CREATE_DATE, STUDENT_ACCOUNT) VALUES (#{studentName}, #{studentPwd}, #{studentStatus}, #{createDate}, #{studentAccount})") 8 @Options(useGeneratedKeys = true, keyProperty = "studentId") 9 //@Options:注解聲明生成主鍵 10 int insert(Student student); 11 }

1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" > 3 <configuration> 4 <environments default="sms"> 5 <environment id="sms"> 6 <transactionManager type="JDBC"></transactionManager> 7 <dataSource type="POOLED"> 8 <property name="driver" value="org.gjt.mm.mysql.Driver"/> 9 <property name="url" value="jdbc:mysql://localhost:3306/sms"/> 10 <property name="username" value="root"/> 11 <property name="password" value="12345"/> 12 </dataSource> 13 </environment> 14 </environments> 15 <!-- 修改映射文件為映射接口--> 16 <mappers> 17 <mapper class="cn.zwj.mapper.StudentMapper"></mapper> 18 </mappers> 19 </configuration>
刪除映射文件,然后測試代碼。