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群提供支持 。
如果有定时任务请调整此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);
}
}
<!-- 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 接口继承下面这个接口即可(就和上面提供的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);
<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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。