# mybatis_jpa_jack **Repository Path**: vincentchan/jack_mybatis_jpa ## Basic Information - **Project Name**: mybatis_jpa_jack - **Description**: Mybatis JPA 是mybatis的jpa插件,实现了JPA标准协议的CURD 包含一对一以及一对多的查询功能,联系QQ群:246912326,本项目已经在自己公司实践过,不敢说没有bug,还是比较稳定的。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 8 - **Created**: 2018-12-03 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mybatis_jpa_jack #### 项目介绍 Mybatis JPA 是mybatis的jpa插件,实现了JPA标准协议的CURD 包含一对一以及一对多的查询功能,不需要写一行sql, 本项目已经在自己公司实践过,不敢说没有bug,还是比较稳定的。本项目只适用于Mysql。 #### 软件架构 软件架构说明 本项目基于https://github.com/svili365/mybatis-jpa 开发 感谢 svili,此项目是svili项目的一个分支,和svili的jpa项目在同一个qq群提供支持 。 #### SpringBoot 集成 ``` @Configuration public class MybatisConfig { @Autowired private SqlSessionFactory sqlSessionFactory; @Bean public PersistentEnhancerScaner getPersistentEnhancerScaner(){ PersistentEnhancerScaner scanner = new PersistentEnhancerScaner(); scanner.setEntityPackage("com.ylm.**.bean"); scanner.setMapperPackage("com.ylm.**.dao"); scanner.setSqlSessionFactory(sqlSessionFactory); return scanner; } } ``` #### SpringMVC 集成 ``` ``` #### 注解说明 1 实体类注解 注意:插件会默认使用驼峰来找java 属性对应DB表的字段,比如你java字段名是 userName db是user_name 不配置Column 注解也是可以的。 ``` //声明我是一个DO @Entity // 声明我的表是哪个 @Table(name="t_ucenter_front_user") public class FrontUser extends SuperBean { private static final long serialVersionUID = 1L; /** * 用户Id */ //声明我是主键 @Id //声明我的列是什么 @Column(name = "user_id", nullable = false, length = 32) private String userId; /** * 昵称 */ @Column(name = "nick_name", nullable = true, length = 32) //声明我查询的时候传入此字 当做过滤条件的时候 段默认用like 来查询而不是 == @Like private String nickName; //一对多注解 @OneToMany(mappedBy="user_id") private List roles; } ``` 2 DAO/Mapper注解 以下是一个demo,也是项目中默认提供的test包中的示例 ``` @Repository //配置对应的实体类是哪个 默认的排序规则是什么 @MapperDefinition(domainClass = User.class,orderBy=" user_id desc") public interface UserMapper extends MybatisBaseMapper { String resultMap = ResultMapConstants.DEFAULT_NAMESPACE + ".User"; //根据用户名删除 这个是=的哦 @StatementDefinition int deleteByUserName(String userName); //根据用户名更新 @StatementDefinition int updateByUserName(User user); //根据用户名去更新,如果你某些字段传了null将不会更新这些字段 @StatementDefinition int updateSelectiveByUserName(User user); @StatementDefinition List selectByUserName(String userName); /* Like 的通配符需要自行添加 */ @StatementDefinition List selectByUserNameLike(String userName); @StatementDefinition List selectByUserIdLessThan(Integer userId); @StatementDefinition List selectByUserIdIsNull(); /*more condition or complex SQL,need yourself build*/ /**注意,此方法的resultMap是jpa自动生成的UserResultMap*/ @Select("select * from ybg_test_user where user_name = #{userName} and dept_id = #{deptId}") @ResultMap(resultMap) List selectComplex(Map args); List selectComplex2(Map args); } ``` #### 如何和自己的Mapper/dao 结合起来使用呢?又提供了哪些默认的方法呢? 写一个Mapper 接口继承下面这个接口即可(就和上面提供的demo一样) 注意:批量删除功能并未提供,这些包含不到的您依然可以通过 mapper.xml 去扩展你的mapper/dao中的方法(sql) ``` public interface MybatisBaseMapper { /** * 做判空处理的insert * @param entity do * @return 受影响的行数 */ @StatementDefinition int insertSelective(T entity); /** * 插入 * @param entity * @return int 受影响的行数 * @since 1.0.0 */ @StatementDefinition int insert(T entity); /** * 批量插入 * @param list 需要插入的集合 * @return 受影响的行数 * @since 1.0.0 */ @StatementDefinition int batchInsert(@Param("list")List list); /** * 批量插入. * * @param list 需要插入的集合 * @param flag 分表标志 * @return 受影响的行数 * @since 1.0.0 */ @StatementDefinition int batchInsertCatTable(@Param("list")List list,@Param("flag")String flag); /** * 根据id删除数据 * @param primaryValue id * @return 受影响行数 * @since 1.0.0 */ @StatementDefinition int deleteById(Object primaryValue); /** * 根据id删除数据 * @param primaryValue id * @param flag 分表标志 * @return 受影响行数 * @since 1.0.0 */ @StatementDefinition int deleteByIdCatTable(@Param("param")Object primaryValue,@Param("flag")String flag); /** * 根据id更新 * @param entity 待更新数据 * @return 受影响行数 * @since 1.0.0 */ @StatementDefinition int updateById(T entity); /** * 根据id跟新 -- 判空 * @param 待更新数据 * @return 受影响行数 * @since 1.0.0 */ @StatementDefinition int updateSelectiveById(T entity); //@StatementDefinition int batchUpdate(List list); /** * 根据id、查询 * @param primaryValue id * @return model * @since 1.0.0 */ @StatementDefinition T selectById(Object primaryValue); /** * 级联查询 支持one2one one2x * @param entity 过滤条件 * @param pageStart 分页开始 * @param pageSize 分页行数 * @return 级联查询结果 */ @NestedSelect @StatementDefinition List selectNested(@Param("entity")T entity,@Param("pageStart")long pageStart,@Param("pageSize")long pageSize); /** * 级联查询 支持one2one one2x * @param entity 过滤条件 * @param pageStart 分页开始 * @param pageSize 分页行数 * @param orderBy 排序参数 * @return 级联查询结果 */ @NestedSelect @StatementDefinition List selectNestedForOrder(@Param("entity")T entity,@Param("pageStart")long pageStart,@Param("pageSize")long pageSize,@Param("orderBy")String orderBy); /** * 根据id、查询 * @param primaryValue id * @return model * @since 1.0.0 */ @StatementDefinition T selectByIdCatTable(@Param("param")Object primaryValue,@Param("flag")String flag); /** * 根据分页参数返回结果 * 如果不需要分页 pageStart或者pageSize传-1即可 * @param entity 用来做过滤的参数 * @param pageStart 开始number * @param pageSize 一页多少行数据 * @return 符合条件的数据 */ @StatementDefinition List selectPage(@Param("entity")T entity,@Param("pageStart")long pageStart,@Param("pageSize")long pageSize); /** * 根据分页参数返回结果 * 如果不需要分页 pageStart或者pageSize传-1即可 * @param entity 用来做过滤的参数 * @param pageStart 开始number * @param pageSize 一页多少行数据 * @param orderBy 排序字段 * @return 符合条件的数据 */ @StatementDefinition List selectPageForOrder(@Param("entity")T entity,@Param("pageStart")long pageStart,@Param("pageSize")long pageSize,@Param("orderBy")String orderBy); /** * 根据参数查询总数 * 如果不需要分页 pageStart或者pageSize传0即可 * @param entity 用来做过滤的参数 * @return 符合条件的数据条数 */ @StatementDefinition long selectCount(T entity); /** * 根据条件查询bean对象 * @param entity 用来做过滤的参数 * @return 符合条件的数据 */ @StatementDefinition T selectBean(T entity); /** * select(这里用一句话描述这个方法的作用) * (这里描述这个方法适用条件 – 可选) * @return 查询所有 * @since 1.0.0 */ @StatementDefinition List select(); /** * 给定参数进行删除 操作 * @param entity 参数 * @return 影响行数 */ @StatementDefinition int deleteBean(T entity); ``` #### maven dependency 怎么写? 第一次做开源项目暂时还没有学会怎么去弄,大家还是先把代码clone本地编译下吧。 #### 如果你不是maven项目怎么集成? 使用eclipse linksource功能,或者用idea add content root 将src 引入进去即可,或者我编译个jar包给大家放上来。