在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:JpaMapper开源软件地址:https://gitee.com/ffch/JpaMapper开源软件介绍:JpaMapper项目简介
那就用JpaMapper吧!JpaMapper是尽量按照JPA hibernate的书写风格,对mybatis进行封装,是CRUD操作更加简单易用,免于不断写sql。 JpaMapper以动态生成sql替换手动生成sql的过程,并根据注解生成sqlsource的过程去生成sql,并将sql交给mybatis去管理,原理上和自己写sql是一致的,并不会去替换mybatis的底层实现。因为不用担心无法操控,任何可能出现的问题,只需要debug下查看生成的sql和预期的是否一致即可。 主要功能v1.0.0:
v1.1
v1.2
v1.2.1
v1.2.2
v2.0
v2.1
使用说明jar包已经上传到maven中央仓库。https://search.maven.org/search?q=jpa-mapper ,groupId为cn.pomit。详细使用说明可以在项目主页里查看,也可以在个人博客JpaMapper目录下查看 Demo地址SpringBoot: Spring: Maven依赖使用mybatis 3.4.4进行分页存在类型转换错误,因此JpaMapper需要引入spring-mybatis版本1.3.2以上,或者引入mybatis 3.4.6以上。 springboot启动<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version></dependency><dependency> <groupId>cn.pomit</groupId> <artifactId>jpa-mapper-spring-boot-starter</artifactId> <version>2.1</version></dependency> Spring启动<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version></dependency><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.2</version></dependency><dependency> <groupId>cn.pomit</groupId> <artifactId>jpa-mapper-core</artifactId> <version>2.1</version></dependency> 使用@Configuration配置JpaMapper,@Autowired注入List<SqlSessionFactory> sqlSessionFactoryList。 如果存在bean的生成顺序问题,导致SqlSessionFactory注入后并没有mapper信息,需要使用@DependsOn或者@Order注解调整JpaMapperConfig的生成顺序; Spring的@Order注解有的时候可能无效,则可以将MapperScanner作为bean,使用@Bean注解配合@Order注解使用来调整bean的生成顺序 使用方法: import java.util.ArrayList;import java.util.List;import javax.annotation.PostConstruct;import org.apache.ibatis.binding.MapperRegistry;import org.apache.ibatis.session.SqlSessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import cn.pomit.jpamapper.core.MapperScanner;import cn.pomit.jpamapper.core.mapper.register.MappedStatementRegister;/** * Mapper 配置 * * @author cff */@Configurationpublic class JpaMapperConfig { @Autowired private List<SqlSessionFactory> sqlSessionFactoryList; @PostConstruct public void addPageInterceptor() { try{ MapperScanner mapperScanner = new MapperScanner(); for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) { org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration(); MapperRegistry mapperRegistry = configuration.getMapperRegistry(); List<Class<?>> mappers = new ArrayList<>(mapperRegistry.getMappers()); MappedStatementRegister mappedStatementRegister = new MappedStatementRegister(configuration); mappedStatementRegister.addMappers(mappers); mapperScanner.addMappedStatementRegister(mappedStatementRegister); } mapperScanner.scanAndRegisterJpaMethod(); }catch(Exception e){ e.printStackTrace(); } }} Mapper种类
Mapper的泛型要指明实体类和主键 增删改查CrudMapper
详细使用方法可以在JpaMapper-CrudMapper里查看 主键策略
联表查询
@Many(fetchType=FetchType.EAGER) @JoinColumns({ @JoinColumn(name="userName",referencedColumnName="userName"), @JoinColumn(name="mobile",referencedColumnName="phone") }) private List<UserRole> userRole; 分表功能SimpleShardingMapper
public static String getTable(Object mobile) { int index = Integer.parseInt(mobile.toString()) % 5; return String.valueOf(index); } public static String[] getTables(Object start, Object end) { Map<Integer, String> maps = new HashMap<>(); int index = 0; for(int i = Integer.parseInt(start.toString()); i < Integer.parseInt(end.toString()); i++){ if(index >= 5)break; maps.put(index, String.valueOf(i % 5)); index++; } List<String> mapValueList = new ArrayList<String>(maps.values()); String[] arr = new String[mapValueList.size()]; return mapValueList.toArray(arr); } 示例使用mobile的取余5寻找分表字段。 详细使用方法可以在JpaMapper-SimpleShardingMapper里查看 分页功能PagingAndSortingMapper
Pageable pageable = new Pageable();pageable.setPage(1);pageable.setSize(5);Order order = new Order(Direction.ASC, "mobile");Order order1 = new Order(Direction.ASC, "userName");Sort sort = new Sort(order, order1);pageable.setSort(sort);Page<UserInfo> page = userInfoSortDao.findAllPageable(pageable);
Page<UserInfo> pageByPasswd(String passwd, Pageable pageable); 这样就可以以passwd分页查询了。
List<UserInfo> sortByPasswd(String passwd, Sort sort); 这样就可以以passwd为条件查询,以sort作为排序条件。 详细使用方法可以在JpaMapper-PagingAndSortingMapper里查看 设计原理https://blog.csdn.net/feiyangtianyao/article/category/8446635 版权声明JpaMapper使用 Apache License 2.0 协议. 作者信息作者博客:https://blog.csdn.net/feiyangtianyao 作者邮箱: [email protected] LicenseApache License |
请发表评论