Mybatis-04-结果集映射 | 分页 | 注解 | Lombok
1、resultMap
使用结果集(resultMap)来解决实体类,和数据库字段不一致的问题
代码
1.1、UserMapper
接口:
public interface UserMapper {
List<User> queryUsers();
}
1.2、UserMapper.xml
配置文件:
column 数据库中列, property 实体类中的属性
<?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="queryUsers" resultMap="userMap">
select *
from mybatis.user
</select>
<resultMap id="userMap" type="user">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="pwd" property="password"/>
</resultMap>
</mapper>
1.3、测试代码:
@Test
public void queryUsers() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.queryUsers();
for (User user : userList) {
System.out.println(user.toString());
}
sqlSession.close();
}
1.4、结果:
1.5、注意点:
要使用 resultMap
不是 resultType
,值也要和 resultMap
中的 id
对应
2、分页功能
为什么要分页:
- 对数据库进行多次查询,每次只获得本页的数据,减少数据的处理量
- 如果一次将这些数据查询出来,必然加大了服务器内存的负载,降低了系统的运行速度
语法
select * from mybatis.user limit startIndex,pageSize
select * from mybatis.user limit 0,5; -- 查询 从0 到5 人数据
代码实现
2.1、UserMapper
接口:
public interface UserMapper {
// 分页查询
List<User> getUserByLimit(Map<String, Integer> map);
}
2.2、UserMapper.xml
配置文件:
column 数据库中列, property 实体类中的属性
<?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="getUserByLimit" parameterType="map" resultMap="userMap">
select *
from mybatis.user
limit #{startIndex},#{pageSize}
</select>
<resultMap id="userMap" type="user">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="pwd" property="password"/>
</resultMap>
</mapper>
2.3、测试代码:
@Test
public void getUserByLimit() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("startIndex",0);
map.put("pageSize",3);
List<User> userList = mapper.getUserByLimit(map);
for (User user : userList) {
System.out.println(user.toString());
}
sqlSession.close();
}
2.4、测试结果:
3、使用注解开发
3.1、代码实现
public interface UserMapper {
@Select("select * from mybatis.user")
List<User> getUserList();
@Select("select *from mybatis.user where id = #{id}")
User getUserById`@Param("id") int id);
@Insert("insert into mybatis.user(id, name, pwd)values (#{id},#{name},#{pwd})")
int addUser(User user);
@Update("update user set name=#{name},pwd=#{pwd} where id=#{id}")
int updateUser(User user);
@Delete("delete from user where id=#{id}")
int deleteUser(@Param("id") int id);
}
3.2、测试:
测试方式 与 xml 配置开发相同
@Test
public void queryUsers() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user.toString());
}
sqlSession.close();
}
3.3、注意点:
必须要将接口注册绑定到 mybatis的核心配置文件中
- 方法存在多个 所有的参数前面必须加上
@Param("id")
注解- (@Param("id") int id, @Param("name") String name);
- 复杂sql不好用,搜集sql不方便,管理不方便,修改需重新编译
4、#{} and ${}
#和$符号:
相同点:都是对参数进行标记的符号
不同点:
- # 是预编译,防止sql注入
- $ 相当于一个占位符,不能防止sql注入
5、Lombok
5.1、安装Lombok
IDEA使用Lombok IDEA 2020.3之前版本需要安装 Lombok插件
Lombok官网
IDEA 插件
Maven 导入依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
5.2、使用Lombok
在实体类上加注解即可!
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private String pwd;
}
常用:
@Data // 生成 无参构造,get、set、tostring、hashcode,equals
@AllArgsConstructor // 生成 有参构造
@NoArgsConstructor // 生成 无参构造
其他:
@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger
@Data
@Builder
@Singular
@Delegate
@Value
@Accessors
@Wither
@SneakyThrows
【推荐】国内首个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训练数据并当服务器共享给他人