一、簡介
mybatis框架:是sql映射框架
1)sql mapper:sql映射
可以把數據庫表中的一行數據,映射爲一個javat對象。
一行數據可以看做是一個java對象,操作這個對象,就相當於操作表中的數據
2)Data Access Objects(DAOs):數據訪問
對數據庫執行增刪改查。
mybatis提供了哪些功能:
1)提供了創建Connection,Statement,ResultSet的能力,不用開發人員創建這個對象了
2)提供了執行sql語句的能力,不用你執行sql
3)提供了循環sql,把sql的結果轉爲java對象,List集合的能力
4)提供了關閉資源的能力,不用你關閉Connection,Statement,ResultSet
二、知識總結
mybatis是一個映射sql的框架,提供了數據庫的操作能力。增強的JDBC,使用mybatis讓開發人員集中精神寫sql就可以了,不必關心Connection,Statement,ResultSet的創建、銷燬。
2.1、Mybatis使用步驟
1)新建Student表
2)加入maven的mybatis依賴,mysql驅動的依賴
<?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>com.test</groupId> <artifactId>mybatisDemo</artifactId> <version>1.0-SNAPSHOT</version> <name>mybatisDemo</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- mybatis依賴 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> <!--mysql驅動依賴 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> <!-- 所在的目錄 --> <includes><!-- 包括目錄下的.properties,.xml 文件都會掃描到 --> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build> </project>
3)創建實體類,Student -- 保存表中的一行數據
package com.test.domain; public class Student { private Integer userId; private String nickname; private String phone; private String gender; public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "Student{" + "userId=" + userId + ", nickname='" + nickname + '\'' + ", phone='" + phone + '\'' + ", gender='" + gender + '\'' + '}'; } }
4)創建持久層的Dao接口,定義操作數據庫的方法
package com.test.dao; import com.test.domain.Student; import java.util.List; public interface StudentDao { public List<Student> selectStudents(); }
5)創建一個mybatis使用的配置文件
叫做sql映射文件:寫sql語句的。一般一個表一個sql映射文件
這個文件叫xml文件
5.1 寫在接口所在目錄。
5.2 文件名稱和接口保持一致。
<?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="com.test.dao.StudentDao"> <!-- select:表示查詢操作 id:你要執行的sql語句的唯一標識,mybatis會使用這個id的值來找到要執行的sql語句 可以自定義,但要求你使用接口中的方法名稱。 resultType:標識結果類型的,是sql語句執行後得到ResultSet,遍歷這個ResultSet得到java對象的類型。 值寫的是類型的全限定名稱 --> <select id="selectStudents" resultType="com.test.domain.Student"> select userId,nickname,phone,gender from user_table </select> </mapper> <!-- sql映射文件:寫sql語句的,mybatis會執行這些sql 1.指定約束文件 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> mybatis-3-mapper.dtd 是約束文件的名稱,擴展名是dtd的。 2.約束文件的作用:限制、檢查在當前文件中出現的標籤,屬性必須符合mybatis的要求。 3.mapper 是當前文件的根標籤,必須的。 namesapce:叫做命名空間,唯一值,可以是自定義的字符串。 要求你使用dao接口的全限定名稱 4.在當前文件中,可以使用特定的標籤,標識數據庫的特定操作。 <select>:標識查詢 <update>:表示更新數據庫的操作,就是在<update>標籤中,寫的是update sql語句 <insert>:表示插入,寫的是insert 語句 <delete>:標識刪除,執行的是delete語句 -->
6)創建mybatis的主配置文件
一個項目就一個主配置文件
主配置文件提供了數據庫的連接信息和sql映射文件的位置信息。
<?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> <!-- 環境配置,數據庫的連接信息 default:必須和某個enviroment的id值一樣。 --> <environments default="mydev"> <!-- enviroment:一個數據庫的配置,環境 id:一個唯一值,自定義,標識環境的名稱 --> <environment id="mydev"> <!-- transactionManager:mybatis的事務類型 type:JDBC(表示使用jdbc的connection對象的commit,rollback做事務處理) --> <transactionManager type="JDBC"/> <!-- datasource:表示數據源,連接數據庫 type:標識數據源的類型,POOLE表示連接池的 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/BullMane"/> <property name="username" value="root"/> <property name="password" value="root123456"/> </dataSource> </environment> <!--表示線上的數據庫,是項目真實使用的庫--> <environment id="online"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/BullMane"/> <property name="username" value="root"/> <property name="password" value="root123456"/> </dataSource> </environment> </environments> <!-- sql mapper(sql映射文件)的位置 --> <mappers> <!-- 一個mapper標籤指定一個文件的位置 從類路徑開始的路徑信息。target/classes(類路徑) --> <mapper resource="com/test/dao/StudentDao.xml"/> <!-- <mapper resource="org/example/dao/SchoolDao.xml"/>--> </mappers> </configuration> <!-- mybatis的主配置文件:定義了數據庫的配置信息,sql映射文件的位置 1.configureation根標籤 -->
7)應用mybatis在程序中
import com.test.domain.Student; 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 java.io.IOException; import java.io.InputStream; import java.util.List; public class MyApp { public static void main(String[] args) throws IOException { //訪問mybatis讀取student數據 //1.定義mybatis主配置文件的名稱,從類路徑的根開始(target/classes) String config = "mybatis.xml"; //2.讀取這個config表示的文件 InputStream in = Resources.getResourceAsStream(config); //3.創建SelSessionFactoryBuilder對象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); //4.創建SqlSessionFactory對象 SqlSessionFactory factory = builder.build(in); //5.獲取SqlSession對象,從SqlSessionFactory中獲取SqlSession SqlSession sqlSession = factory.openSession(); //6.指定要執行的sql語句的標識。sql映射文件中的namespace+"."+標籤的id值 String sqlId = "com.test.dao.StudentDao" + "." + "selectStudents"; //7.執行sql語句,通過sqlId找到語句 List<Student> studentList = sqlSession.selectList(sqlId); studentList.forEach(stu -> System.out.println(stu)); sqlSession.close(); } }
8)運行效果圖