总结
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','tom@edu.cn');
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);
}
}
结果