目录
一、引子
CRUD 是指对数据的基本操作,包括创建(Create)、读取(Read)、更新(Update)和删除(Delete)。
本项目环境jdk17,idea2023.2.5,navicat16,项目是maven项目。
二、基于SSM下mybatis的简单CRUD练习
(一)、建表与数据传入
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO user(id,username,password) values(1,"二狗","111");
INSERT INTO user(id,username,password) values(2,"李四","222");
INSERT INTO user(id,username,password) values(3,"王五","333");
(二)、User实体类
package com.atguigu.pojo;
import lombok.Data;
@Data //lombok
public class User {
private Integer id;
private String username;
private String password;
}
(三)、UserMapper.java
package com.atguigu.mapper; // 包路径
import com.atguigu.pojo.User; // 导入User类
import java.util.List; // 导入List类
public interface UserMapper { // 接口定义
int insert(User user); // 插入用户数据
int update(User user); // 更新用户数据
int delete(Integer id); // 删除用户数据
User selectById(Integer id); // 根据id查询用户数据
List<User> selectAll(); // 查询所有用户数据
}
(四)、UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace等于mapper接口类的全限定名,这样实现对应 -->
<mapper namespace="com.atguigu.mapper.UserMapper">
<insert id="insert" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into user(username,password) values(#{username},#{password})
</insert>
<update id="update">
update user set username = #{username},password=#{password}
where id = #{id}
</update>
<delete id="delete">
delete from user where id = #{id}
</delete>
<select id="selectById" resultType="user">
select * from user where id = #{id}
</select>
<select id="selectAll" resultType="user">
select * from user
</select>
</mapper>
(五)、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>
<!-- MyBatis全局配置 -->
<settings>
<!-- 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!-- 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 类型别名 -->
<typeAliases>
<package name="com.atguigu.pojo"/>
</typeAliases>
<!-- 环境配置 -->
<!-- environments表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 -->
<environments default="development">
<!-- environment表示配置Mybatis的一个具体的环境 -->
<environment id="development">
<!-- Mybatis的内置的事务管理器 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<!-- 建立数据库连接的具体信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis-example?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<!-- 映射器 -->
<mappers>
<!-- Mapper注册:指定Mybatis映射文件的具体位置 -->
<!-- mapper标签:配置一个具体的Mapper映射文件 -->
<!-- resource属性:指定Mapper映射文件的实际存储位置,这里需要使用一个以类路径根目录为基准的相对路径 -->
<!-- 对Maven工程的目录结构来说,resources目录下的内容会直接放入类路径,所以这里我们可以以resources目录为基准 -->
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
(六)、MybatisTest
package com.atguigu.test; // 包名
import com.atguigu.mapper.UserMapper; // 导入需要的类
import com.atguigu.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.jupiter.api.AfterEach; // 导入需要的类
import org.junit.jupiter.api.BeforeEach; // 导入需要的类
import org.junit.jupiter.api.Test; // 导入需要的类
import java.io.IOException; // 导入需要的类
import java.io.InputStream; // 导入需要的类
import java.util.List; // 导入需要的类
public class MybatisTest { // 类的声明
private SqlSession sqlSession; // 私有属性sqlSession
@BeforeEach // 注解,表示在测试方法之前执行
public void before() throws IOException { // 方法声明
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); // 读取配置文件
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); // 创建SqlSessionFactory
sqlSession = sqlSessionFactory.openSession(true); // 打开SqlSession
}
@AfterEach // 注解,表示在测试方法之后执行
public void after(){ // 方法声明
sqlSession.close(); // 关闭SqlSession
}
@Test // 注解,表示这是一个测试方法
public void testInsert(){ // 方法声明
UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 获取UserMapper接口的实例
User user = new User(); // 创建User对象
user.setUsername("张三"); // 设置用户名
user.setPassword("1234"); // 设置密码
int insert = mapper.insert(user); // 插入数据
System.out.println("insert = " + insert); // 打印插入结果
}
@Test // 注解,表示这是一个测试方法
public void testUpdate(){ // 方法声明
UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 获取UserMapper接口的实例
User user = new User(); // 创建User对象
user.setId(1); // 设置ID
user.setUsername("大狗"); // 设置用户名
user.setPassword("1234"); // 设置密码
int update = mapper.update(user); // 更新数据
System.out.println("update = " + update); // 打印更新结果
}
@Test // 注解,表示这是一个测试方法
public void testDelete(){ // 方法声明
UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 获取UserMapper接口的实例
User user = new User(); // 创建User对象
int delete = mapper.delete(2); // 删除数据
System.out.println("delete = " + delete); // 打印删除结果
}
@Test // 注解,表示这是一个测试方法
public void testSelectById(){ // 方法声明
UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 获取UserMapper接口的实例
User user = mapper.selectById(1); // 根据ID查询数据
System.out.println("user = " + user); // 打印查询结果
}
@Test // 注解,表示这是一个测试方法
public void testSelectAll(){ // 方法声明
UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 获取UserMapper接口的实例
List<User> users = mapper.selectAll(); // 查询所有数据
System.out.println("users = " + users); // 打印查询结果
}
}