1、MyBatis 使用基本流程
1、在数据库中的创建表
2、创建 POJO 类
3、编写映射文件
4、编写核心配置文件
5、编写 CURD 业务代码
- 1、在数据库中的创建表(一张表)
CREATE TABLE xxx(
id INT NOT NULL,
name VARCHAR(3) NOT NULL
);
- 2、创建 POJO 类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
* 当前,数据库中字段名 与 类中属性名 需保持一致
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Xxx {
private Integer id;
private String name;
}
- 3、编写映射文件
在src/main/resources
下创建一个 XML 文件,假设命名为xxxMapper.xml
(src/main/resources/xxxMapper.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">
<!-- 对于任何映射文件而言,以上的 XML 文件约束是固定的 -->
<!-- 映射文件的根标签是 <mapper> -->
<!-- namespace:该映射文件的唯一标识 -->
<mapper namespace="xxxMapper">
<!-- 使用 <select> 标签封装一个查询语句 -->
<!-- id:该 SQL 语句的标识 -->
<!-- resultType:查询结果对应的 POJO;如果查询出的结果有多个,不写 List,仍然写 POJO -->
<select id="getXxxList" resultType="com.yscyber.mybatis.one.Xxx">
SELECT id, name
FROM xxx
</select>
</mapper>
- 4、编写核心配置文件
在src/main/resources
下创建一个 XML 文件,假设命名为mybatis.xml
(src/main/resources/mybatis.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">
<!-- 对于 MyBatis 配置文件而言,以上的 XML 文件约束是固定的 -->
<!-- MyBatis 配置文件的根标签是 <configuration> -->
<configuration>
<environments default="dev">
<!-- 配置数据源 -->
<environment id="dev">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test_1?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="xxxMapper.xml"/>
</mappers>
</configuration>
- 5、编写 CURD 业务代码
因只需体现如何使用 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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyTest {
@Test
public void test1() {
try {
// 1、使用 Resources.getResourceAsStream(String) 方法,自动从 Maven 工程的 src/main/resources 目录下读取文件,返回文件输入流
// 读取 MyBatis 核心配置文件 —— mybatis.xml
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
// 2、基于 MyBatis 核心配置文件,创建 SqlSessionFactory 对象,SQL 会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3、通过 sqlSessionFactory 获取 sqlSession 对象,SQL 会话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4、调用映射文件中的 SQL 语句
// selectList 参数是 namespace.id
List<Xxx> list = sqlSession.selectList("xxxMapper.getXxxList");
for (Xxx val : list) {
System.out.println(val);
}
// 5、关闭会话
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2、映射文件概述
MyBatis-1
3、增删改查 在 映射文件中 的 基本配置
<?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">
<!-- 对于任何映射文件而言,以上的 XML 文件约束是固定的 -->
<!-- 映射文件的根标签是 <mapper> -->
<!-- namespace:该映射文件的唯一标识 -->
<mapper namespace="xxxMapper">
<!-- 使用 <select> 标签封装一个查询语句 -->
<!-- id:该 SQL 语句的标识 -->
<!-- resultType:查询结果对应的 POJO;如果查询出的结果有多个,不写 List,仍然写 POJO -->
<select id="listAllXxx" resultType="com.yscyber.mybatis.one.Xxx">
SELECT id, name
FROM xxx
</select>
<select id="getXxxById" parameterType="java.lang.Integer" resultType="com.yscyber.mybatis.one.Xxx">
SELECT id, name
FROM xxx
WHERE id=#{id}
</select>
<!-- #{} 中的名称与 POJO 中一致 -->
<insert id="insertXxx" parameterType="com.yscyber.mybatis.one.Xxx">
INSERT INTO xxx (id, name)
VALUES (#{id}, #{name})
</insert>
<!-- 只有一个 #{} 的时候,里面的名称随便 -->
<delete id="deleteXxxById" parameterType="java.lang.Integer">
DELETE FROM xxx
WHERE id=#{id}
</delete>
<update id="updateXxxById" parameterType="com.yscyber.mybatis.one.Xxx">
UPDATE xxx
SET name=#{name}
WHERE id=#{id}
</update>
</mapper>
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.InputStream;
import java.util.List;
public class MyTest {
@Test
public void test1() {
try {
// 1、使用 Resources.getResourceAsStream(String) 方法,自动从 Maven 工程的 src/main/resources 目录下读取文件,返回文件输入流
// 读取 MyBatis 核心配置文件 —— mybatis.xml
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
// 2、基于 MyBatis 核心配置文件,创建 SqlSessionFactory 对象,SQL 会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3、通过 sqlSessionFactory 获取 sqlSession 对象,SQL 会话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4、调用映射文件中的 SQL 语句
// selectList 参数是 namespace.id
List<Xxx> list = sqlSession.selectList("xxxMapper.listAllXxx");
for (Xxx val : list) {
System.out.println(val);
}
// 5、关闭会话
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void test2() {
try {
// 1、使用 Resources.getResourceAsStream(String) 方法,自动从 Maven 工程的 src/main/resources 目录下读取文件,返回文件输入流
// 读取 MyBatis 核心配置文件 —— mybatis.xml
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
// 2、基于 MyBatis 核心配置文件,创建 SqlSessionFactory 对象,SQL 会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3、通过 sqlSessionFactory 获取 sqlSession 对象,SQL 会话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4、调用映射文件中的 SQL 语句
// selectOne 第一个参数是 namespace.id;第二个参数是 SQL 占位参数,将会替换映射文件中的 #{}
Xxx obj = sqlSession.selectOne("xxxMapper.getXxxById", 1);
System.out.println(obj);
// 5、关闭会话
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void test3() {
try {
// 1、使用 Resources.getResourceAsStream(String) 方法,自动从 Maven 工程的 src/main/resources 目录下读取文件,返回文件输入流
// 读取 MyBatis 核心配置文件 —— mybatis.xml
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
// 2、基于 MyBatis 核心配置文件,创建 SqlSessionFactory 对象,SQL 会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3、通过 sqlSessionFactory 获取 sqlSession 对象,SQL 会话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4、调用映射文件中的 SQL 语句
Xxx obj = new Xxx(3, "33");
int row = sqlSession.insert("xxxMapper.insertXxx", obj);
// 5、DML 语句,需要手动提交事务
sqlSession.commit();
System.out.println(row);
// 6、关闭会话
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void test4() {
try {
// 1、使用 Resources.getResourceAsStream(String) 方法,自动从 Maven 工程的 src/main/resources 目录下读取文件,返回文件输入流
// 读取 MyBatis 核心配置文件 —— mybatis.xml
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
// 2、基于 MyBatis 核心配置文件,创建 SqlSessionFactory 对象,SQL 会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3、通过 sqlSessionFactory 获取 sqlSession 对象,SQL 会话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4、调用映射文件中的 SQL 语句
int row = sqlSession.delete("xxxMapper.deleteXxxById", 3);
// 5、DML 语句,需要手动提交事务
sqlSession.commit();
System.out.println(row);
// 6、关闭会话
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void test5() {
try {
// 1、使用 Resources.getResourceAsStream(String) 方法,自动从 Maven 工程的 src/main/resources 目录下读取文件,返回文件输入流
// 读取 MyBatis 核心配置文件 —— mybatis.xml
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
// 2、基于 MyBatis 核心配置文件,创建 SqlSessionFactory 对象,SQL 会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3、通过 sqlSessionFactory 获取 sqlSession 对象,SQL 会话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4、调用映射文件中的 SQL 语句
Xxx obj = new Xxx(1, "111");
int row = sqlSession.update("xxxMapper.updateXxxById", obj);
// 5、DML 语句,需要手动提交事务
sqlSession.commit();
System.out.println(row);
// 6、关闭会话
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}