Skip to content

Latest commit

 

History

History
95 lines (78 loc) · 3.28 KB

README.md

File metadata and controls

95 lines (78 loc) · 3.28 KB

mosheh

Actions Status Security Score Maven Central OpenSSF Best Practices Java Doc

describe

mosheh is a common library for Java, which release in maven repository:
https://mvnrepository.com/artifact/com.geektcp.common/mosheh

this is a tiny project. we can use it to develop big project.

Furthermore, mosheh offers a convenient API for build many cache, collection, executor.

maven dependency

<!-- https://mvnrepository.com/artifact/com.geektcp.common/mosheh -->
<dependency>
    <groupId>com.geektcp.common</groupId>
    <artifactId>mosheh</artifactId>
    <version>1.0.3</version>
</dependency>

example

package xxx;

/**
 * @author Geektcp 2021/9/23 14:30
 */
@Slf4j
@Service
public class RoomInfoServerImpl extends JpaBase implements RoomInfoServer {

    private LoadingCache<Object, List<RoomInfoVo>> tinyCache = CacheBuilder.newBuilder()
            .refreshAfterWrite(7, TimeUnit.SECONDS)
            .expireAfterWrite(5, TimeUnit.SECONDS)
            .build(new TinyLoader<Object, List<RoomInfoVo>>() {
                @Override
                public List<RoomInfoVo> load(Object key) {
                    return null;
                }
            });

    public List<RoomInfoVo> queryRoomInfo(RoomInfoQo qo) {
        log.info("qo: {}", JSON.toJSONString(qo));
        
        // get result from tiny cache
        List<RoomInfoVo> cacheResult =  tinyCache.get(qo);
        if(Objects.nonNull(cacheResult)){
            return cacheResult;
        }

        // here is your code, for example: select mysql with JPA or Mybatis
        String title = qo.getTitle();
        String id = qo.getId();
        String author = qo.getAuthor();

        QRoomInfoPo qRoomInfoPo = QRoomInfoPo.roomInfoPo;
        JPQLQuery<RoomInfoPo> jpqlQuery = jpa.select(qRoomInfoPo).from(qRoomInfoPo);
        if(StringUtils.isNotEmpty(title)){
            jpqlQuery.where(qRoomInfoPo.title.like(JQL.likeWrap(title)));
        }
        if(StringUtils.isNotEmpty(id)){
            jpqlQuery.where(qRoomInfoPo.id.eq(id));
        }
        if(StringUtils.isNotEmpty(author)){
            jpqlQuery.where(qRoomInfoPo.author.like(JQL.likeWrap(author)));
        }
        List<RoomInfoPo> poList = jpqlQuery.orderBy(qRoomInfoPo.updateBy.asc()).fetch();

        if (CollectionUtils.isEmpty(poList)) {
            return null;
        }
        List<RoomInfoVo> voList = poList.stream().map((RoomInfoPo po) -> {
            RoomInfoVo vo = new RoomInfoVo();
            BeanMapper.map(po, vo);
            return vo;
        }).collect(Collectors.toList());

        // add result to tiny cache
        tinyCache.put(qo, voList);
        
        return voList;
    }

}