MyBatis03——ResultMap和分页相关
ResultMap和分页相关
当属性名和字段名不一致的时候
解决方法
1、数据库中创建user表
字段 id、name、pwd
2、Java中的实体类
@Data public class User { private int id; //id private String name; //姓名 private String password; //密码和数据库不一样! }
3、接口以及方法
User selectUserById(int id);
4、在Mapper.xml中编写sql
<select id="selectUserById" resultType="user"> select * from user where id = #{id} </select>
5、测试
@Test public void testSelectUserById() { SqlSession session = MybatisUtils.getSession(); //获取SqlSession连接 UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserById(1); System.out.println(user); session.close(); }
测试结果:
- User{id=1, name=‘盼盼’, password=‘null’}
- 我们通过查询发现password字段反馈结果为空,这就说明我们的代码是有错误的
分析:
- select * from user where id = #{id}可以看成
select id,name,pwd from user where id = #{id} - 这儿我们了解到,在Mybatis中有自动映射机制,即根据查询的列名去对应的实体类中查找相应列名的set方法设值,由于找不到setPwd(),所以password返回NULL
解决方案
1、为列名起别名(用as),这里的别名和Java实体类中的属性名一致
<select id="selectUserById" resultType="User"> select id,name,pwd as password from user where id =#{id} </select>
2、使用结果集映射>>>>ResultMap
强烈推荐
<resultMap id="UserMap" type="User"> <!-- id为主键--> <id column = "id" property = "id"/> <!--cloumn是数据库的列名,property是实体类的属性名--> <result column = "name" property = "name"/> <result column = "pwd" property = password/> </resultMap> <select id = "selectUserById" resultMap = "UserMap"> select id,name,pwd from user where id = #{id} </select>
ResultMap
自动映射
- resultMap元素是MyBatis中最重要最强大的元素。他可以让你从90%的JDBC(ResultSets)数据提取代码中解放出来。
- 实际上,在为一些比如链接的复杂语句编写映射代码的时候,一份resultMap能够代替实现同等功能的代码。
- ResultMap的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述他们的关系就行了。
日志工厂
日志实现工具:
- SLF4J
- Apache Commons Logging
- Log4j 2
- Log4j
- JDK logging
标准日志实现
通过在setting中设置,指定应该使用那个日志记录实现。
<settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
Log4j
使用步骤
1、导入log4j相关jar包
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
2、log4j.properties文件编写
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码 log4j.rootLogger=DEBUG,console,file #控制台输出的相关设置 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%c]-%m%n #文件输出的相关设置 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/kuang.log log4j.appender.file.MaxFileSize=10mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n #日志输出级别 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
3、settin指定日志实现
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
分页实现
limit实现分页
# 语法 select * from table LIMIT stratIndex , pageSize SELECT * FROM table LIMIT 5,10;//检索记录行6-15 # 为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为-1 SELECT * FROM table LIMIT 95,-1;//检索记录行96-last # 如果只给定一个参数,它表示返回最大的记录行数目: SELECT * FROM table LIMIT 5;//检索前5个记录行 # LIMIT n等价于 LIMIT 0,n;
起始位置 = (当前页面 - 1)* 页面大小
植入mapper
步骤
1、 修改Mapper
<select id="selectUser" paraneterType="map" resultType="user"> select * from user limit #{startIndex},#{pageSize} </select>
2、Mapper接口,参数为map
List<User> selectUser(Map<String,Integer> map);
3、测试
//分页查询 , 两个参数startIndex , pageSize @Test public void testSelectUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); int currentPage = 1; //第几页 int pageSize = 2; //每页显示几个 Map<String,Integer> map = new HashMap<String,Integer>(); map.put("startIndex",(currentPage-1)*pageSize); map.put("pageSize",pageSize); List<User> users = mapper.selectUser(map); for (User user: users){ System.out.println(user); } }
posted on 2021-04-13 14:43 JavaCoderPan 阅读(26) 评论(0) 编辑 收藏 举报 来源
【推荐】国内首个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代理技术深度解析与实战指南