2 Star 2 Fork 0

蒋固金 / JMapper

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

第一部分 简介

JMapper是基于mybatis通用Mapper的扩展实现,可以让您在使用Mybatis的时候可以像JPA那样通过方法名称定义相关的操作。

第二部分 开始使用

使用JMapper可以直接下载源代码编译或者下载已经编译的jar文件,如果您是使用maven来构建项目,也可以直接在pom.xml中添加JMapper的坐标:

Maven central

<!-- http://mvnrepository.com/artifact/com.jianggujin/JMapper -->
<dependency>
    <groupId>com.jianggujin</groupId>
    <artifactId>JMapper</artifactId>
    <version>最新版本</version>
</dependency>

最新的版本可以从Maven仓库或者码云获取。

2.1 集成JMapper

如果您已经了解通用Mapper的用法,使用JMapper则非常容易,只需要将MapperHelper替换为JMethodExecutorMapperHelper即可。

2.1.1 Java编码方式集成

使用 Java 编码方式时,正常情况下您都会有构建 SqlSessionFactory 的代码。

在创建 SqlSessionFactory 对象或者对应两种配置通用 Mapper 的方法,由于没有提供mybatis-config.xml文件的解析类,这里会推荐使用 创建后 的方式来创建。

2.1.1.1 创建后

//从刚刚创建的 sqlSessionFactory 中获取 session
session = sqlSessionFactory.openSession();
//创建一个MapperHelper
JMethodExecutorMapperHelper mapperHelper = new JMethodExecutorMapperHelper();
mapperHelper.processConfiguration(session.getConfiguration());

2.1.1.2 创建前

创建前就是通过使用 tk.mybatis.mapper.session.Configuration 替换MyBatis中的 org.apache.ibatis.session.Configuration 来实现。配置代码如下:

Configuration configuration = new Configuration();
//这里可以参考上面的方式来配置 MapperHelper
configuration.setMapperHelper(new JMethodExecutorMapperHelper());
sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

2.1.2 Spring方式集成

Spring进行集成时,分为XML注解配置两种方式,每种方式又有不同的配置方式。

2.1.2.1 XML配置

使用MapperScannerConfigurer

<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="扫描包名"/>
    <property name="mapperHelper">
        <bean class="com.jianggujin.mybatis.mapper.JMethodExecutorMapperHelper" />
    </property>
</bean>

使用 Configuration

如果某些第三方也需要特殊的 MapperScannerConfigurer 时,就不能用上面的方式进行配置了,此时可以选择下面这种方式,这种方式要求使用MyBatis (3.4.0+)mybatis-spring (1.3.0+),配置方式如下:

<!--使用 Configuration 方式进行配置-->
<bean id="mybatisConfig" class="tk.mybatis.mapper.session.Configuration">
    <property name="mapperHelper">
        <bean class="com.jianggujin.mybatis.mapper.JMethodExecutorMapperHelper" />
    </property>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configuration" ref="mybatisConfig"/>
</bean>

<!-- 不需要考虑下面这个,注意这里是 org 的 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="tk.mybatis.mapper.configuration"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
2.1.2.2 @MapperScan注解

如果要使用该注解进行配置,请确认选择的是 tk.mybatis.spring.annotation.MapperScan 注解(必须使用官方的注解时,看下面其他配置方式)。

tk 提供的这个注解相比官方的多了下面两个属性:

/**
 * 通用 Mapper 的配置,一行一个配置
 *
 * @return
 */
String[] properties() default {};

/**
 * 还可以直接配置一个 MapperHelper bean
 *
 * @return
 */
String mapperHelperRef() default "";

使用 mapperHelperRef 配置

@Configuration
@MapperScan(value = "tk.mybatis.mapper.annotation", mapperHelperRef = "mapperHelper")
public static class MyBatisConfigRef {
    @Bean
    public MapperHelper mapperHelper() {
        return new JMethodExecutorMapperHelper();
    }
}

使用 Configuration 配置

这里可以使用 tk 或者 MyBatis 官方的 @MapperScan 注解。

@Configuration
@MapperScan(value = "tk.mybatis.mapper.annotation")
public static class MyBatisConfigRef {

    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        //tk.mybatis.mapper.session.Configuration
        Configuration configuration = new Configuration();
        //可以对 MapperHelper 进行配置后
        configuration.setMapperHelper(new JMethodExecutorMapperHelper());
        //设置为 tk 提供的 Configuration
        sessionFactory.setConfiguration(configuration);
        return sessionFactory.getObject();
    }
}

