MyBatis入門(一)---全XML配置方式
阿新 • • 發佈:2019-02-12
一、Mybatis介紹
MyBatis是一個支援普通SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis消除了幾乎所有的JDBC程式碼和引數的手工設定以及對結果集的檢索封裝。MyBatis可以使用簡單的**XML或註解用於配置和原始對映,將介面和Java的POJO(Plain Old Java Objects,普通的Java物件)對映成資料庫中的記錄。
MyBatis配置方式有三種:
- 全xml配置方式
- 介面 + xml 配置方式
- 介面 + 註解方式
二、開發步驟 —全xml配置方式
1、 使用meavn建立專案,並匯入相應的包
<?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>me.mybatis</groupId>
<artifactId >mybatis-study</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<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.4.6</version>
</dependency>
<!-- mysql驅動包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!-- junit測試包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- 日誌檔案管理包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
</dependencies>
</project>
2、建立資料庫和表,針對MySQL資料庫
create database mybatis;
use mybatis;
CREATE TABLE `User` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `User` VALUES (1, 'test', 18);
INSERT INTO `User` VALUES (2, '張三', 25);
3、新增Mybatis的配置檔案
1、在src/main/resources下建立mysql.properties檔案,程式碼如下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
2、在src/main/resources下建立mybatis-config.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>
<properties resource="mysql.properties"/>
<settings>
<!--全域性性設定懶載入。如果設為‘false’,則所有相關聯的都會被初始化載入,預設值為false-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--當設定為‘true’的時候,懶載入的物件可能被任何懶屬性全部載入。否則,每個屬性都按需載入。預設值為true-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<typeAliases>
<!-- 其實就是將bean的替換成一個短的名字-->
<typeAlias type="me.mybatis.entity.User" alias="_User"/>
</typeAliases>
<!--對事務的管理和連線池的配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED"><!--POOLED:使用Mybatis自帶的資料庫連線池來管理資料庫連線-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--mapping檔案路徑配置-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
4、建立資料庫表對應的實體類
在src/java
下新建一個包me.mybatis.entity
,然後在該包下建立一個java
檔案,檔名User
,增加程式碼如下 :
package me.mybatis.entity;
/**
* User 表所對應的實體類
*/
public class User {
//實體類的屬性和表的欄位名稱一一對應
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
實體類的屬性必須和表的欄位一一對應?
5、定義操作user
表的sql
對映檔案UserMapper.xml
在src/main/resources
下建立一個資料夾mapper
,在該資料夾下建立一個UserMapper.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">
<!-- 為這個mapper指定一個唯一的namespace,namespace的值習慣上設定成包名+實體類名/sql對映檔名,這樣就能夠保證namespace的值是唯一的
例如namespace="me.mybatis.entity.User"就是me.mybatis.entity(包名)+User(實體類名),應為mapper在Resources目錄下,
故沒有用SQL對映檔案做namespace
-->
<mapper namespace="me.mybatis.entity.User">
<!-- 在select標籤中編寫查詢的SQL語句, 設定select標籤的id屬性為getUserById,id屬性值必須是唯一的,不能夠重複
使用parameterType屬性指明查詢時使用的引數型別,resultType屬性指明查詢返回的結果集型別
resultType="me.mybatis.entity.User"就表示將查詢結果封裝成一個User類的物件返回
User類就是users表所對應的實體類
-->
<!--
根據id查詢得到一個User物件
-->
<select id="getUserById" parameterType="int" resultType="me.mybatis.entity.User">
SELECT * FROM User WHERE id=#{id}
</select>
</mapper>
6、在MyBatis
配置檔案mybatis-config.xml
中註冊UserMapper.xml
檔案
<!--mapping檔案路徑配置-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
7、編寫測試程式碼:執行定義的select語句
在src/main/java
下建立一個包me.mybatis.test
,在該包下建立UserTest.java
檔案,程式碼如下
package me.mybatis.test;
import me.mybatis.entity.User;
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.Reader;
public class UserTest {
public static void main(String[] args) {
String resource = "mybatis-config.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlSessionFactory.openSession();
User user = session.selectOne("getUserById", 2);
session.commit();
System.out.println(user.getName()); # 張三
} catch (IOException e) {
e.printStackTrace();
}
}
}