mapper.py.vm 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. # -*- coding: utf-8 -*-
  2. # @Author : {{ table.function_author }}
  3. # @FileName: {{ underscore(table.class_name) }}_mapper.py
  4. # @Time : {{ datetime }}
  5. from typing import List
  6. from datetime import datetime
  7. from sqlalchemy import select, update, delete, func
  8. from ruoyi_admin.ext import db
  9. from {{ get_import_path(table.package_name, table.module_name, 'domain') }} import {{ table.class_name }}
  10. class {{ table.class_name }}Mapper:
  11. """{{ table.function_name }}Mapper"""
  12. @staticmethod
  13. def select_list({{ table.business_name }}: {{ table.class_name }}) -> List[{{ table.class_name }}]:
  14. """
  15. 查询{{ table.function_name }}列表
  16. Args:
  17. {{ table.business_name }} ({{ table.class_name }}): {{ table.function_name }}对象
  18. Returns:
  19. List[{{ table.class_name }}]: {{ table.function_name }}列表
  20. """
  21. try:
  22. # 构建查询条件
  23. stmt = select({{ table.class_name }})
  24. {% for column in table.columns %}
  25. {% if column.is_query and column.query_type == 'EQ' %}
  26. if {{ table.business_name }}.{{ underscore(column.java_field) }} is not None:
  27. stmt = stmt.where({{ table.class_name }}.{{ underscore(column.java_field) }} == {{ table.business_name }}.{{ underscore(column.java_field) }})
  28. {% elif column.is_query and column.query_type == 'LIKE' %}
  29. if {{ table.business_name }}.{{ underscore(column.java_field) }}:
  30. stmt = stmt.where({{ table.class_name }}.{{ underscore(column.java_field) }}.like("%" + str({{ table.business_name }}.{{ underscore(column.java_field) }}) + "%"))
  31. {% endif %}
  32. {% endfor %}
  33. # 添加分页条件
  34. if {{ table.business_name }}.page_num and {{ table.business_name }}.page_size:
  35. offset = ({{ table.business_name }}.page_num - 1) * {{ table.business_name }}.page_size
  36. stmt = stmt.offset(offset).limit({{ table.business_name }}.page_size)
  37. result = db.session.execute(stmt).scalars().all()
  38. return list(result) if result else []
  39. except Exception as e:
  40. print(f"查询{{ table.function_name }}列表出错: {e}")
  41. return []
  42. @staticmethod
  43. def select_count({{ table.business_name }}: {{ table.class_name }}) -> int:
  44. """
  45. 查询{{ table.function_name }}总数
  46. Args:
  47. {{ table.business_name }} ({{ table.class_name }}): {{ table.function_name }}对象
  48. Returns:
  49. int: {{ table.function_name }}总数
  50. """
  51. try:
  52. stmt = select(func.count({{ table.class_name }}.{{ underscore(table.pk_column.java_field) if table.pk_column }}))
  53. {% for column in table.columns %}
  54. {% if column.is_query and column.query_type == 'EQ' %}
  55. if {{ table.business_name }}.{{ underscore(column.java_field) }} is not None:
  56. stmt = stmt.where({{ table.class_name }}.{{ underscore(column.java_field) }} == {{ table.business_name }}.{{ underscore(column.java_field) }})
  57. {% elif column.is_query and column.query_type == 'LIKE' %}
  58. if {{ table.business_name }}.{{ underscore(column.java_field) }}:
  59. stmt = stmt.where({{ table.class_name }}.{{ underscore(column.java_field) }}.like("%" + str({{ table.business_name }}.{{ underscore(column.java_field) }}) + "%"))
  60. {% endif %}
  61. {% endfor %}
  62. result = db.session.execute(stmt).scalar()
  63. return result if result else 0
  64. except Exception as e:
  65. print(f"查询{{ table.function_name }}总数出错: {e}")
  66. return 0
  67. {% if table.pk_column %}
  68. @staticmethod
  69. def select_by_id({{ underscore(table.pk_column.java_field) }}: int) -> {{ table.class_name }}:
  70. """
  71. 根据ID查询{{ table.function_name }}
  72. Args:
  73. {{ underscore(table.pk_column.java_field) }} (int): {{ table.pk_column.column_comment }}
  74. Returns:
  75. {{ table.class_name }}: {{ table.function_name }}对象
  76. """
  77. try:
  78. stmt = select({{ table.class_name }}).where({{ table.class_name }}.{{ underscore(table.pk_column.java_field) }} == {{ underscore(table.pk_column.java_field) }})
  79. result = db.session.execute(stmt).scalar_one_or_none()
  80. return result
  81. except Exception as e:
  82. print(f"根据ID查询{{ table.function_name }}出错: {e}")
  83. return None
  84. {% endif %}
  85. @staticmethod
  86. def insert({{ table.business_name }}: {{ table.class_name }}) -> int:
  87. """
  88. 新增{{ table.function_name }}
  89. Args:
  90. {{ table.business_name }} ({{ table.class_name }}): {{ table.function_name }}对象
  91. Returns:
  92. int: 插入的记录数
  93. """
  94. try:
  95. # 设置创建时间和更新时间
  96. now = datetime.now()
  97. {{ table.business_name }}.create_time = now
  98. {{ table.business_name }}.update_time = now
  99. db.session.add({{ table.business_name }})
  100. db.session.commit()
  101. return 1
  102. except Exception as e:
  103. db.session.rollback()
  104. print(f"新增{{ table.function_name }}出错: {e}")
  105. return 0
  106. {% if table.pk_column %}
  107. @staticmethod
  108. def update({{ table.business_name }}: {{ table.class_name }}) -> int:
  109. """
  110. 修改{{ table.function_name }}
  111. Args:
  112. {{ table.business_name }} ({{ table.class_name }}): {{ table.function_name }}对象
  113. Returns:
  114. int: 更新的记录数
  115. """
  116. try:
  117. # 设置更新时间
  118. {{ table.business_name }}.update_time = datetime.now()
  119. # 使用ORM方式更新数据
  120. db.session.merge({{ table.business_name }})
  121. db.session.commit()
  122. return 1
  123. except Exception as e:
  124. db.session.rollback()
  125. print(f"修改{{ table.function_name }}出错: {e}")
  126. return 0
  127. @staticmethod
  128. def delete_by_ids(ids: List[int]) -> int:
  129. """
  130. 批量删除{{ table.function_name }}
  131. Args:
  132. ids (List[int]): ID列表
  133. Returns:
  134. int: 删除的记录数
  135. """
  136. try:
  137. stmt = delete({{ table.class_name }}).where({{ table.class_name }}.{{ underscore(table.pk_column.java_field) }}.in_(ids))
  138. result = db.session.execute(stmt)
  139. db.session.commit()
  140. return result.rowcount
  141. except Exception as e:
  142. db.session.rollback()
  143. print(f"批量删除{{ table.function_name }}出错: {e}")
  144. return 0
  145. {% endif %}