大良网站建设dwxwwordpress商城 微信支付宝
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:28
当前位置: 首页 > news >正文
大良网站建设dwxw,wordpress商城 微信支付宝,最新推广赚钱的app,精美ppt模板免费下载百度文库查询为null问题 要解决的问题#xff1a;属性名和字段名不一致 环境#xff1a;新建一个项目#xff0c;将之前的项目拷贝过来 1、查看数据库的字段名 2、Java中的实体类设计 public class User { private int id; //id private String name; //姓名 private String passwo…查询为null问题 要解决的问题属性名和字段名不一致 环境新建一个项目将之前的项目拷贝过来 1、查看数据库的字段名 2、Java中的实体类设计 public class User { private int id; //id private String name; //姓名 private String password; //密码和数据库不一样数据库中字段名为pwd //构造 //set/get //toString() }3、接口 //根据id查询用户 User selectUserById(int id);4、mapper映射文件 select * from user where id #{id} 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{id1, name‘狂神’, password‘null’} 查询出来发现 password 为空 . 说明出现了问题 分析 select * from user where id #{id} 可以看做 select id,name,pwd from user where id #{id} mybatis会根据这些查询的列名(会将列名转化为小写,数据库不区分大小写) , 去对应的实体类中查找相应列名的set方法设 值 , 由于找不到setPwd() , 所以password返回null ; 【自动映射】 解决方案 方案一为列名指定别名 , 别名和java实体类的属性名一致 . select idselectUserById resultTypeUser select id , name , pwd as password from user where id #{id} /select方案二使用结果集映射-ResultMap 【推荐】 resultMap idUserMap typeUser !– id为主键 – id columnid propertyid/ !– column是数据库表的列名 , property是对应实体类的属性名 – result columnname propertyname/ result columnpwd propertypassword/ /resultMap select idselectUserById resultMapUserMap select id , name , pwd from user where id #{id} /selectResultMap—自动映射 ResultMap 的设计思想是对于简单的语句根本不需要配置显式的结果映射而对于复杂一点的语句只需要描述它们的关 系就行了。 你已经见过简单映射语句的示例了但并没有显式指定 resultMap。比如 select idselectUserById resultTypemap select id , name , pwd from user where id #{id} /select上述语句只是简单地将所有的列映射到 HashMap 的键上这由 resultType 属性指定。虽然在大部分情况下都够用但 是 HashMap 不是一个很好的模型。你的程序更可能会使用 JavaBean 或 POJOPlain Old Java Objects普通老式 Java 对象作为模型。 ResultMap 最优秀的地方在于虽然你已经对它相当了解了但是根本就不需要显式地用到他们。 手动映射 1、返回值类型为resultMap select id , name , pwd from user where id #{id} 2、编写resultMap实现手动映射 resultMap idUserMap typeUser !– id为主键 – id columnid propertyid/ !– column是数据库表的列名 , property是对应实体类的属性名 – result columnname propertyname/ result columnpwd propertypassword/ /resultMap之后会使用到一些高级的结果集映射associationcollection这些 日志工厂 思考我们在测试SQL的时候要是能够在控制台输出 SQL 的话是不是就能够有更快的排错效率 如果一个 数据库相关的操作出现了问题我们可以根据输出的SQL语句快速排查问题。 对于以往的开发过程我们会经常使用到debug模式来调节跟踪我们的代码执行过程。但是现在使用Mybatis是基于接口配置文件的源代码执行过程。因此我们必须选择日志工具来作为我们开发调节程序的工具。 Mybatis内置的日志工厂提供日志功能具体的日志实现有以下几种工具 SLF4JApache Commons LoggingLog4j 2Log4jJDK logging 具体选择哪个日志实现工具由MyBatis的内置日志工厂确定。它会使用最先找到的按上文列举的顺序查找。如果一个都未找到日志功能就会被禁用。 标准日志实现 指定 MyBatis 应该使用哪个日志记录实现。如果此设置不存在则会自动发现日志记录实现。 settings setting namelogImpl valueSTDOUT_LOGGING/ /settings注意名字一定不要写错注意不要加无关的空格 测试可以看到控制台有大量的输出我们可以通过这些输出来判断程序到底哪里出了Bug 使用Log4j 1、导入log4j的包 dependency groupIdlog4j/groupId artifactIdlog4j/artifactId version1.2.17/version /dependency2、配置文件编写 #将等级为DEBUG的日志信息输出到console和file这两个目的地console和file的定义在下面的代码 log4j.rootLoggerDEBUG,console,file #控制台输出的相关设置 log4j.appender.console org.apache.log4j.ConsoleAppender log4j.appender.console.Target System.out log4j.appender.console.ThresholdDEBUG 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.MaxFileSize10mb log4j.appender.file.ThresholdDEBUG log4j.appender.file.layoutorg.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern[%p][%d{yy-MM-dd}][%c]%m%n #日志输出级别 log4j.logger.org.mybatisDEBUG log4j.logger.java.sqlDEBUG log4j.logger.java.sql.StatementDEBUG log4j.logger.java.sql.ResultSetDEBUG log4j.logger.java.sql.PreparedStatementDEBUG3、setting设置日志实现 settings setting namelogImpl valueLOG4J/ /settings4、在程序中使用Log4j进行输出 //注意导包org.apache.log4j.Logger static Logger logger Logger.getLogger(MyTest.class); Test public void selectUser() { logger.info(info进入selectUser方法); logger.debug(debug进入selectUser方法); logger.error(error: 进入selectUser方法); SqlSession session MybatisUtils.getSession(); UserMapper mapper session.getMapper(UserMapper.class); ListUser users mapper.selectUser(); for (User user: users){ System.out.println(user); } session.close(); }5、测试看控制台输出 limit实现分页 原因查询大量数据的时候我们往往使用分页进行查询也就是每次处理小部分数据这样对数据库压力就在可控范围内。 使用Limit实现分页 #语法 SELECT * FROM table LIMIT stratIndexpageSize 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文件 select idselectUser parameterTypemap resultTypeuser select * from user limit #{startIndex},#{pageSize} /select2、Mapper接口参数为map //选择全部用户实现分页 List selectUser(MapString,Integer map); 3、在测试类中传入参数测试 起始位置 当前页面 - 1 * 页面大小 //分页查询 , 两个参数startIndex , pageSize Test public void testSelectUser() { SqlSession session MybatisUtils.getSession(); UserMapper mapper session.getMapper(UserMapper.class); int currentPage 1; //第几页 int pageSize 2; //每页显示几个 MapString,Integer map new HashMapString,Integer(); map.put(startIndex,(currentPage-1)*pageSize); map.put(pageSize,pageSize); ListUser users mapper.selectUser(map); for (User user: users){ System.out.println(user); } session.close(); }RowBounds分页 我们除了使用Limit在SQL层面实现分页也可以使用RowBounds在Java代码层面实现分页当然此种方式作为了解即 可。 步骤 1、mapper接口 //选择全部用户RowBounds实现分页 List getUserByRowBounds(); 2、mapper文件 select idgetUserByRowBounds resultTypeuser select * from user /select3、测试类 在这里我们需要使用RowBounds类 Test public void testUserByRowBounds() { SqlSession session MybatisUtils.getSession(); int currentPage 2; //第几页 int pageSize 2; //每页显示几个 RowBounds rowBounds new RowBounds((currentPage-1)*pageSize,pageSize); //通过session.**方法进行传递rowBounds[此种方式现在已经不推荐使用了] ListUser users session.selectList(com.kuang.mapper.UserMapper.getUserByRowBounds, null, rowBounds); for (User user: users){ System.out.println(user); } session.close(); }PageHelper
- 上一篇: 大连做网站优化东莞网络
- 下一篇: 大良网站建设dwxw学做网站和推广要多久
相关文章
-
大连做网站优化东莞网络
大连做网站优化东莞网络
- 技术栈
- 2026年03月21日
-
大连做网站外包wordpress 获取页面标题
大连做网站外包wordpress 获取页面标题
- 技术栈
- 2026年03月21日
-
大连做网站qq群3模网站建设
大连做网站qq群3模网站建设
- 技术栈
- 2026年03月21日
-
大良网站建设dwxw学做网站和推广要多久
大良网站建设dwxw学做网站和推广要多久
- 技术栈
- 2026年03月21日
-
大良营销网站建设服务淘客怎样做网站
大良营销网站建设服务淘客怎样做网站
- 技术栈
- 2026年03月21日
-
大龄工找工作哪个网站好怎么为自己的厂做网站
大龄工找工作哪个网站好怎么为自己的厂做网站
- 技术栈
- 2026年03月21日






