设为首页 收藏本站
查看: 1029|回复: 0

[经验分享] Mybatis错误和知识总结

[复制链接]

尚未签到

发表于 2016-11-25 09:15:38 | 显示全部楼层 |阅读模式
  1.功能正常,但是读出来的数据是null
  原因: Mapper.xml中的select语句写错,或者查错了表
  比如我要查的表时student
  结果我的sql语句是 select * from teacher where id=#{id};
  2.报错invalid types () or values ()解决方法 
  原因:
  1) Bean函数中的get/set方法与成员变量不一。
  2) 构造函数被重载过,但是没有空的构造函数。
  3) 最好不要使用简单类型,如int, long等,改用对象模式Integer, Long等。在写条件查询时会用到判断<if xxx !  = null > … </if>的
  根据网上的解答,我发现自己犯了第二条错误, 构造函数被重载过,但是没有空的构造函数。
  那么为什么会这样呢?
  因为mybatis执行sql语句后,会根据反射机制返回一个对象,反射默认是根据空构造函数来构造一个对象的,如果重载了有参数的构造函数,那么缺省空构造函数就没有了,就报错
  3. Mapped Statements collection does not contain value for : 
错误原因有几种: 
3.1、mapper.xml中没有加入namespace 
3.2、mapper.xml中的方法和接口mapper的方法不对应 
3.3、mapper.xml没有加入到mybatis-config.xml中(即总的配置文件),例外:配置了mapper文件的包路径的除外 
3.4、mapper.xml文件名和所写的mapper名称不相同。
  4.查询一个数据用selectOne,查询一堆数据用selectList
  5.用接口和注解的方式,不用写映射文件,但是还是要注册!!!
  6.一对一关联表查询的时候,出现了
  Could not set property 'teacher' of 'class s1.Classes' with value 'teacher [id=1  name=ert]
  出现这种情况的原因就是 我把Classes类中的teacher定义成了int类型
  错误:    private int id;                  正确  private int id;  
           private String name;                 private String name;
           private int teacher;                   private Teacher teacher;
  7.一对一关联表查询的时候,一定要在数据库中先关联表!!!
    代码示例: 
  ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teacher(t_id);
  8.为mybatis配置log4j.properties的方法:
  只要在src目录下创建一个log4j.properties文件,然后设置好代码就好了,非常简单,目录结构如下图
  
DSC0000.png
 
  9.log4j.properties文件的配置代码:

log4j.rootLogger=DEBUG, Console  
#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n  
log4j.logger.java.sql.ResultSet=INFO  
log4j.logger.org.apache=INFO  
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG
  10. mybatis中,一个session对应一个数据库会话,
  在SqlSessionFactory.openSession(true)  //true表示自动提交,false表示关闭自动提交
  所以session有 session.commit()
  session.close()
  session.rollback()
  11.在一次简单查询中,根据日志记录,发现能查到数据,但是myeclipse中显示的结果是null
  后来找了很多资料才发现,实体类的属性名和数据库中字段名不对应,需要告诉编译器
  有2种方式: 
  第一种:
  //注意 顺序很重要,先写字段名,再写属性名, 下面例子中,order_id是表的字段名,id是实体类的属性名
  select order_id id,order_name name,order_price from student where order_id=#{id} 
  第二种:
  方法2: 
 
 <select id="getAllStudent" resultMap="s1.Student">    //将resultType改成resultMap
         select * from student
     </select>
 
  <resultMap type="order" id="getOrderMap">
          <id property="id" column="order_id"  />           //主键用id标示
         <result  property="name" column="order_name"  />    //一般字段用result
         <result  property="price" column="order_price"  /> 
     </resultMap>
  12.mybatis中Mapper.xml中namespace的作用:外部调用需要知道它的namespace,根据namespace找到对应的Mapper.xml,再根据MybatisConfig.xml(Mybatis全局配置文件),找到Mapper的路径,读取其中的内容
  13.报错内容:Type interface s1.MyMapper is already known to the MapperRegistry.
  就是congfi.xml中重复注册了映射文件,去掉重复的就可以了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305291-1-1.html 上篇帖子: spring+mybatis优缺点 下篇帖子: mybatis和spring整合——常用的两种
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表