Mybatis框架快速入門-2
阿新 • • 發佈:2022-02-22
2.1 入門案例
MyBatis 開發準備
搭建 MyBatis 開發環境,實現第一個案例
2.1.1 使用 Mybatis
準備 下載 mybatis https://github.com/mybatis/mybatis-3/releases
2.1.2 搭建 MyBatis 開發環境
(1) 建立 mysql 資料庫和表 資料庫名 ssm ;表名 student
(2) 建立 maven 工程
在pom.xml檔案中新增Mybatis依賴
<?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>org.example</groupId> <artifactId>Mybatis-01</artifactId> <version>1.0-SNAPSHOT</version> <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> <!--Mybatis依賴--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <!--Mysql依賴--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency> <!--單元測試--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <!--資源外掛,處理src/main/java目錄中的xml檔案--> <resources> <resource> <directory>src/main/java</directory><!--所在的目錄--> <includes><!--包括目錄下的.properties,.xml 檔案都會掃描到--> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build> </project>
編寫一個與資料庫屬性一致的實體類物件
package org.example.domain; public class Student { private Integer id; private String name; private String email; private Integer age; public Integer getId() { return id; } public String getName() { return name; } public String getEmail() { return email; } public Integer getAge() { return age; } public void setId(Integer id) { this.id = id; } public void setName(String name) { this.name = name; } public void setEmail(String email) { this.email = email; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "學生資訊{" + "id=" + id + ", name='" + name + '\'' + ", email='" + email + '\'' + ", age=" + age + '}'; } }
編寫Dao介面StudentDao
package org.example.Dao; import org.example.domain.Student; import java.util.List; public interface StudentDao { //查詢一個學生 Student selectStudentById(Integer id); }
編寫Dao介面Mapper對映檔案StudentDao.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"> <!-- namespace:必須有值,自定義的唯一字串 推薦使用:dao介面的全限定名 --> <mapper namespace="org.example.Dao.StudentDao"> <!-- <select>: 表示查詢資料, 標籤中必須是 select 語句 id: sql 語句的自定義名稱,推薦使用 dao 介面中方法名稱, 使用名稱表示要執行的 sql 語句 resultType: 告訴mybatis,執行sql語句,把資料賦值給哪個型別的java物件。 resultType的值現在使用的java物件的全限定名稱 --> <select id="selectStudentById" resultType="org.example.domain.Student"> <!--要執行的sql語句--> select * from Student where id = #{StudentId} </select> </mapper> <!-- 1.約束檔案: http://mybatis.org/dtd/mybatis-3-mapper.dtd 約束檔案的作用:定義和限制當前檔案中可以使用的標籤和屬性,以及標籤出現的順序 2.mapper是根標籤 namespace是名稱空間,必須有值,自定義的唯一字串 推薦使用:dao介面的全限定名 作用:參與識別sql語句的作用 3.在mapper裡面可以寫<insert><update><delete><select> <insert>裡面是<insert>語句,表示執行insert操作 <update>裡面是<update>語句 <delete>裡面是<delete>語句 <select>裡面是 <select>語句 -->
建立Mybatis主配置檔案
專案 src/main 下建立 resources 目錄,設定 resources 目錄為 resources root
建立主配置檔案:名稱為 mybatis.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"/> <!--配置資料來源:建立Connection物件--> <dataSource type="POOLED"> <!--driver:驅動內容--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--連結資料庫的url--> <property name="url" value="jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="xxxxx"/> </dataSource> </environment> </environments> <!-- 指定其他mapper檔案的位置 其他mapper檔案的目的是找到其他檔案的sql語句 --> <mappers> <!-- 使用mapper的resource屬性指定的mapper檔案的路徑 這個路徑是從target/classes路徑開啟的 使用注意: resource=“mapper檔案的路徑,使用/分割路徑” 一個mapper resource指定一個mapper檔案 --> <mapper resource="org/example/Dao/StudentDao.xml"/> </mappers> </configuration>
建立測試類MybatisTest
package org.example; 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 org.example.domain.Student; import org.junit.Test; import java.io.IOException; import java.io.InputStream; public class MyTest { @Test public void testSelectStudentById() throws IOException { //呼叫Mybatis某個物件的方法,執行Mapper檔案的sql語句 //Mybatis核心類:SqlSessionFactory //1.定義Mybatis主配置檔案的位置,從類路徑開始的相對路徑 String config = "Mybatis.xml"; //2.讀取主配置檔案,使用Mybatis框架中的Resource類 Resources使用的是import org.apache.ibatis.io.Resource InputStream in = Resources.getResourceAsStream(config); //3.建立SqlSessionFactory物件,使用SqlSessionFactoryBuilder類的build(Inputstream)方法 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //4.獲取SqlSession物件 SqlSession session = factory.openSession(); //5.指定要執行的Sql語句id //sql的id = namespace+“.”+select|update|insert|delete標籤的id屬性值 String sqlId = "org.example.Dao.StudentDao"+"."+"selectStudentById"; //6.通過SqlSession的方法,執行sql語句 Student student = session.selectOne(sqlId); System.out.println("使用Mybatis查詢一個學生:"+student); //7.關閉SqlSession物件 session.close(); } @Test public void testSelectStudentById2() throws IOException { //呼叫Mybatis某個物件的方法,執行Mapper檔案的sql語句 //Mybatis核心類:SqlSessionFactory //1.定義Mybatis主配置檔案的位置,從類路徑開始的相對路徑 String config = "Mybatis.xml"; //2.讀取主配置檔案,使用Mybatis框架中的Resource類 Resources使用的是import org.apache.ibatis.io.Resource InputStream in = Resources.getResourceAsStream(config); //3.建立SqlSessionFactory物件,使用SqlSessionFactoryBuilder類的build(Inputstream)方法 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //4.獲取SqlSession物件 SqlSession session = factory.openSession(); //5.指定要執行的Sql語句id //sql的id = namespace+“.”+select|update|insert|delete標籤的id屬性值 String sqlId = "org.example.Dao.StudentDao"+"."+"selectStudentById"; //6.通過SqlSession的方法,執行sql語句 Student student = session.selectOne(sqlId,1002); System.out.println("使用Mybatis查詢一個學生:"+student); //7.關閉SqlSession物件 session.close(); } }
執行結果
配置日誌功能
mybatis.xml 檔案加入日誌配置,可以在控制檯輸出執行的 sql 語句和引數
在Myybatis.xml檔案中<configuration>標籤中加入
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
再次執行,檢視結果
2.1.3 insert 操作
(1) StudentDao 介面中增加方法
int insertStudent(Student student);
(2) StudentDao.xml 加入 sql 語句
<!--新增操作insert 傳入Mybatis是一個java物件,使用#{屬性名}來獲取屬性的值 屬性值放到#{}佔位符的位置,Mybatis執行此屬性,對應的getXXX() 例如#{id},執行getID(); --> <insert id="insertStudent"> insert into student(id,name,email,age) values (#{id},#{name},#{email},#{age}) </insert>
(3) 增加測試方法
@Test public void testInsert() throws IOException { String config = "Mybatis.xml"; InputStream in = Resources.getResourceAsStream(config); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); SqlSession session = factory.openSession(); //5.指定要執行的Sql語句id //sql的id = namespace+“.”+select|update|insert|delete標籤的id屬性值 String sqlId = "org.example.Dao.StudentDao"+"."+"insertStudent"; //6.通過SqlSession的方法,執行sql語句 Student student = new Student(); student.setId(1003); student.setName("王五"); student.setEmail("[email protected]"); student.setAge(20); int rows = session.insert(sqlId,student); //7.提交事務 session.commit(); System.out.println("增加記錄行數"+rows); //8.關閉SqlSession物件 session.close(); }
檢視結果
注意:不能新增相同的資料,否則會報錯