ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Mapper XML的写法 [Mybatis]

2020-12-30 11:04:25  阅读:283  来源: 互联网

标签:XML Mapper PARAM biz https Mybatis params where ID


MyBatis中文文档:https://mybatis.org/mybatis-3/zh/index.html

博客:https://blog.csdn.net/lj1314ailj/article/details/79712305


 

MyBatis的强大在于映射语句,针对SQL构建,比JDBC节约代码。

SQL映射文件的顶级元素:

cache、cache-ref

resultMap 最复杂最强大的元素,用来描述如何从数据库结果 集中来加载对象。
sql 可被其他语句引用的 可重用语句块

    <resultMap id="resultMapInput" type="domain.InputDo" >
        <id column="PARAM_ID" property="paramId"/>
        <result column="PLAN_ID" property="planId"/>
        <result column="PARAM_NAME" property="paramName"/>
        <result column="VALUE" property="value"/>
        <result column="PARAM_UNIT" property="paramUnit"/>
    </resultMap>
//使用resultMap进行映射:左边一排colomn是数据库里面的名称,右边是java后端里面的驼峰式;

 

然后可以在后面多次使用:

    <select id="getParamInput" resultMap="resultMapInput">
        select ID as PARAM_ID,PARAM_NAME,PARAM_UNIT,PARAM_PART from t_biz_params
        where PARAM_MODULE = #{paramModule} and DEL_FLAG = 0 order by ORDER_NUM
    </select>

    <select id="getParamInputAndValue" resultMap="resultMapInput">
        select t_biz_params.ID as PARAM_ID,t_biz_params.PARAM_NAME,t_biz_params.PARAM_UNIT,t_biz_params.PARAM_PART,t_biz_plan_input.VALUE
        from t_biz_params,t_biz_plan_input
        where t_biz_plan_input.PLAN_ID=#{planId}
        and t_biz_plan_input.PARAM_ID = t_biz_params.ID
        and t_biz_params.PARAM_MODULE = #{paramModule}
        and t_biz_plan_input.DEL_FLAG =0 and t_biz_params.DEL_FLAG=0
        order by t_biz_params.ORDER_NUM
    </select>

  


 

namespace

  

  这个要与dao文件对应起来,类似于mapper.xml来实现dao文件里的抽象方法

 

select 

<select id="selectPerson" parameterType="int" resultType="hashmap">
  SELECT * FROM PERSON WHERE ID = #{id}
</select>    

id: 对应方法的名字(与dao文件中的方法名字对应) selectPerson,
parameterType: 接受一个 int(或 Integer)类型的参数,
resultType: 返回一个 HashMap 类型的对象,

 

insert  update  delete

 

 

 

 


 动态SQL


  动态SQL根据不同条件生成不同的SQL语句。

  动态 sql 语句的编写往往就是一个拼接的问题,为了保证拼接准确,我们最好首先要写原生的 sql 语句出来,然后在通过 mybatis 动态sql 对照着改,防止出错。

  • if
  • choose (when,otherwise)
  • trim (where,set)
  • foreach

 

if  如果满足条件,会追加if后面的SQL语句

   

 

 select会用到where:

  

 

 update会用到set (不举例了)

 

 

choose (when*n个,otherwise)

  相当于java里面的switch  case break;(遇到符合的一个后不会继续往下,而普通的case需要break来拦截继续向下)

  

trim (where,set)

  trim用于改写上面的where、set:

  • where-->trim
  • set-->trim

  

  

 

   

   

 

foreach

  foreach关键字:

  

  1)

   

  

   2)

   

  

 

 


 Mybatis缓存


 

适合缓存的场景:

  查询多,改变少【读多写少】

 

Mybatis缓存

  

 

  查询时:

    先找二级缓存(硬盘) ==》一级缓存(内存)==》数据库

    一级缓存在内存,二级缓存在硬盘

 

