6 Star 9 Fork 5

fhs_opensource / mybatis_jpa_jack

Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

mybatis_jpa_jack

项目介绍

Mybatis JPA 是mybatis的jpa插件,继承了mybatis plus 使用jpa标准注解(兼容Mybatis Plus注解),自动生成的resultMap,使用者只需要让自己的mapper继承MybatisBaseMapper 即可实现不用写一行sql实现对数据的CRUD+批处理+一对一,一对多连表查询功能。

本项目只适用于Mysql。

2018-04-04 由于mybatis plus新版本去掉了xml热加载,故mybatis Jpa jack 提供了xml热加载配置。

说明

本项目基于https://github.com/svili365/mybatis-jpa 开发 感谢 svili,此项目是svili项目的一个分支,和svili的jpa项目在同一个qq群提供支持 。

SpringBoot 集成

如果有定时任务请调整此bean的初始化顺序,以免发生mybatis jpa还没给某些接口方法生成sql,就已经被调用了

@Configuration
@AutoConfigureAfter(MybatisPlusAutoConfiguration.class)
public class MybatisConfig implements InitializingBean {

    private static Logger LOG =  Logger.getLogger(MybatisConfig.class);

    @Value("${fhs.mybatis-jpa.entity-package}")
    private String entityPackage;

    @Value("${fhs.mybatis-jpa.mapper-package}")
    private String mapperPackage;

    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    @Bean("persistentEnhancerScaner")
    public PersistentEnhancerScaner getPersistentEnhancerScaner(){
        PersistentEnhancerScaner scanner = new PersistentEnhancerScaner();
        scanner.setEntityPackage(entityPackage);
        scanner.setMapperPackage(mapperPackage);
        scanner.setSqlSessionFactory(sqlSessionFactory);
        return scanner;
    }


    @Bean
    public XMLMapperLoader getXMLMapperLoader(MybatisPlusProperties plusProperties){
        XMLMapperLoader loader = new XMLMapperLoader();
        loader.setEnabled(ConverterUtils.toBoolean(EConfig.getOtherConfigPropertiesValue("isDevModel")));//开启xml热加载
        loader.setMapperLocations(plusProperties.resolveMapperLocations());
        LOG.info("xml刷新器初始化:" + plusProperties.getMapperLocations() + "--" + loader.getMapperLocations());
        return loader;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Interceptor zipkinInterceptor = new ResultTypePlugin();
        sqlSessionFactory.getConfiguration().addInterceptor(zipkinInterceptor);
    }
}


SpringMVC 集成


	<!-- Mybatis JPA Mapper 所在包路径 -->
	<bean class="com.mybatis.jpa.core.PersistentEnhancerScaner">
		<property name="mapperPackage" value="com.yzb.*.dao" />
		<property name="entityPackage" value="com.yzb.*.bean" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>

注解说明

1 实体类注解 注意:插件会默认使用驼峰来找java 属性对应DB表的字段,比如你java字段名是 userName db是user_name 不配置Column 注解也是可以的。

//声明我是一个PO
@Entity
// 声明我的表是哪个
@Table(name="t_ucenter_front_user")
public class FrontUser extends SuperBean<FrontUser>
{
	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")//join的时候role.user_id=user.主键
	private List<Role> roles;
        
        @OneToOne
        @JoinColumn(name = "vip_id",referencedColumnName = "id")//join的时候 user.vip_id=vip.id
        private Vip vip;
}

2 DAO/Mapper注解 以下是一个demo,也是项目中默认提供的test包中的示例

 @Repository
//配置对应的实体类是哪个 默认的排序规则是什么 
@MapperDefinition(domainClass = User.class,orderBy=" user_id desc")
public interface UserMapper extends MybatisBaseMapper<User> {
	String resultMap = ResultMapConstants.DEFAULT_NAMESPACE + ".User";

        //根据用户名删除 这个是=的哦
	@StatementDefinition
	int deleteByUserName(String userName);

        //根据用户名更新
	@StatementDefinition
	int updateByUserName(User user);

        //根据用户名去更新,如果你某些字段传了null将不会更新这些字段
	@StatementDefinition
	int updateSelectiveByUserName(User user);

	@StatementDefinition
	List<User> selectByUserName(String userName);

	/* Like 的通配符需要自行添加 */
	@StatementDefinition
	List<User> selectByUserNameLike(String userName);

	@StatementDefinition
	List<User> selectByUserIdLessThan(Integer userId);

	@StatementDefinition
	List<User> 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<User> selectComplex(Map<String, Object> args);

	List<User> selectComplex2(Map<String, Object> args);

}

如何和自己的Mapper/dao 结合起来使用呢?又提供了哪些默认的方法呢?

写一个Mapper 接口继承下面这个接口即可(就和上面提供的demo一样) 这些包含不到的您依然可以通过 mapper.xml 去扩展你的mapper/dao中的方法(sql)

	/**
	 * 做判空处理的insert
	 * @param entity do
	 * @return 受影响的行数
	 */
	@StatementDefinition
	int insertSelective(T entity);

	/**
	 * 插入
	 * @param entity
	 * @return int 受影响的行数
	 * @since  1.0.0
	*/
	@StatementDefinition
	int insertJpa(T entity);

	/**
	 * 批量插入
	 * @param list 需要插入的集合
	 * @return 受影响的行数
	 * @since  1.0.0
	*/
	@StatementDefinition
	int batchInsert(@Param("list")List<T> list);

	/**
     * 批量插入.
     *
     * @param list 需要插入的集合
     * @param flag 分表标志
     * @return 受影响的行数
     * @since 1.0.0
     */
    @StatementDefinition
    int batchInsertCatTable(@Param("list")List<T> list,@Param("flag")String flag);

	/**
	 * 根据id删除数据
	 * @param primaryValue id
	 * @return 受影响行数
	 * @since  1.0.0
	*/
	@StatementDefinition
	int deleteByIdJpa(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 updateByIdJpa(T entity);

	/**
	 * 根据id跟新 -- 判空
	 * @param entity 待更新数据
     * @return   受影响行数
	 * @since  1.0.0
	*/
	@StatementDefinition
	int updateSelectiveById( T entity);


	/**
	 * 高级更新
	 * @param entity 更新的值
	 * @param baseWhere 基础的where条件
	 * @param sql 扩展sql
	 * @return 受影响行数
	 */
	@StatementDefinition
	int updateByAdvance(@Param("entity") T entity,@Param("baseWhere")T baseWhere,@Param("extSql") String sql);

	/**
	 * 批量根据id更新-null字段设置不进去
	 * @param list 集合
	 * @return 受影响行数
	 */
	@StatementDefinition
	int batchUpdateById(@Param("list")List<T> list);

	/**
	 * 批量根据id更新--可以设置null
	 * @param list 集合
	 * @return 受影响行数
	 */
	@StatementDefinition
	int batchUpdateIncludeNullById(@Param("list")List<T> list);

	/**
	 * 根据id、查询
	 * @param primaryValue id
	 * @return   model
	 * @since  1.0.0
	*/
	@StatementDefinition
	T selectByIdJpa(Object primaryValue);


	/**
	 *  级联查询 支持one2one one2x
	 * @param entity  过滤条件
	 * @param pageStart 分页开始
	 * @param pageSize 分页行数
	 * @return 级联查询结果
	 */
	@NestedSelect
	@StatementDefinition
	List<T> 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<T> 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<T> selectPageJpa(@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<T> 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 selectCountJpa(T entity);

	/**
     * 根据条件查询bean对象
     * @param entity 用来做过滤的参数
     * @return 符合条件的数据
     */
    @StatementDefinition
    T selectBean(T entity);


	/**
	 * 高级查询
	 * @param baseWhere 基础where
	 * @param extWhereSql where
	 * @param pageStart 开始
	 * @param pageSize 每页多少条
	 * @param orderBy 排序
	 * @return 符合条件的数据
	 */
	@StatementDefinition
	List<T> selectAdvance(@Param("entity")T baseWhere,@Param("extWhereSql") String extWhereSql,@Param("pageStart")long pageStart,@Param("pageSize")long pageSize,@Param("orderBy")String orderBy);


	/**
	 * 高级查询
	 * @param baseWhere 基础where
	 * @param extWhereSql where
	 * @return 符合条件的数据
	 */
	@StatementDefinition
	long selectCountAdvance(@Param("entity")T baseWhere,@Param("extWhereSql") String extWhereSql);

	/**
	 * select(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @return 查询所有
	 * @since  1.0.0
	*/
	@StatementDefinition
	List<T> select();

	/**
	 * 给定参数进行删除 操作
	 * @param entity 参数
	 * @return 影响行数
	 */
	@StatementDefinition
	int deleteBean(T entity);

	/**
	 * 根据id集合查询
	 * @param ids ids
	 * @return 对应的PO
	 */
	@StatementDefinition
	List<T> selectByIds(@Param("ids")List<? extends  Object> ids);

maven dependency 怎么写?

<dependency>
    <groupId>com.fhs-opensource</groupId>
    <artifactId>mybatis-jpa-jack</artifactId>
    <version>1.0.10</version>
</dependency>

请使用最新版本:https://mvnrepository.com/artifact/com.fhs-opensource/mybatis-jpa-jack

Comments ( 1 )

Sign in for post a comment

About

Mybatis JPA 是mybatis的jpa插件,实现了JPA标准协议的CURD 包含一对一以及一对多的查询功能,联系QQ群:246912326,本项目已经在自己公司实践过,不敢说没有bug,还是比较稳定的。 spread retract
Java
Apache-2.0
Cancel

Releases

No release

Contributors

All

Activities

load more
can not load any more
Java
1
https://git.oschina.net/fhs-opensource/jack_mybatis_jpa.git
git@git.oschina.net:fhs-opensource/jack_mybatis_jpa.git
fhs-opensource
jack_mybatis_jpa
mybatis_jpa_jack
master

Search