Skip to content

geektcp/mosheh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

}