封面:洛小汐
作者:潘潘
在了解中执行,在执行中了解,学习技术也循此道。
前言
上一篇文章 《Mybatis 系列全解(二):Mybatis 简介与环境搭建》,咱们对 Mybatis 做了初步解说,并搭建了一套根本环境,共同完成了一次查问操作。所以本篇文章咱们在此基础上,持续拓展了插入、批改、删除三种操作,把咱们的 CRUD 根底操作进行欠缺。
Mybaits 系列全解 (继续更新)
- Mybatis 系列全解(一):手写一套长久层框架
- Mybatis 系列全解(二):Mybatis 简介与环境搭建
- Mybatis 系列全解(三):Mybatis 简略 CRUD 应用介绍
- Mybatis 系列全解(四):全网最全!Mybatis 配置文件 XML 全貌详解
- Mybatis 系列全解(五):全网最全!详解 Mybatis 的 Mapper 映射文件
- Mybatis 系列全解(六):Mybatis 最硬核的 API 你晓得几个?
- Mybatis 系列全解(七):全息视角看 Dao 层两种实现形式之传统形式与代理形式
- Mybatis 系列全解(八):Mybatis 的动静 SQL
- Mybatis 系列全解(九):Mybatis 的简单映射
- Mybatis 系列全解(十):Mybatis 注解开发
- Mybatis 系列全解(十一):Mybatis 缓存全解
- Mybatis 系列全解(十二):Mybatis 插件开发
- Mybatis 系列全解(十三):Mybatis 代码生成器
- Mybatis 系列全解(十四):Spring 集成 Mybatis
- Mybatis 系列全解(十五):SpringBoot 集成 Mybatis
- Mybatis 系列全解(十六):Mybatis 源码分析
目录
1、Mybatis 查问操作回顾
2、插入操作
3、批改操作
4、删除操作
5、总结
Mybatis 查问操作回顾
默认已装置 Java 开发环境、Mysql 数据库、Maven 环境。
Mybatis 的查问分为 7 个步骤:
1、创立 maven 工程
2、增加 MyBatis 仓库坐标(非 maven 我的项目则引入 jar 包)
3、创立 user 数据表
4、编写 User 实体类
5、编写映射文件 UserMapper.xml
6、编写外围文件 SqlMapConfig.xml
7、编写测试类
1、创立 maven 工程
2、增加 MyBatis 仓库坐标
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!--mybatis 坐标 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql 驱动坐标 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>runtime</scope>
</dependency>
<!-- 单元测试坐标 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 日志坐标 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
3、创立 user 数据表
CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`birthday` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
4、编写 User 实体类
package com.panshenlian.pojo;
/**
* @Author: panshenlian
* @Description: 用户实体
* @Date: Create in 2:08 2020/11/28
*/
public class User {
private int id;
private String username;
private String password;
private String birthday;
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getUsername() {return username;}
public void setUsername(String username) {this.username = username;}
public String getPassword() {return password;}
public void setPassword(String password) {this.password = password;}
public String getBirthday() {return birthday;}
public void setBirthday(String birthday) {this.birthday = birthday;}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", birthday='" + birthday + '\'' +
'}';
}
}
5、编写映射文件 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 namespace="userMapper">
<select id="findAll" resultType="com.panshenlian.pojo.User">
select * from User
</select>
</mapper>
6、编写外围文件 SqlMapConfig.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" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="/UserMapper.xml" />
</mappers>
</configuration>
7、编写测试类
package com.panshenlian.service;
import com.panshenlian.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.InputStream;
import java.util.List;
/**
* @Author: panshenlian
* @Description: 体验测试类
* @Date: Create in 2:21 2020/11/28
*/
public class MybatisTest {
@Test
public void testQueryUser01() throws IOException {
// 加载外围配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 取得 sqlSession 工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 取得 sqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行 sql 语句
List<User> userList = sqlSession.selectList("userMapper.findAll");
// 打印后果
for (User user : userList) {System.out.println(user);
}
// 开释资源
sqlSession.close();}
}
最终通过 Junit 单元测试,运行后果合乎预期:
工程构造参考:
插入操作
Mybatis 的插入数据操作,咱们一共须要两步:
- 在映射文件 UserMapper.xml 中增加插入语句
<!-- 插入用户操作 -->
<insert id="insertUser"
parameterType="com.panshenlian.pojo.User" >
insert into user(username,password,birthday)
values (#{username}, #{password},#{birthday})
</insert>
- 编写插入 User 实体对象的 Java 代码
@Test
public void testInsertUser01() throws IOException {
// 加载外围配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 取得 sqlSession 工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 取得 sqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 筹备插入数据库的对象
User insertUser = new User();
insertUser.setBirthday("2020-12-01");
insertUser.setUsername("panpan");
insertUser.setPassword("888");
// 执行 sql 语句
int rows = sqlSession.insert("userMapper.insertUser",insertUser);
// 打印后果
System.out.println(rows);
// 提交事务
sqlSession.commit();
// 开释资源
sqlSession.close();}
留神:当 sqlSession 执行插入、更新、删除操作时,须要提交事务,如果 openSession() 的时候应用无参构造函数,那么须要手动调用 commit() 进行事务提交,对应的插入、更新、删除操作才最终执行胜利,如果是应用 openSession(true) 来关上 session,那么则示意事务主动提交,无需手工再调用 commit()。
插入操作时,在映射文件中咱们没有配置 resultType 参数,即返回后果类型咱们没有配置,Mybatis 默认返回 int 类型,示意插入操作影响的记录数。
上例插入操作执行后果为:1,示意插入胜利,影响记录数量为 1 条。
插入操作留神问题
1、插入语句应用 insert 标签
2、在映射文件中应用 parameterType 属性指定要插入的数据类型
3、Sql 语句中应用 #{实体属性名}形式援用实体中的属性值
4、插入操作应用的 API 是 sqlSession.insert(“命名空间.id”, 实体对象);
5、插入操作波及数据库数据变动,所以要应用 sqlSession 对象显示的提交事务,即 sqlSession.commit()
批改操作
Mybatis 的批改数据操作,同插入操作,也是须要两步:
- 在映射文件 UserMapper.xml 中增加批改语句
<!-- 批改用户操作 -->
<insert id="updateUser" parameterType="com.panshenlian.pojo.User" >
update user set username =#{username} where id = #{id}
</insert>
- 编写批改 User 实体对象的 Java 代码
@Test
public void testUpdateUser01() throws IOException {
// 加载外围配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 取得 sqlSession 工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 取得 sqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
User updateUser = new User();
updateUser.setUsername("新的用户名 PanPan");
updateUser.setId(1);
// 执行 sql 语句
int rows = sqlSession.update("userMapper.updateUser",updateUser);
// 打印后果
System.out.println(rows);
// 提交事务
sqlSession.commit();
// 开释资源
sqlSession.close();}
执行后果如下,胜利批改 id =1 的数据记录,新用户名为 新的用户名 PanPan
批改操作留神问题
1、批改语句应用 update 标签
2、批改操作应用的 API 是 sqlSession.update(“命名空间.id”, 实体对象);
删除操作
Mybatis 的删除数据操作,同以上插入与批改操作,也是须要两步:
- 在映射文件 UserMapper.xml 中增加删除语句
<!-- 删除用户操作 -->
<insert id="deleteUser" parameterType="com.panshenlian.pojo.User" >
delete from user where id=#{id} and username = #{username}
</insert>
- 编写删除 User 实体对象的 Java 代码
@Test
public void testDeleteUser01() throws IOException {
// 加载外围配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 取得 sqlSession 工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 取得 sqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
User deleteUser = new User();
deleteUser.setUsername("新的用户名 PanPan");
deleteUser.setId(1);
// 执行 sql 语句
int rows = sqlSession.delete("userMapper.deleteUser",deleteUser);
// 打印后果
System.out.println(rows);
// 提交事务
sqlSession.commit();
// 开释资源
sqlSession.close();}
执行后果如下,胜利删除 id =1,username=新的用户名 PanPan的数据记录。
删除操作留神问题
1、删除语句应用 delete 标签
2、Sql 语句中应用 #{实体属性名}援用传递的对象属性
3、删除操作应用的 API 是 sqlSession.delete(“命名空间.id”,Object);
删除操作也能够通过执行 id 的形式进行删除,例如在映射文件中把参数设置为 parameterType=”java.lang.Integer”,理论 API 是 sqlSession.delete(“ 命名空间.id”,1);
总结
咱们通过本文介绍,根本把握了 Mybatis 最根底的 CRUD 操作,后续,咱们逐渐深刻。
本篇完,本系列下一篇咱们讲《Mybatis 系列全解(四):XML 配置文件与 API 介绍》。
BIU ~ 文章继续更新,微信搜寻「潘潘和他的敌人们」第一工夫浏览,随时有惊喜。本文会在 GitHub https://github.com/JavaWorld 收录,热腾腾的技术、框架、面经、解决方案,咱们都会以最美的姿态第一工夫送达,欢送 Star。