[github地址](VonChange/spring-data-mybatis-mini)
[gitee地址](小白鼠V/spring-data-mybatis-mini)
[blog](spring-data-mybatis-mini极简ORM · 小白鼠V技术驿站)
等同于spring data jdbc + mybatis 动态sql能力
极致底层jdbc性能 同时极致的开发效率
大道至简 极致效率 麻雀虽小 五脏俱全
[@and id in idList] 等于
and id in #{item}
== why not spring data jdbc,jpa,hibernate,mybaits,mybatis-plus等
== Getting Started
== 其他特性 无特殊需要可不用关心
== 使用步骤基本同jpa,spring data jdbc
Here is a quick teaser of an application using Spring Data mybatis mini in Java:
=== Maven configuration
Add the Maven dependency:
com.vonchange.common
spring-data-mybatis-mini
2.3.4
org.springframework.data
spring-data-commons
org.springframework.boot
spring-boot-starter-jdbc
mysql
mysql-connector-java
8.0.15
//添加 EnableMybatisMini 注解
@EnableMybatisMini
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
import org.springframework.data.mybatis.mini.jdbc.repository.query.ConfigLocation;
import org.springframework.data.mybatis.mini.jdbc.repository.support.BaseRepository;
import org.springframework.data.repository.query.Param;
public interface UserBaseRepository extends BaseRepository {
@ReadDataSource
List findList(@Param("userName") String userName,
@Param("createTime") Date createTime);
Page findList(Pageable pageable, @Param("userName") String userName,@Param("createTime") Date createTime);
String findUserName(@Param("userName") String userName);
List findListByIds(@Param("userName") String userName,
@Param("createTime") Date createTime,@Param("idList")List idList);
int updateIsDelete(@Param("isDelete") Integer isDelete,@Param("id") Long id);
}
默认sql 包下同名吧UserBaseRepository.md 识别```开头结尾的 -- 定义的同名方法 参见UserBaseRepository.md
实体类 定义ID 和TABLE 名
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Table(name = "user_base")
public class UserBaseDO {
@Id
private Long id;
private String userName;
private String firstPhone;
}
@Service
public class MyService {
@Resource
private final UserBaseRepository userBaseRepository;
public void doWork() {
List userBaseDOList = userBaseRepository.findList("test",new Date());
}
}
偷懒简化 if test 和in查询 识别 [@开头
[@and id in idList] 等于
and id in #{item}
```
> [@and user_name <> userName] 等于
and user_name <>
```
``` [@and user_name like userName] 等于 and user_name like CONCAT('%',?,'%')
[@and user_name like userName%] 等于 and user_name like CONCAT(?,'%') [@and user_name like userName%] 等于 and user_name like CONCAT('%','test')
```
[@and id in #{idList:in} and user_name like #{userName:like}]
等于
and id in #{item} and user_name like CONCAT('%',#{userName},'%')
[@AND content -> '$.account' = #{bean.account}]
等于
AND content -> '$.account' = #{bean.account}
相关注解
//自定义 读库数据源 不自定义默认所有你设置的数据源
@Bean
public ReadDataSources initReadDataSources(){
return new ReadDataSources() {
@Override
public DataSource[] allReadDataSources() {
return new DataSource[]{mainDataSource(),mainDataSource(),readDataSource()};
}
};
}
批量更新插入
@BatchUpdate(size = 5000)
int batchInsert(List list);
只需定义单条insert 语句
-- batchInsert
insert into user_base(`user_name`,`mobile_phone`,create_time) values
(#{userName},#{mobilePhone},#{createTime})
大数据量流式读取
定义方法
void findBigData(@Param("")AbstractPageWork abstractPageWork,@Param("userName") String userName);
定义sql
--
使用demo
AbstractPageWork abstractPageWork = new AbstractPageWork() {
@Override
protected void doPage(List pageContentList, int pageNum, Map extData) {
pageContentList.forEach(userBaseDO -> {
log.info("{}",userBaseDO.toString());
});
}
@Override
protected int getPageSize() {
return 500;
}
};
userBaseRepository.findBigData(abstractPageWork,"三");
log.info("{} {} {}",abstractPageWork.getSize(),abstractPageWork.getTotalPages(),abstractPageWork.getTotalElements());