package me.test.first.cache; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.jdbc.query.SqlUpdateCallback; import org.springframework.stereotype.Service; import com.mysema.query.sql.dml.SQLUpdateClause; import com.mysema.query.types.Predicate; @Service public class UserBiz { private final Logger logger = LoggerFactory.getLogger(UserBiz.class); @Autowired private QueryDslJdbcTemplate template; public List<User> list( String name, Boolean gender) { List<Predicate> conds = new ArrayList<Predicate>(); if (StringUtils.isNotEmpty(name)) { conds.add(QUser.user.name.like("%" + StringUtils.trimToEmpty(name) + "%")); } if (gender != null) { conds.add(QUser.user.gender.eq(gender)); } // return query.from(QUser.user).where(conds.toArray(new Predicate[0])).list(QUser.user); return template.newSqlQuery().from(QUser.user).where(conds.toArray(new Predicate[0])).list(QUser.user); } @Cacheable(value = "user", key = "#id") public User selectById(Long id) { logger.debug("$$$$$$$$$$$$$$$$$$$$$$$ selectById()"); // return query.from(QUser.user).where(QUser.user.id.eq(id)).uniqueResult(QUser.user); return template.newSqlQuery().from(QUser.user).where(QUser.user.id.eq(id)).uniqueResult(QUser.user); } @CacheEvict(value = "user", key = "#user.id") public void update(final User user) { logger.debug("$$$$$$$$$$$$$$$$$$$$$$$ update(User)"); template.update(QUser.user, new SqlUpdateCallback() { @Override public long doInSqlUpdateClause(SQLUpdateClause update) { return update.populate(user).where(QUser.user.id.eq(user.getId())).execute(); } }); } }