mybatis - [05] Mybatis的CURD
数据库:
mysql 8.0.28
技术框架:
mybatis 3.5.13
、maven 3.8.7
一、准备工作
(1)数据库建库建表
-- 创建数据库
create database if not exists mybatis;
-- 切换数据库
use mybatis;
-- 创建用户表
create table if not exists user
(
id int not null primary key,
name varchar(30) null,
pwd varchar(30) null
) charset = utf8;
(2)插入测试数据
insert into mybatis.user (id, name, pwd)
values (1, '漩涡鸣人', '123456'),
(2, '宇智波佐助', '123456'),
(3, '春野樱', '123456'),
(4, '旗木卡卡西', '123456'),
(5, '奈良鹿丸', '123456'),
(6, '秋道丁次', '123456'),
(7, '山中井野', '123456'),
(8, '猿飞阿斯玛', '123456'),
(9, '日向雏田', '123456'),
(10, '犬冢牙', '123456'),
(11, '油女志乃', '123456'),
(12, '夕日红', '123456'),
(520, '1314', 'yanglin'),
(9527, '007', '123456');
(3)配置maven依赖(pom.xml
)
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
(4)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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="!QAZ2wsx"/>
</dataSource>
</environment>
</environments>
<!-- 每一个Mapper.xml都需要在Mybatis核心配置文件中注册 -->
<mappers>
<mapper resource="com/harley/dao/UserMapper.xml"/>
</mappers>
</configuration>
二、POJO类
package com.harley.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
* 实体类
* @author harley
* @date 2024/05/31 14:00
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
public class User {
private int id;
private String name;
private String pwd;
}
三、JDBC工具类
package com.harley.utils;
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 java.io.IOException;
import java.io.InputStream;
/**
* @author harley
* @date 2024/05/31 13:55
*/
public class MybatisUtils {
/* 静态属性,MybatisUtils实例化时生成 */
private static SqlSessionFactory sqlSessionFactory;
/* 静态代码块,MybatisUtils实例化时运行 */
static {
try{
String resource="mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}
四、Mapper类
package com.harley.dao;
import com.harley.pojo.User;
import java.util.List;
public interface UserMapper {
// 查询全部用户
List<User> getUserList();
// 根据id查询用户
User getUserById(int id);
// 新增一个用户
int addUser(User user);
// 更新用户
int updateUser(User user);
// 删除用户
int deleteUser(int id);
}
五、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">
<!-- namespace绑定一个Dao/Mapper接口 -->
<mapper namespace="com.harley.dao.UserMapper">
<!--select查询接口-->
<select id="getUserList" resultType="com.harley.pojo.User">
select * from user
</select>
<select id="getUserById" resultType="com.harley.pojo.User" parameterType="integer">
select * from user where id = #{id}
</select>
<!--对象中的属性,可以直接取出来 -->
<insert id="addUser" parameterType="com.harley.pojo.User">
insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
<update id="updateUser" parameterType="com.harley.pojo.User">
update user set name=#{name},pwd=#{pwd} where id = #{id}
</update>
<delete id="deleteUser" parameterType="integer">
delete from user where id = #{id}
</delete>
</mapper>
六、测试类
package com.harley.dao;
import com.harley.pojo.User;
import com.harley.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
/**
* @author harley
* @date 2024/05/31 14:22
*/
public class UserDaoTest {
SqlSession sqlSession;
UserMapper userMapper;
@Before
public void openSession(){
System.out.println("开启sqlSession");
sqlSession= MybatisUtils.getSqlSession();
userMapper=sqlSession.getMapper(UserMapper.class);
}
@Test
public void test(){
// 第二步: getMapper
// UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// List<User> userList = userMapper.getUserList();
List<User> userList = sqlSession.selectList("com.harley.dao.UserMapper.getUserList");
// 第三步: 遍历结果集
for (User user : userList) {
System.out.println(user);
}
// 第四步: 关闭sqlSession
sqlSession.close();
}
@Test
public void getUserById(){
User user = userMapper.getUserById(1);
System.out.println(user);
}
// 增删改需要提交事务
@Test
public void addUser(){
User user = new User(520,"1313","yanglin");
int res = userMapper.addUser(user);
if (res>0){
System.out.println("用户: ["+user.getName()+"] 插入成功");
}
// 提交事务
sqlSession.commit();
}
@Test
public void updateUser(){
User user = new User(520,"1314","yanglin");
int res = userMapper.updateUser(user);
if(res>0){
System.out.println("id:["+user.getId()+"] 的信息已更改");
}
// 提交事务
sqlSession.commit();
}
@Test
public void deleteUser(){
int id = 9527;
int res = userMapper.deleteUser(id);
if(res>0){
System.out.println("id:["+id+"] 用户已删除");
}
// 提交事务
sqlSession.commit();
}
@After
public void closeSession(){
if(sqlSession!=null){
System.out.println("关闭sqlSession");
sqlSession.close();
}
}
}
注意:增删改需要提交事务:
sqlSession.commit();
七、常见问题
(1)Mapper.xml
中的<mapper namespace="com.harley.dao.UserMapper">
写成了<mapper namespace="com/harley/dao/UserMapper">
(2)mybatis-config.xml
中的<mapper resource="com/harley/dao/UserMapper.xml"/>
写成了<mapper resource="com.harley.dao.UserMapper.xml"/>
(3)NullPointerException
,没有注册到资源
(4)资源导出失败问题处理
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
— 业精于勤荒于嬉,行成于思毁于随 —
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2023-05-31 调整博客园格式专用随笔
2023-05-31 Hive - SQL
2023-05-31 DW - 数据仓库原理