完整源码地址:gitee.com/exciter/myb…
1 创建数据库
可以直接用可视化数据库管理工具创建,如Navicat等。
#创建员工表
CREATE TABLE table_employee(
id INT PRIMARY KEY AUTO_INCREMENT,
last_name VARCHAR(255),
gender CHAR(1),
email VARCHAR(255)
);
#插入数据
INSERT INTO table_employee(last_name,gender,email)
VALUES('井川里予','女','123@qq.com'),
('一条小团团','女','456@qq.com'),
('安妮','女','789@qq.com');
2 创建Java Maven项目并引入依赖
2.1 IDEA创建新的Maven项目
创建路径:File->Project->Maven-Next。
2.2 引入依赖
在pom.xml
中引入所需依赖
<?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>site.exciter</groupId>
<artifactId>MyBatis_HelloWorld</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--添加MyBatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
</dependencies>
</project>
3 创建数据实体
新建包model
,在model
包下创建Employee.java
类:
package site.exciter.mybatis.model;
public class Employee {
private int id;
private String lastName;
private String gender;
private String email;
public int getId() {
return id;
}
public void setId(int 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 + ''' +
'}';
}
}
4 创建接口类
开发中绝大部分项目会使用接口式编程,所以先定义一个接口类,在接口类中定义接口方法去操作数据库。
新建包dao
,在dao
下创建EmployeeMapper.java
,并定一个根据id查数据的方法:
package site.exciter.mybatis.dao;
import org.apache.ibatis.annotations.Mapper;
import site.exciter.mybatis.model.Employee;
@Mapper
public interface EmployeeMapper {
Employee getElementById(int id);
}
5 创建映射文件
sql映射文件中保存了每一个sql语句的映射信息,这就实现了将sql语句从MyBatis中剥离出来自己去实现的需求,方便开发者去优化控制sql语句。
MyBatis会将前边定义的Mapper接口类与xml映射文件绑定,然后生成代理,去实现对数据库的增删改查操作。
在Resources
下新建mapper
文件夹,然后创建employee-mapper.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="site.exciter.mybatis.dao.EmployeeMapper">
<!--
namespace:名称空间,指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
Employee getEmpById(int id);
-->
<select id="getElementById" resultType="site.exciter.mybatis.model.Employee">
select id, last_name as lastName, gender, email
from table_employee
where id = #{id}
</select>
</mapper>
6 创建全局配置文件
全局配置文件主要进行数据库以及映射文件的配置。
在Resources
下新建config
文件夹,然后创建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="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--数据库地址-->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<!--数据库账号-->
<property name="username" value="root"/>
<!--数据库密码-->
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--映射文件路径-->
<mapper resource="mapper/employee-mapper.xml"/>
</mappers>
</configuration>
7 通过MyBatis查询数据库
创建QueryDataTest
类,使用junit的@Test
来写测试方法。
package site.exciter.mybatis;
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.junit.Test;
import site.exciter.mybatis.dao.EmployeeMapper;
import site.exciter.mybatis.model.Employee;
import java.io.IOException;
import java.io.InputStream;
public class QueryDataTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
//注意此处路径不要写错
String resource = "config/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
/**
* 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象
* 2、sql映射文件;配置了每一个sql,以及sql的封装规则等。
* 3、将sql映射文件注册在全局配置文件中
* 4、写代码:
* 1)、根据全局配置文件得到SqlSessionFactory;
* 2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
* 一个sqlSession就是代表和数据库的一次会话,用完关闭
* 3)、使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。
*
* @throws IOException
*/
@Test
public void test() throws IOException {
//1、获取SqlSessionFactory实例
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//2、打开一个会话
SqlSession openSession = sqlSessionFactory.openSession();
try {
// 3、获取接口的实现类对象,会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getElementById(1);
System.out.println(employee);
} finally {
//4、使用完毕后关闭会话
openSession.close();
}
}
}
查看结果: