Skip to content

geektcp/mosheh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Dec 12, 2023
1791925 · Dec 12, 2023
Feb 19, 2023
Apr 9, 2023
Sep 13, 2023
Oct 1, 2023
Jan 28, 2023
Dec 12, 2023
Sep 13, 2023
Jul 22, 2023
Mar 28, 2023

Repository files navigation

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;
    }

}