• 【Mybatis】xml常用总结(持续更新)


    目录

    一、常用增删改查

    查询(SELECT)操作

    插入(INSERT)操作

    更新(UPDATE)操作

    删除(DELETE)操作

    批量插入(INSERT)操作

    批量删除(DELETE)操作

    批量更新(UPDATE)操作

    参数传递

    结果映射

    动态SQL

    二、常用关键词总结

    关键字表格总结

    SQL举例

    三、其他一些总结

    处理数据转数据

    生成指定表的insert语句


    一、常用增删改查

    下面是关于MyBatis XML配置中增删改查以及批量操作的常用写法总结:

    查询(SELECT)操作

    1. <select id="getUserById" resultType="com.example.User">
    2. SELECT * FROM users WHERE id = #{id}
    3. select>
    4. <select id="queruByIds" parameterType="com.example.User" resultType="com.example.User">
    5. SELECT *
    6. where id in
    7. <foreach collection="list" item="item" open="(" close=")" separator=",">
    8. #{item}
    9. foreach>;
    10. select>

    这个示例中,`getUserById`是查询操作的唯一标识符,`resultType`指定了返回结果的类型。

    插入(INSERT)操作

    1. <insert id="insertUser" parameterType="com.example.User">
    2. INSERT INTO users (id, name, email) VALUES (#{id}, #{name}, #{email})
    3. insert>

    这个示例中,`insertUser`是插入操作的唯一标识符,`parameterType`指定了传入参数的类型。

    更新(UPDATE)操作

    1. <update id="updateUser" parameterType="com.example.User">
    2. UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
    3. update>

    这个示例中,`updateUser`是更新操作的唯一标识符,`parameterType`指定了传入参数的类型。

    删除(DELETE)操作

    1. <delete id="deleteUserById" parameterType="int">
    2. DELETE FROM users WHERE id = #{id}
    3. delete>

    这个示例中,`deleteUserById`是删除操作的唯一标识符,`parameterType`指定了传入参数的类型。

    批量插入(INSERT)操作

    1. <insert id="batchInsert" parameterType="java.util.List">
    2. INSERT INTO users (id, name, email)
    3. VALUES
    4. <foreach collection="list" item="user" separator=",">
    5. (#{user.id}, #{user.name}, #{user.email})
    6. foreach>
    7. insert>

    这个示例中,`insertUsers`是批量插入操作的唯一标识符,`parameterType`指定了传入参数的类型。使用``标签来循环遍历传入的列表进行批量插入。

    批量删除(DELETE)操作

    1. <delete id="deleteUsersByIds" parameterType="java.util.List">
    2. DELETE FROM users WHERE id IN
    3. <foreach collection="list" item="id" open="(" close=")" separator=",">
    4. #{id}
    5. foreach>
    6. delete>
    7. <update id="batchDel">
    8. update table_name set deleted = 1
    9. where deleted = 0
    10. <if test="list!=null and list.size != 0 ">
    11. and id in
    12. <foreach collection="list" item="item" open="(" separator="," close=")">
    13. #{item}
    14. foreach>
    15. if>
    16. update>

    这个示例中,`deleteUsersByIds`是批量删除操作的唯一标识符,`parameterType`指定了传入参数的类型。使用``标签来循环遍历传入的列表进行批量删除。

    批量更新(UPDATE)操作

    1. <update id="updateUsers" parameterType="java.util.List">
    2. <foreach collection="list" item="user" separator=";">
    3. UPDATE users SET name = #{user.name}, email = #{user.email} WHERE id = #{user.id}
    4. foreach>
    5. update>

    这个示例中,`updateUsers`是批量更新操作的唯一标识符,`parameterType`指定了传入参数的类型。使用``标签来循环遍历传入的列表进行批量更新。

    参数传递

    在上述示例中,使用了`#{parameter}`语法来引用传入的参数。例如,`#{id}`引用了传入参数中的`id`字段。

    结果映射

    使用`resultType`指定查询结果的类型,或者使用`resultMap`来进行更复杂的结果映射。

    动态SQL

    MyBatis支持动态SQL,可以根据条件生成不同的SQL语句。例如,使用``、``、``和``等标签来编写动态SQL。

    这些是一些常用的MyBatis XML配置写法总结,涵盖了增删改查等操作。您可以根据具体需求和情况进行相应的配置和使用。

    二、常用关键词总结

    关键字表格总结

    关键字释义简单SQL示例
    SELECT从数据库中检索数据SELECT * FROM 表名;
    INSERT将数据插入到表中INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);
    UPDATE更新表中的数据UPDATE 表名 SET 列名 = 值 WHERE 条件;
    DELETE从表中删除数据DELETE FROM 表名 WHERE 条件;
    CREATE创建新的表、视图等CREATE TABLE 表名 (列1 数据类型, 列2 数据类型);
    ALTER修改现有表的结构ALTER TABLE 表名 ADD 列名 数据类型;
    DROP删除表、视图等DROP TABLE 表名;
    TRUNCATE快速删除表中数据TRUNCATE TABLE 表名;
    FROM指定数据源表SELECT * FROM 表名;
    WHERE指定查询条件SELECT * FROM 表名 WHERE 条件;
    GROUP BY对结果进行分组SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名;
    HAVING对分组结果进行条件过滤SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名 HAVING 条件;
    ORDER BY对结果进行排序SELECT * FROM 表名 ORDER BY 列名 ASC/DESC;
    JOIN将多个表连接起来查询SELECT * FROM 表1 JOIN 表2 ON 表1.列 = 表2.列;
    UNION合并多个查询结果集SELECT 列名 FROM 表1 UNION SELECT 列名 FROM 表2;
    DISTINCT返回唯一的查询结果SELECT DISTINCT 列名 FROM 表名;
    INDEX创建索引以提高查询性能CREATE INDEX 索引名 ON 表名 (列名);
    PRIMARY KEY定义表中的主键CREATE TABLE 表名 (列1 数据类型 PRIMARY KEY, 列2 数据类型);
    FOREIGN KEY定义表之间的外键关系CREATE TABLE 表1 (列1 数据类型, 列2 数据类型, FOREIGN KEY (列1) REFERENCES 表2(列2));
    CONSTRAINT定义表的约束条件CREATE TABLE 表名 (列1 数据类型, 列2 数据类型, CONSTRAINT 约束名 PRIMARY KEY (列1));
    LIMIT限制查询结果的数量SELECT * FROM 表名 LIMIT 数量;
    OFFSET偏移查询结果的行数SELECT * FROM 表名 LIMIT 数量 OFFSET 偏移量;
    BETWEEN在范围内进行条件判断SELECT * FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2;
    IN在一组值中进行条件判断SELECT * FROM 表名 WHERE 列名 IN (值1, 值2, 值3);
    LIKE根据模式匹配进行条件判断SELECT * FROM 表名 WHERE 列名 LIKE '模式';
    NOT对条件取反SELECT * FROM 表名 WHERE NOT 条件;
    IS NULL判断值是否为空SELECT * FROM 表名 WHERE 列名 IS NULL;
    EXISTS判断子查询是否返回结果SELECT * FROM 表1 WHERE EXISTS (SELECT * FROM 表2 WHERE 条件);
    CASE条件表达式SELECT 列名, CASE WHEN 条件 THEN 值 ELSE 值 END AS 别名 FROM 表名;
    WHENCASE语句中的条件SELECT 列名, CASE 列名 WHEN 值1 THEN 值2 WHEN 值3 THEN 值4 ELSE 值5 END AS 别名 FROM 表名;
    THENCASE语句中的结果SELECT 列名, CASE WHEN 条件 THEN 值1 ELSE 值2 END AS 别名 FROM 表名;
    ELSECASE语句中的默认结果SELECT 列名, CASE WHEN 条件 THEN 值 ELSE 值 END AS 别名 FROM 表名;
    ENDCASE语句结束标记SELECT 列名, CASE WHEN 条件 THEN 值1 ELSE 值2 END AS 别名 FROM 表名;
    AS为列或表起别名SELECT 列名 AS 别名 FROM 表名;
    ON指定连接条件SELECT * FROM 表1 JOIN 表2 ON 表1.列 = 表2.列;
    ASC升序排序SELECT * FROM 表名 ORDER BY 列名 ASC;
    DESC降序排序SELECT * FROM 表名 ORDER BY 列名 DESC;
    AVG计算平均值SELECT AVG(列名) FROM 表名;
    SUM计算总和SELECT SUM(列名) FROM 表名;
    COUNT计算行数SELECT COUNT(*) FROM 表名;
    MAX计算最大值SELECT MAX(列名) FROM 表名;
    MIN计算最小值SELECT MIN(列名) FROM 表名;
    IFNULL判断并返回非空值SELECT IFNULL(列名, 替代值) FROM 表名;
    COALESCE返回第一个非空值SELECT COALESCE(列1, 列2, 列3) FROM 表名;
    DATE提取日期部分SELECT DATE(列名) FROM 表名;
    NOW返回当前日期和时间SELECT NOW();
    CURDATE返回当前日期SELECT CURDATE();
    CURTIME返回当前时间SELECT CURTIME();
    YEAR提取年份部分SELECT YEAR(列名) FROM 表名;
    MONTH提取月份部分SELECT MONTH(列名) FROM 表名;
    DAY提取天数部分SELECT DAY(列名) FROM 表名;
    HOUR提取小时部分SELECT HOUR(列名) FROM 表名;
    MINUTE提取分钟部分SELECT MINUTE(列名) FROM 表名;
    SECOND提取秒数部分SELECT SECOND(列名) FROM 表名;
    CONCAT连接字符串SELECT CONCAT(列1, 列2) FROM 表名;
    SUBSTRING提取子字符串SELECT SUBSTRING(列名, 开始位置, 长度) FROM 表名;
    LENGTH计算字符串长度SELECT LENGTH(列名) FROM 表名;
    UPPER转换为大写字母SELECT UPPER(列名) FROM 表名;
    LOWER转换为小写字母SELECT LOWER(列名) FROM 表名;
    TRIM去除字符串两端的空格SELECT TRIM(列名) FROM 表名;

    SQL举例

    1. <select id="select"
    2. resultType="com.god.demo.app.entity.vo.DemoVo"
    3. parameterType="com.god.demo.app.entity.dto.DemoDTO">
    4. SELECT
    5. -- 加序号 @i := @i + 1 AS row,( SELECT @i := 0 ) r
    6. @i := @i + 1 AS row,
    7. ac.`name` companyName,
    8. ac.`name` nnn,
    9. ad.`name` departmentName,
    10. sus.userName creatorName,
    11. -- case when then else end
    12. CASE
    13. WHEN NOW() <= su.effective_start_time THEN "未生效"
    14. WHEN NOW() >= su.effective_start_time AND NOW() < su.effective_end_time THEN "生效中"
    15. WHEN NOW() >= su.effective_end_time THEN "已过期"
    16. ELSE NULL
    17. END effectiveStatus,
    18. concat( TRUNCATE ( IFNULL( su.user_integral / su.user_integral, 0 ) * 100, 2 ), '%' ) ratio,
    19. -- 想要的时间格式
    20. DATE_FORMAT( su.create_time, '%Y-%m-%d %H:%I:%s' ) createTime1,
    21. DATE_FORMAT( su.create_time, '%Y-%m-%d %H:%I' ) createTime2,
    22. DATE_FORMAT( su.create_time, '%Y-%m-%d %H' ) createTime3,
    23. DATE_FORMAT( su.create_time, '%Y-%m-%d' ) createTime4,
    24. DATE_FORMAT( su.create_time, '%Y-%m' ) createTime5,
    25. DATE_FORMAT( su.create_time, '%Y' ) createTime6,
    26. -- 关联俩字段
    27. concat_ws( '-', su.create_time, su.create_time ) time,
    28. -- 符号转义方法1:
    29. CASE
    30. WHEN su.user_integral 1000 THEN '普通会员'
    31. WHEN su.user_integral = 1000 AND su.user_integral <= ]]> 10000 THEN '黄金会员'
    32. WHEN su.user_integral = 10000 AND su.user_integral <= ]]> 20000 THEN '钻石会员'
    33. WHEN su.user_integral = ]]> 20000 THEN '星钻会员'
    34. ELSE '普通用户' END integralLevel,
    35. su.overage amount,
    36. su.*
    37. FROM
    38. sys_user su
    39. LEFT JOIN app_company ac ON su.company_id = ac.id
    40. LEFT JOIN app_department ad ON su.department_id = ad.id
    41. LEFT JOIN (SELECT s.id, s.`name` userName FROM sys_user s WHERE s.del_flag = '0' AND s.`status` = '1' AND
    42. DATE_FORMAT( s.create_time, '%Y' )= '2020' ) sus ON su.creator_id = sus.id,
    43. ( SELECT @i := 0 ) r
    44. <where>
    45. su.del_flag='0'
    46. <if test="companyId != null and companyId !=''">
    47. AND su.company_id=#{companyId}
    48. if>
    49. <if test="departmentId != null and departmentId !=''">
    50. AND su.department_id=#{departmentId}
    51. if>
    52. <if test="postId != null and postId !=''">
    53. AND su.post_id=#{postId}
    54. if>
    55. <if test="level != null and level !=''">
    56. AND su.user_level=#{level}
    57. if>
    58. -- 模糊比较
    59. <if test="name != null and name !=''">
    60. AND su.name like CONCAT('%', #{name,jdbcType=VARCHAR}, '%')
    61. if>
    62. <if test="email != null and email !=''">
    63. AND su.email like CONCAT('%', #{email,jdbcType=VARCHAR}, '%')
    64. if>
    65. <if test="phone != null and phone !=''">
    66. AND su.phone like CONCAT('%', #{phone}, '%')
    67. if>
    68. -- 字符转义1:
    69. <if test="businessStartDate != null">
    70. and t.business_date = ]]> #{businessStartDate}
    71. if>
    72. <if test="businessStartDate != null">
    73. and t.business_date >= #{businessStartDate}
    74. if>
    75. <if test="businessEndDate != null">
    76. and
    77. if>
    78. -- 字符转义2 < >
    79. <if test="age != null and age != ''">and age >= #{age}if>
    80. -- 数组判空
    81. <if test="phoneArray != null and phoneArray.length > 0">
    82. and 1=1
    83. if>
    84. -- 集合判空
    85. <if test="phoneList != null and phoneList.size() > 0">
    86. AND su.phone in
    87. <foreach collection="phoneList" index="index" item="item" open="(" separator="," close=")">
    88. #{item}
    89. foreach>
    90. if>
    91. <if test="statusList!=null">
    92. and status in
    93. <foreach collection="statusList" item="item" open="(" separator="," close=")">
    94. #{item}
    95. foreach>
    96. if>
    97. -- 集合模糊匹配
    98. <if test="happys != null and happys.size != 0">
    99. and
    100. <foreach collection="happys" item="happy" open="(" separator=" or " close=")">
    101. happy like concat('%', #{happy}, '%')
    102. foreach>
    103. if>
    104. <include refid="Base_date_param"/>
    105. where>
    106. ORDER BY
    107. su.create_time
    108. select>

    三、其他一些总结

    处理数据转数据

    1. <insert id="insertUser">
    2. INSERT INTO demo1 ( `id`, `name`, `age`, `company`, `department`, `level`, `deleted` ) SELECT
    3. `c_id` id,
    4. `first_name` NAME,
    5. 18 age,
    6. "阿凡哒" company,
    7. "xx" department,
    8. 1 LEVEL,
    9. '0' deleted
    10. FROM
    11. demo2
    12. WHERE
    13. deleted = '0'
    14. insert>

    生成指定表的insert语句

    1. SELECT
    2. CONCAT( 'INSERT INTO table_name (id,name,age,company,department,deleted) VALUES(', id, ', "', NAME, '", "', age, '", "', company, '", "', department, '", ', deleted, ');' ) AS insert_statement
    3. FROM
    4. table_name
    5. WHERE
    6. deleted = 0;

    欢迎大佬们留言补充!

  • 相关阅读:
    网络基础概论
    世界粮食日:宏工科技有对策,赋能食品生产高效可持续发展
    安装MinGW win安装gcc
    Python中的逻辑表达式
    【NowCoder】左程云-设计getMin功能的栈
    充气泵方案设计—汽车打气泵方案开发
    数据库的基本概念
    【Unity3D】选中物体描边特效
    最新背诵版 Java 面经汇总囊括了基本所有考点(建议收藏)
    PaddleClas学习2——使用PPLCNet模型对车辆朝向进行识别(python)
  • 原文地址:https://blog.csdn.net/libusi001/article/details/134155913