Mybatis解决字段与属性不匹配的问题、链表查询、嵌套查询、#{}和${}的区别

1.使用接口结合xml映射文件
  1. 创建一个接口,该接口要和映射文件匹配(接口中方法名要和映射文件中的id相同)
  2. 映射文件中命名空间要和接口全类名相同
  3. 测试:
    • 1732444-20190829201824395-459965215.png
  4. 1732444-20190829201855313-1961504774.png
  5. 创建一个与src同级的源文件夹resources,将配置文件、映射文件、日志属性文件放进去

    2.解决字段与属性不匹配
  6. 1732444-20190829201913478-573177650.png
    1. 映射文件中的namespace与接口不对照
    2. 你的映射文件没有加入到配置文件中
  7. 解决字段与属性不匹配:
    1. 在sql语句中为表中的字段取别名,取名为bean中的属性名
      1732444-20190829201932328-1300822226.png
    2. resultMap:引用resultMap标签,resultMap标签中写属性与字段的对应关系,id标签表示表中的主键与实体类中的属性的对应关系,result标签表示表中不是主键的字段与实体类中的属性的对应关系,type表示哪个实体类与表的对应关系
      1732444-20190829201956094-530539279.png

      3.联表查询
  8. 比如根据班级id查询班级信息(关联老师的信息)
    1. 联表查询
      1. teacher bean 类
      2. classbean类
        1732444-20190829202034495-1025716298.png
      3. 映射文件
        1732444-20190829202100025-984874568.png
      4. no suchmethodexception :没有加无参构造函数
    2. 嵌套查询
      1. 1732444-20190829202130565-1149687574.png
      2. 1732444-20190829202145355-1176884070.png
      3. 1732444-20190829202157260-1058038136.png
  9. 根据班级id查询班级的学生以及老师(一对多)
    1. 联表查询
      1. 创建Students的bean类,如果bean类中重写了构造函数那么需要添加无参的构造函数
      2. 在class的bean类中添加private List<Students> students;属性并且添加get、set方法
        1732444-20190829202218276-1629206443.png
      3. class的映射文件
        1732444-20190829202236183-1411012296.png

        4. mybatis中$和#的区别(https://www.cnblogs.com/teach/p/5685545.html)
  10. #{} 
    • 使用#{}意味着使用的预编译的语句,即在使用jdbc时的preparedStatement,sql语句中如果存在参数则会使用?作占位符,我们知道这种方式可以防止sql注入,并且在使用#{}时形成的sql语句,已经带有引号,例,select  * from table1 where id=#{id}  在调用这个语句时我们可以通过后台看到打印出的sql为:select * from table1 where id='2' 加入传的值为2.也就是说在组成sql语句的时候把参数默认为字符串。
  11. ${}
    • 使用${}时的sql不会当做字符串处理,是什么就是什么,如上边的语句:select * from table1 where id=${id} 在调用这个语句时控制台打印的为:select * from table1 where id=2 ,假设传的参数值为2从上边的介绍可以看出这两种方式的区别,我们最好是能用#{}则用它,因为它可以防止sql注入,且是预编译的,在需要原样输出时才使用${},如,select * from ${tableName} order by ${id} 这里需要传入表名和按照哪个列进行排序 ,加入传入table1、id 则语句为:select * from table1 order by id如果是使用#{} 则变成了select * from 'table1' order by 'id' 我们知道这样就不对了。

转载于:https://www.cnblogs.com/wuliqqq/p/11431815.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值