一.使用 @Select
等 MyBatis 原生注解示例
1.创建数据库
CREATE TABLE IF NOT EXISTS tb_userinfo (
id INT AUTO_INCREMENT COMMENT '用户编号' PRIMARY KEY,
user_name VARCHAR(20) NOT NULL COMMENT '用户姓名',
password VARCHAR(32) NOT NULL COMMENT '密码'
) COMMENT '用户表';
INSERT INTO tb_userinfo (user_name, password) VALUES
('Alice', 'password123'),
('Bob', 'securePassword!'),
('Charlie', 'myP@ssw0rd'),
('David', 'D4v1d@2024'),
('Eva', 'Eva!Secure'),
('Frank', 'Fr@nkPass456'),
('Grace', 'G1234rce!'),
('Hannah', 'H@nnaH2024!');
-- 查询以确认插入
SELECT * FROM tb_userinfo;
2.创建实体类
@Data
@Table("tb_userinfo") // 指定该类对应的数据库表名为 user_info
public class Userinfo {
@Id(keyType = KeyType.Auto) // 指定 id 字段为主键,自增长
private int id; // 用户编号
private String user_name; // 用户姓名
private String password; // 密码
}
3.创建Mapper接口
public interface UserinfoMapper extends BaseMapper<Userinfo> {
//原生查询
@Select("select * from tb_userinfo where id=#{id}")
Userinfo selectById(int id);
//分页
List<Userinfo> selectPagedUsers(@Param("offset") int offset, @Param("pageSize") int pageSize);
}
4.启动 Spring Boot 应用程序。扫描和配置 MyBatis 映射器
@SpringBootApplication // 标记该类为 Spring Boot 应用的入口
@MapperScan("com.example.demo.mapper") // 指定 MyBatis 映射器接口的包路径
public class DemoApplication {
public static void main(String[] args) {
// 启动 Spring Boot 应用
SpringApplication.run(DemoApplication.class, args);
}
}
5.创建测试类文件
@Autowired
private UserinfoMapper userinfoMapper; // 注入 UserinfoMapper
@Test
public void testSelectById() {
int userId = 1; // 假设你要查询的用户 ID
// 查询用户信息
Userinfo result = userinfoMapper.selectById(userId);
System.out.println(result); // 使用 println 输出结果
}
6.运行结果
二.使用 xml 的方式进行XML分页
1.数据库和实体类第一步已经创建直接使用就可以
2.在开始使用 xml 之前,我们需要在application.yml添加如下配置,告知 mybatis 的 xml 存放路径。
mybatis-flex:
mapper-locations:
- classpath*:/mapper/*.xml
3.编写 xml 和 mapper 代码
<?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.example.demo.mapper.UserinfoMapper">
<!-- 查询单个用户信息 -->
<select id="selectById" parameterType="int" resultType="com.example.demo.entity.Userinfo">
SELECT * FROM tb_userinfo WHERE id = #{id}
</select>
<!-- 分页查询 -->
<select id="selectPagedUsers" parameterType="map" resultType="com.example.demo.entity.Userinfo">
SELECT * FROM tb_userinfo
ORDER BY id
LIMIT #{offset}, #{pageSize}
</select>
</mapper>
public interface UserinfoMapper extends BaseMapper<Userinfo> {
//原生查询
//@Select("select * from tb_userinfo where id=#{id}")
Userinfo selectById(int id);
//分页
List<Userinfo> selectPagedUsers(@Param("offset") int offset, @Param("pageSize") int pageSize);
}
4.创建一个服务类
@Service
public class UserinfoService {
@Autowired
private UserinfoMapper userinfoMapper;
public List<Userinfo> getPagedUsers(int currentPage, int pageSize) {
int offset = (currentPage - 1) * pageSize;// 计算分页偏移量
return userinfoMapper.selectPagedUsers(offset, pageSize);// 调用 Mapper 的方法获取分页用户
}
}
5.创建测试类
@Autowired
private UserinfoService userinfoService; // 注入 UserinfoServiceS
@Test
public void testGetUsers() {
int page = 2; // 设置页码
int size = 4; // 设置每页大小
// 直接调用 getUsers 方法
List<Userinfo> users = userinfoService.getPagedUsers(page, size);
// 输出到控制台
users.forEach(user -> System.out.println(user));
}
6.运行结果