Mybatis框架的簡單運用


一、配置流程

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>
MybatisConfig.xml

 

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>
StudentMapper.xml
1 package cn.zwj.mapper;
2 
3 import cn.zwj.pojo.Student;
4 
5 public interface StudentMapper {
6     int insert(Student student);
7 }
StudentMapper.java

 通過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 }
Student.java

與數據庫中的一個表對應的實體類,實現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 }
MybatisUtils.java

為什么只對外開放一個工廠?

答:因為如果出現多個數據源,數據庫的連接就可能來自於不同的數據源!導致數據庫連接無法同步,從而導致事務失效!

為什么要聲明一個線程變量?

答:同訪問的一條線程,獲得的會話是相同的,實現線程安全

 

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 }
Test.java

當控制台輸出一個大於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 }
StudentMapper.java
 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>
MybatisConfig.xml

刪除映射文件,然后測試代碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM