總結
1.接口式編程,不需要實現類
原生: DAO ===> DAOImpl
mybatis:Mapper ===>XXMapper.xml
2. SqlSession代表和數據庫的一次會話,用完必須關閉
3. SqlSession和Connection一樣是非線程安全的,每次使用都應該獲取新的對象那個
4. mapper接口沒有實現類,但是mybatis會爲這個接口生成一個代理對象(將接口與xml綁定)
5. 兩個重要的配製文件
mybatis的全局配製文件,包含數據庫連接池,事務管理器等
sql映射文件,保存了每一個sql語句的映射信息
1. 創建數據庫,並添加一條記錄
CREATE TABLE tbl_employee(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
last_name VARCHAR(255),
gender CHAR(1),
email VARCHAR(255)
);
INSERT INTO tbl_employee(last_name, gender,email) VALUES('tom','0','[email protected]');
SELECT * FROM tbl_employee;`id``gender``email``tbl_employee`
結果:
2.創建Maven工程
2.1添加依賴
<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>njupt</groupId>
<artifactId>MyBatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
</dependencies>
</project>
2.2新建一個對應數據庫的javaBean類
包名:com.njupt.bean
類名:Employee
package com.njupt.bean;
public class Employee {
private Integer id;
private String lastName;
private String gender;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", gender=" + gender + ", email=" + email + "]";
}
}
2.3在resources目錄下新建一個mybatis配製文件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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 將寫好的sql映射文件註冊到全局配置文件中 -->
<mappers>
<mapper resource="employeeMapper.xml"/>
</mappers>
</configuration>
2.4 新建一個接口,並定義部分函數,這些函數對應於sql語句的功能
package com.njupt.Mapper;
import com.njupt.bean.Employee;
public interface EmployeeMapper {
public Employee getEmployeeById(Integer id);
}
2.5 在resources目錄下新建一個sql映射文件employeeMapper.xml
namespace:接口的全類名
id:該sql語句的標識符,對應於接口的方法名
resultType:返回值類型,用於判斷,查詢得到的結果封裝成哪個bean的對象
<?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:接口的全類名
id:該sql語句的標識符,對應於接口的方法名
resultType:返回值類型,用於判斷,查詢得到的結果封裝成哪個bean的對象
-->
<mapper namespace="com.njupt.Mapper.EmployeeMapper">
<select id="getEmployeeById" resultType="com.njupt.bean.Employee">
select id,last_name AS lastName, gender, email from tbl_employee where id=#{id}
</select>
</mapper>
2.6 測試方法
@Test
public void test2() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//1.獲取sqlSessionFactory對象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.獲取SqlSession對象那個
try (SqlSession session = sqlSessionFactory.openSession()) {
//3.獲取接口的實現類對象
//會爲接口自動創建一個代理對象,代理對象執行對應的方法
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
Employee employ = mapper.getEmployeeById(1);
System.out.println(employ);
}
}
結果