На основе MyBatis был создан плагин JPA-Batis, который позволяет проектам, использующим JPA, легко выполнять сложные SQL-запросы так же, как это делается с помощью MyBatis.
Основной целью является поддержка сложных запросов, поэтому поддержка операций insert, update и delete была отключена, а поддерживается только select.
Поскольку плагин основан на MyBatis, синтаксис в файлах mapper.xml полностью совпадает с MyBatis, а взаимодействие с базой данных реализуется через EntityManager из JPA.
Если вам кажется этот плагин полезным, пожалуйста, оставьте звездочку, вы также можете fork проект и доработать его. Если вы считаете, что он бесполезен, не забрасывайте меня камнями, спасибо.
Описание архитектуры программного обеспечения:
Текущая версия основана на Spring Boot 1.5.10.RELEASE. Если вы хотите использовать более новую версию Spring Boot, просто измените версию родителя.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
Добавьте в ваш проект jar-файл JPA-Batis.
<dependency>
<groupId>com.yinsin</groupId>
<artifactId>jpabatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
batis:
mapper: mappers # Предположим, что mapper.xml находится в директории src/main/resources/mappers/
или
batis.mapper=mappers # Предположим, что mapper.xml находится в директории src/main/resources/mappers/
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yinsin.lifechess.domain.game.CllUserGameInfo">
<resultMap id="BaseResultMap" type="java.util.Map">
<result column="row_id" jdbcType="BIGINT" property="rowId" />
<result column="account" jdbcType="VARCHAR" property="account" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="mobile" jdbcType="VARCHAR" property="mobile" />
<result column="email" jdbcType="VARCHAR" property="email" />
<result column="headimage" jdbcType="VARCHAR" property="headimage" />
<result column="status" jdbcType="INTEGER" property="status" />
<result column="game_integral" jdbcType="INTEGER" property="gameIntegral" />
<result column="game_level" jdbcType="INTEGER" property="gameLevel" />
</resultMap>
<select id="loadCChessRankingList" parameterType="String" resultMap="BaseResultMap">
select
ui.row_id, ui.account, ui.name, ui.mobile,
ui.email, ui.headimage, ui.status,
ugi.game_integral, ugi.game_level
from
cll_user_info ui
left join cll_user_game_info ugi
on ui.row_id = ugi.user_id
where ugi.game_no = #{gameNo,jdbcType=VARCHAR}
order by ugi.game_integral desc,
ugi.game_level desc,
ui.lastlogindate desc
</select>
</mapper>
@JpaMapper
private JpaSession session;
Map<String, Object> param = new HashMap<>();
param.put("gameNo", "xx");
// mapperid -> пространство имён маппера + id тэга <select>
// Например: com.yinsin.lifechess.domain.game.CllUserGameInfo.loadCChessRankingList
Map<String, Object> result = session.selectOne("mapperid", param);
// TODO ...
Map<String, Object> param = new HashMap<>();
param.put("gameNo", "xx");
// mapperid -> пространство имён маппера + id тэга <select>
// Например: com.yinsin.lifechess.domain.game.CllUserGameInfo.loadCChessRankingList
List<Map<String, Object>> dataList = session.selectList("mapperid", param);
// TODO ...
// Различие между пагинационным и непагинационным запросами заключается в параметре Pageable
Map<String, Object> param = new HashMap<>();
param.put("gameNo", "xx");
Pageable pageable = new PageRequest(0, 10); // Для версий 1.x
//Pageable pageable = Pageable.of(0, 10); // Для версий 2.x
// mapperid -> пространство имён маппера + id тэга <select>
// Например: com.yinsin.lifechess.domain.game.CllUserGameInfo.loadCChessRankingList
Page<Map<String, Object>> dataList = session.selectList("mapperid", param, pageable);
// TODO ...
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )