Mybatis-02-CRUD
Mybatis-CRUD
1、mybatis工具类
从工具类中获取 SqlSession 对象
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory = null;
static {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}
2、给实体类设置别名
2.1、什么是别名
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
设置别名前
<select id="getUsers" resultType="com.qn.pojo.User">
select *
from mybatis.user
</select>
设置别名后
<select id="getUsers" resultType="user">
select *
from mybatis.user
</select>
2.2、配置别名
可以单独配置一个实体类的别名,也可以直接配置扫描一个包下全部的实体类;
指定一个包
,MyBatis会使用 实体类的首字母小写
的非限定类名来作为它的别名
;
直接在实体类上添加注释 @Alias("user")
。
也可以使用首字母大小的方式,mybatis 内部机制会自己进行检索。
-
指定一个包名,MyBatis 会在包名下面搜索需要的 实体类
<typeAliases> <package name="com.qn.pojo"/> </typeAliases>
-
指定一个实体类的别名
<typeAliases> <typeAlias type="com.qn.pojo.User" alias="user"/> </typeAliases>
-
使用
@Alias()
注解配置实体类别名@Alias("user") public class User { private int id; private String name; private String pwd; }
下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的;
注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
3、CRUD
代码中用到了 lombok 和 junit
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
3.1、编写实体类 User
// 使用 Lombok 注解快速生成 构造方法
@Data
@AllArgsConstructor
@NoArgsConstructor
@Alias("user")
public class User {
private int id;
private String name;
private String pwd;
}
3.2、编写UserMapper接口
public interface UserMapper {
// 查询所有用户
List<User> getUsers();
// 根据ID查询用户
User getUserById(@Param("id") int id);
// 添加用户
int addUser(User user);
// 修改用户
int updateUser(User user);
// 删除用户
int deleteUser(@Param("id") int id);
}
3.3、在 mybatis 配置文件
中 注册 UserMapper
<mappers>
<mapper class="com.qn.dao.UserMapper"/>
</mappers>
3.4、编写 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="com.qn.dao.UserMapper">
<select id="getUsers" resultType="user">
select *
from mybatis.user
</select>
<select id="getUserById" parameterType="int" resultType="user">
select *
from mybatis.user
where id = #{id}
</select>
<insert id="addUser" parameterType="User">
insert into mybatis.user (id, name, pwd)
values (#{id}, #{name}, #{pwd});
</insert>
<update id="updateUser" parameterType="User">
update mybatis.user
set name = #{name},
pwd =#{pwd}
where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete
from mybatis.user
where id = #{id}
</delete>
</mapper>
3.5、编写测试类,进行测试
这里使用 junit 进行测试
2.5.1、查询
查询所有
@Test
public void getUsers() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
for (User user : mapper.getUsers()) {
System.out.println(user);
}
}
结果:
根据ID查询
@Test
public void getUserById() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
}
结果:
2.5.2、添加
- 这里要注意,对数据库进行增删改 需要提交事务
- sqlSession.commit();
@Test
public void addUser() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.addUser(new User(10, "遇见星光", "1234456"));
sqlSession.commit(); // 对数据库进行增删改 需要提交事务
System.out.println(i);
}
结果:
2.5.3、修改
@Test
public void updateUser() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.updateUser(new User(9, "遇见星光", "999999"));
sqlSession.commit(); // 对数据库进行增删改 需要提交事务
System.out.println(i);
}
结果:
2.5.4、删除
@Test
public void deleteUser() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.deleteUser(10);
sqlSession.commit(); // 对数据库进行增删改 需要提交事务
System.out.println(i);
}
结果:
4、注意
对数据库进行增删改需要提交事务
sqlSession.commit();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人