今天就來聊聊這個東西 今天的主角相信你們也看到了 MyBaties 是個什麼東東 它有什麼做用?怎麼用?好很差用今天來講說 .說到MyBaties 就不得不談到JDBC你們可能都知道 JDBC用來操做數據庫 幾乎全部的項目都會跟數據庫進行交互 咱們傳統的JDBC訪問數據主要爲如下幾部java
弊端mysql
這時MyBaties就出現了 MyBaties是基於JDBC的持久化層框架 它對jdbc操做數據庫進行了封裝 咱們不須要花費時間區關注如何區處理註冊驅動、建立鏈接 建立語句對象 以及對象與數據庫關係的轉化之間繁瑣的代碼,只須要關注SQL自己 並且不須要將SQL寫在源碼中 直接寫在XML配置文件中 是否是很神奇呢?git
那麼如何去使用MyBatiesgithub
1.建立java項目sql
2.添加相關聯的依賴包數據庫
3.添加MyBaties的核心配置文件apache
4.建立數據庫 表以及實體類api
5.添加MyBaties映射文件session
6.建立SqlSessionFactory對象 SqlSession對象mybatis
下載MyBaties的地址網上一搜就能夠找到 https://github.com/mybatis/mybatis-3/releases
解壓後會發現裏面有不少jar包咱們能夠選擇部分添加到項目中 只須要這幾個就夠了 如今
log4j-1.2.17.jar 這個jar包是一個java日誌文件夾包
mybatis-3.5.1.jar 使用MyBateis時必用的架包
mysql-connector-java-5.1.47.jar 用來鏈接數據庫
slf4j-api-1.7.26.jar 簡單日記門面
slf4j-log4j12-1.7.26.jar
3.添加MyBaties核心配置文件 這裏主要是 配置數據庫的鏈接信息和 關聯映射的文件
添加日誌組件log4j的配置文件log4j.propertis至classpath根目錄下,用於輸出MyBatis執行過程當中的日誌信息。這裏的
com/newroad/dao/StudentMapper.xml 是StudentMapper.xml文件的路徑不能寫錯了
<!-- 關聯隱射文件 --> <mappers> <mapper resource="com/newroad/dao/StudentMapper.xml"/> </mappers>
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 6 <configuration> 7 <!-- 配置環境信息,即數據源信息 --> 8 <environments default="d1"> 9 <environment id="d1"> 10 <!-- 配置事務管理器 --> 11 <transactionManager type="JDBC" /> 12 <!-- 配置數據源以及數據庫鏈接信息 --> 13 <dataSource type="POOLED"> 14 <property name="driver" value="com.mysql.jdbc.Driver" /> 15 <property name="url" value="jdbc:mysql://localhost:3306/fresh?characterEncoding=UTF-8" /> 16 <property name="username" value="root" /> 17 <property name="password" value="root" /> 18 </dataSource> 19 </environment> 20 </environments> 21 22 <!-- 關聯隱射文件 --> 23 <mappers> 24 <mapper resource="com/newroad/dao/StudentMapper.xml"/> 25 </mappers> 26 27 </configuration> 28
4.建立數據庫、表以及實體類
package com.newroad.entity; public class Student { private Integer id; private String name; private String password; private String email; @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + "]"; } public Student(Integer id, String name, String password, String email) { super(); this.id = id; this.name = name; this.password = password; this.email = email; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
5.建立StudentMapper.xml 的映射文件 MyBatis映射文件是一個XML文件,在這個XML文件中能夠 咱們能夠寫要執行的SQL語句
3 <!-- namespace必須屬性 使用mybaties時經過namespace的值找到 Mapper文件 --> 4 <mapper namespace="com.newroad.dao.StudentMapper"> 這一步很重要 是一個必須的屬性
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <!-- namespace必須屬性 使用mybaties時經過namespace的值找到 Mapper文件 --> 4 <mapper namespace="com.newroad.dao.StudentMapper"> 5 <!-- 添加用戶信息 --> 6 <insert id="save"> 7 insert into student(id,name,password,email) values (#{id},#{name},#{password},#{email}) 8 </insert> 9 10 <!-- 刪除學生信息經過ID --> 11 <delete id="deleteById" > 12 delete from student where id=#{id} 13 4 </delete> 15 16 17 <!-- 修改學生信息 --> 18 <update id="updateById"> 19 update student set name=#{name},password=#{password},email=#{email} where id=#{id} 20 </update> 21 <!-- 查詢學生信息 --> 22 <!-- 根據學號查詢學生信息 --> 23 <!-- resultType | resultMap 這兩個屬性必須二選一 指的是將查詢到的數據轉換成怎樣的pojo對象 --> 24 <select id="selectByid" resultType="com.newroad.entity.Student"> 25 select *from student where id=#{id} 26 27 </select> 28 29 <!-- 查詢全部學生信息 --> 30 <select id="selectAll" resultType="com.newroad.entity.Student"> 31 select *from student 32 33 </select> 34 35 <!--分頁查詢 --> 36 <select id="selectByPages" resultType="com.newroad.entity.Student"> 37 select *from student limit #{pageNum},#{pageSize} 38 </select> 39 40 41 42 </mapper>
6.建立SqlSessionFactory、SqlSession對象
注意: int num = session.insert("com.newroad.dao.StudentMapper.save", stu);
這裏的 com.newroad.dao.StudentMapper 對應着StudentMapper.xml映射文件中的 namespace的值 然後面的save 對應id的名字必定要相同
1 package com.newroad.test; 2 3 import static org.junit.Assert.assertEquals; 4 import java.io.InputStream; 5 import java.util.List; 6 import org.apache.ibatis.session.SqlSession; 7 import org.apache.ibatis.session.SqlSessionFactory; 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 9 import org.junit.After; 10 import org.junit.Before; 11 12 import org.junit.Test; 13 14 import com.newroad.entity.Student; 15 16 public class Test2 { 17 // 獲取鏈接配置對象 18 InputStream in = Test2.class.getResourceAsStream("/mybatis-config.xml"); 19 // 建立sqlsessionFactoryBuilder 20 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 21 SqlSessionFactory factory = builder.build(in); 22 SqlSession session; 23 24 @Before // 在每一個test方法執行以前都會執行這個方法 25 public void init() { 26 session = factory.openSession(); 27 } 28 29 @Test // 測試的方法 30 public void test() { 31 Student stu = new Student(12, "pan", "10086", "123432@qq.com"); 32 int num = session.insert("com.newroad.dao.StudentMapper.save", stu); 33 // 斷言結果 若是結果爲1 成功 34 assertEquals(num, 1); 35 36 } 37 38 @Test 39 public void deleteById() { 40 int num = session.delete("com.newroad.dao.StudentMapper.deleteById", 6); 41 System.out.println("num=" + num); 42 assertEquals(num, 1); 43 } 44 45 @Test 46 public void selectOne() { 47 Student stu = session.selectOne("com.newroad.dao.StudentMapper.selectByid", 4); 48 System.out.println("num=" + stu); 49 assertEquals(stu, 1); 50 } 51 52 @Test 53 public void listStudent() { 54 List<Student> students = session.selectList("com.newroad.dao.StudentMapper.selectAll"); 55 students.forEach(stu -> System.out.println(stu)); 56 57 } 58 59 @After // 在每一個test方法執行後就會執行 60 public void close() { 61 session.commit(); 62 session.close(); 63 } 64 65 }