一级缓存

   

 

  一级缓存是个Map

  使用场景:一个用户不断刷新页面

 

二级缓存

  

 

  在mapper.xml里面加上:

  60s刷新,最多512个引用,返回对象只读

  

 

  我们需要使用SqlSession对象的close()方法(关闭连接),达到手动序列化:

session.close();//手动序列化二级缓存:关闭会话,让一级缓存==》二级缓存中

 

 

ehcache  用在Hibernate多;

后面重点学redis就好了

https://www.bilibili.com/video/BV1NE411Q7Nx?p=30

 

 


日志


日志工厂

   如果数据库操作,出现bug,日志帮助排错

 

下面是两种常用的日志: 

STDOUT_LOGGING  标准日志输出

   在中引入:

  

  打印整个使用数据库的流程:

   https://www.bilibili.com/video/BV1NE411Q7Nx?p=11   13:23

 

Log4j  

配置步骤:

  1.  导入log4j的包(maven)

  2.  log4j.properties(详细配置)

  3.  在中引入:注意:LOG4J全大写

使用步骤:

  

   

   

    

 

 


多对一 association

  比如多个学生对应一个老师

  在domain里面:

  

 查询学生信息,以及学生对应老师的信息:

   

 完整的pid子查询(重要,记忆):

 

 对应的mapper.xml:

  1.  按照查询嵌套(子查询)处理:

   https://www.bilibili.com/video/BV1NE411Q7Nx?p=20    12:38

 

  

 

   2.  按照结果嵌套(联表查询)处理:

    结果是Student类型:

    

   https://www.bilibili.com/video/BV1NE411Q7Nx?p=20    22:28

 

  

 一对多 collection

   

 

   

 

 不清楚再回去看看:https://www.bilibili.com/video/BV1NE411Q7Nx?p=21

 

 

 


 


sqlSessionFactory:

 

https://www.bilibili.com/video/BV1NE411Q7Nx?p=9    7:43+10:39

 

  我写的时候并没有遇到??

 

配置解析

  核心配置文件mybatis-config.xml

  

   https://www.bilibili.com/video/BV1NE411Q7Nx?p=6      1:47

 

 

 


 


 Junit中测试代码:

(不写测试类行不行??)

我写的时候,因为mabatis和controller、service层都比较简答,所以就直接全部走通、用postman来测试的;

如果各个部分比较复杂的话,可以从中间切断、直接像这样来测dao+mybatis部分的代码:

  

增删改(查不用)需要提交事务:

   

 


 一些杂碎的技术细节:

  mybatis.xml里面 &amp;相当于and

 

 

 

 resource用斜杠隔开;class用点隔开;

 


${} 存在sql注入的风险。

  • 如果传入的是基础数据类型; 大括号中只能写一个叫做value, 也就是说${value};
  • 如果传入的pojo或者map类型, 那么只能写属性名或key名:${username};

#{} 防止sql注入风险:如果传入的是字符串;预编译时会自动带上单引号'

 


 

子句的 书写 顺序

SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY

子句的 执行 顺序:

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

 

HAVING和WHERE的区别:在GROUP BY的前后

GROUP BY的作用是按属性(列)进行分组【通常针对COUNT/MAX/...】

HAVING和WHERE都是针对行的筛选

 


JOIN 和 UNION 的理解:

  • 表的加法 (UNION)  //行数变多
  • 以列为单位对表进行联结 (JOIN)     //属性变多(横向扩展)//如果没有where进行筛选,就是笛卡尔积

//内连接:两张表的连接id都有的记录(行)才可以

//左连接:左表的每行只多不少,不匹配的就使右表相应字段为空

https://blog.csdn.net/ljxfblog/article/details/52066006

 


 MyBatis 快速入门(实操):https://www.jianshu.com/p/c77e3691867d

标签:XML,Mapper,PARAM,biz,https,Mybatis,params,where,ID
来源: https://www.cnblogs.com/qyf2199/p/13817000.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有