2.1.3 SpringBoot集成

使用SpringBoot方式集成需要使用 @MapperScan注解,具体配置详见2.1.2.2章节。

2.2 方法命名规则

默认情况下,JMapper不会开启方法解析,如果需要启用该功能,只需要使相关Mapper接口实现JMethodExecutorMapper<T>,这样JMapper才会处理自定义的方法,另外,为了让Mybatis扫描时正常识别接口方法,在需要解析的方法上依然需要使用Mybatis的注解,目前JMapper支持@SelectProvider@DeleteProvider注解,对应查询和删除,注解中的type固定为:com.jianggujin.mybatis.mapper.JMethodExecutorProvider.classmethod固定值为:dynamicSQL

public interface CountryMapper extends Mapper<Country>, JMethodExecutorMapper<Country> {
    @SelectProvider(type = JMethodExecutorProvider.class, method = "sql")
    Country findById(Integer id);
}

在执行查询的方法上需要使用@SelectProvider注解,方法名格式为:[(select|find|read|get|query)[Distinct][Exclude][selectProperties]By][whereProperties][OrderBy(orderProperties)]。在执行删除的方法上需要使用@DeleteProvider注解,方法名格式为:(delete|remove)By[whereProperties]

JMapper同样支持通用Mapper的逻辑删除

  • ():表示必选项
  • []:表示可选项
  • Distinct:存在该关键词将为查询语句添加DISTINCT
  • Exclude:存在该关键词表示后面的查询属性为需要排除的
  • selectProperties:该表达式表示需要查询的属性,不存在该部分则默认查询全部属性,属性首字母大写且属性与属性之间需要使用And分隔
  • whereProperties:该表达式表示where条件需要使用的属性,分段条件之间通过OrAnd拼接,Or优先级大于And,分段条件格式为:peoperty[Keyword],属性首字母大写,需要注意的是对应方法形参数量必须与拆分后的条件参数数量一致
  • orderProperties:该表达式表示Order by部分需要使用的属性,属性首字母大写,多个排序条件之间使用AscDesc分隔,如果该部分表达式不存在则是使用通用Mapper默认的排序配置

作为条件可用关键词:

关键词 示例 代码段
IsNotNull
NotNull
findByIdIsNotNull
findByIdNotNull
id is not null
IsNull
Null
findByIdIsNull
findByIdNull
id is null
IsNot
Not
NotEquals
findByIdIsNot
findByIdNot
findByIdNotEquals
id <> ?1
Is
Equals
findByIdIs
findByIdEquals
id = ?1
IsGreaterThan
GreaterThan
findByIdIsGreaterThan
findByIdGreaterThan
id > ?1
IsGreaterThanEqual
GreaterThanEqual
findByIdIsGreaterThanEqual
findByIdGreaterThanEqual
id >= ?1
IsLessThan
LessThan
findByIdIsLessThan
findByIdLessThan
id < ?1
IsLessThanEqual
LessThanEqual
findByIdIsLessThanEqual
findByIdLessThanEqual
id <= ?1
IsBefore
Before
findByIdIsBefore
findByIdBefore
id < ?1
IsBeforeEqual
BeforeEqual
findByIdIsBeforeEqual
findByIdBeforeEqual
id <= ?1
IsAfter
After
findByIdIsAfter
findByIdAfter
id > ?1
IsAfterEqual
AfterEqual
findByIdIsAfterEqual
findByIdAfterEqual
id >= ?1
IsNotIn
NotIn
findByIdIsNotIn
findByIdNotIn
id not in (?1)
IsIn
In
findByIdIsIn
findByIdIn
id in (?1)
IsBetween
Between
findByIdIsBetween
findByIdBetween
id between ?1 and ?2
IsNotBetween
NotBetween
findByIdIsNotBetween
findByIdNotBetween
id not between ?1 and ?2
IsLike
Like
findByIdIsLike
findByIdLike
id like ?1
IsNotLike
NotLike
findByIdIsNotLike
findByIdNotLike
id not like ?1

在使用方法名称解析的时候,在某些情况下可能会导致方法名称冗长,我们可以在方法上面搭配注解来缩短我们的方法名称。存在注解优先级大于方法名称解析结果且不同部分之间互不影响。

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

mybatis通用Mapper增强处理 展开 收起
Java
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/jianggujin/JMapper.git
git@gitee.com:jianggujin/JMapper.git
jianggujin
JMapper
JMapper
master

搜索帮助