数据库准备
create database experiment1;
use experiment1;
create table employee(
id int primary key auto_increment,
name varchar(20) not null,
age int not null,
posotion varchar(20) not null
);
insert into employee(id, name, age, posotion) values(1, '张三', 20, '员工'),
(2, '李四', 18, '员工'), (3, '王五', 35, '经理')
创建pojo实体(封装数据库表属性)
在src/main/Java(包)/com.itheima.pojo(包)/User类
package com.itheima.pojo;
//封装User对象的属性
public class User {
private int id;
private String name;
private int age;
private String posotion;
// 无参数构造函数
//通过添加无参数构造函数,MyBatis 就能够实例化 User 类了
//此无参构造函数虽然看起来没用,但是没有它会一在返回User类时会一直报莫名其妙的错
public User() {
}
// 构造函数
public User(int id, String name, int age, String posotion) {
this.id = id;
this.name = name;
this.age = age;
this.posotion = posotion;
}
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;
}
public String getPosotion() {
return posotion;
}
public void setPosotion(String posotion) {
this.posotion = posotion;
}
}
创建数据库映射配置文件
在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为映射的根节点-->
<!-- mapper为映射的根节点,namespace指定Dao接口的完整类名
mybatis会依据这个接口动态创建一个实现类去实现这个接口,
而这个实现类是一个Mapper对象-->
<mapper namespace="com.itheima.pojo.User">
<!--id ="接口中的方法名"
parameterType="传入的参数类型"
resultType = "返回实体类对象,使用包.类名"-->
<select id="findById" parameterType="int"
resultType="com.itheima.pojo.User">
select * from users where uid = #{id}
</select>
</mapper>
对其中的代码做个解析
<select id="findById" parameterType="int"
resultType="com.itheima.pojo.User">
select * from users where uid = #{id}
<select>
标签:用于定义 SQL 查询。它是 MyBatis XML 映射文件的一部分,用于将数据库查询映射到 Java 方法。id="findById"
:这是特定 SQL 查询的标识符。在 Java 代码中,您将通过引用此标识符来调用此查询。parameterType="int"
:这指定了此查询所需的参数类型。在此情况下,它期望一个整数参数,该参数将作为查询的id
。resultType="com.itheima.pojo.User"
:这指定了查询的结果类型。在此情况下,它是位于com.itheima.pojo
包中的自定义 Java 对象User
。select * from users where uid = #{id}
:这是实际执行的 SQL 查询。它从users
表中选择所有列(``),其中uid
列与提供的参数匹配(#{id}
)。#{id}
语法是 MyBatis 指定参数占位符的方式。当执行查询时,MyBatis 将用参数传递的实际值替换#{id}
。
项目配置文件中引入相关依赖
在根目录的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>org.example</groupId>
<artifactId>experiment1</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>10</maven.compiler.source>
<maven.compiler.target>10</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 引入相关依赖,分别是mysql,junit,mybatis-->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.2</version>
</dependency>
</dependencies>
<!-- 构建部分,它指定了哪些资源应该包含在项目的构建过程中,以及如何处理这些资源-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
对其中的代码做个解析
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
这段代码是一个 Maven 项目中的 pom.xml
文件中的一部分,用于配置项目的构建过程。具体来说,它定义了项目构建时需要包含的资源,并指定了如何处理这些资源。
<build>
: 这是 Maven POM 文件中的<build>
标签,用于配置项目的构建过程。<resources>
: 这是<build>
标签下的<resources>
子标签,用于指定项目构建时需要包含的资源。<resource>
: 这是<resources>
标签下的<resource>
子标签,用于定义一个资源目录。<directory>src/main/java</directory>
: 这行指定了资源目录的路径,即src/main/java
。这意味着在构建项目时,该目录下的资源文件会被包含在内。<includes>
: 这是<resource>
标签下的<includes>
子标签,用于指定哪些文件会被包含在构建中。<include>**/*.properties</include>
: 这行指定了哪些.properties
文件会被包含在构建中。*/*.properties
表示匹配所有子目录中的.properties
文件。<include>**/*.xml</include>
: 这行指定了哪些.xml
文件会被包含在构建中。同样地,*/*.xml
表示匹配所有子目录中的.xml
文件。<filtering>true</filtering>
: 这行指定了是否对资源进行过滤。当设置为true
时,Maven 会在构建过程中处理资源文件,将其中的变量占位符替换为实际值。这通常用于处理配置文件中的变量。
创建数据库连接信息配置文件
在src/main/resources(资源包)dp.properties配置文件中
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&\\
characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=bge
mysql.password=123456
创建Mybatis核心配置文件
在src/main/resources/mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!-- mybatis核心配置文件,用于项目的数据库连接配置-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"<http://mybatis.org/dtd/mybatis-3-config.dtd>">
<configuration>
<!-- 环境配置 -->
<!-- 加载数据库连接信息配置文件 -->
<properties resource="dp.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 数据库连接参数相关配置,dp.properties文件中的内容-->
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<!-- mapping映射文件路径配置-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
<configuration>
: 这是 MyBatis 配置文件的根元素。<properties resource="dp.properties"/>
: 这行配置指定了加载数据库连接信息的配置文件,即dp.properties
。这个文件包含了数据库连接相关的信息,如数据库驱动、URL、用户名和密码等。<environments default="development">
: 这个部分配置了 MyBatis 的环境。在这个例子中,只配置了一个名为development
的环境,并且将其设为默认环境。在development
环境中,配置了数据库连接参数和事务管理器。<dataSource type="POOLED">
: 这行指定了数据源类型为 POOLED,表示使用连接池来管理数据库连接。<property name="driver" value="${mysql.driver}"/>
: 这些行配置了数据库连接参数,如驱动类、URL、用户名和密码。这些参数的值是从加载的dp.properties
文件中获取的,通过${}
语法表示。<mappers>
: 这个部分用于配置 MyBatis 映射器(Mapper)。在这个例子中,只配置了一个映射文件,即mapper/UserMapper.xml
。<mapper resource="mapper/UserMapper.xml"/>
: 这行指定了映射文件的路径,即mapper/UserMapper.xml
。这个文件包含了 SQL 映射语句,用于将数据库操作映射到 Java 方法。
编写测试类
在src/test/java/Test/UserTest.java
package Test;
import com.itheima.pojo.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 org.junit.Test;
import java.io.IOException;
import java.io.Reader;
public class UserTest {
@Test
public void userFindByIdTest() {
String resources = "mybatis-config.xml";
//创建流
Reader reader = null;
try {
//读取mybat1s-config.xm1文件内容到reader对象中
reader = Resources.getResourceAsReader(resources);
} catch (IOException e) {
e.printStackTrace();
}
//初始化MyBatis数据库,创建SqlsessionFactory类的实例
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
//创建SqlSession实例
SqlSession session = sqlMapper.openSession();
//传入参数查询,返回结果
User user = session.selectOne("findById", 1);
//输出结果
System.out.println(user.getUname());
//关闭session
session.close();
}
}