lambda表达式的使用(二)

进入高阶模式

@Service
public class AccessTokenServiceImpl implements IAccessTokenService {

    @Autowired
    private IAccessTokenMapper accessTokenMapper;

    @Override
    @Cacheable(cacheNames = ACCESS_TOKEN_SELECT_BY_TOKEN)
    public Optional<AccessTokenEntity> getToken(String token, String refreshToken) {
        return accessTokenMapper.select(c -> c.where()
                .and(accesstokenEntity.token, isEqualToWhenPresent(token))
                .and(accesstokenEntity.refreshToken, isEqualToWhenPresent(refreshToken))
        ).stream()
        .findFirst();
    }

    @Override
    public Integer delFailureToken() {
        Date date = Jdk8DateUtil.minusDays(new Date(), 30);
        return accessTokenMapper.delete(c -> c.where(accesstokenEntity.expires, isLessThan(date.getTime())));
    }
}
package com.hst.ces.mybatis.mybatis3.dao;

import static com.hst.ces.mybatis.mybatis3.dao.support.AccessTokenEntityDynamicSqlSupport.accesstokenEntity;
import static com.hst.ces.mybatis.mybatis3.dao.support.AccessTokenEntityDynamicSqlSupport.clientId;
import static com.hst.ces.mybatis.mybatis3.dao.support.AccessTokenEntityDynamicSqlSupport.creationDate;
import static com.hst.ces.mybatis.mybatis3.dao.support.AccessTokenEntityDynamicSqlSupport.encodedPrincipal;
import static com.hst.ces.mybatis.mybatis3.dao.support.AccessTokenEntityDynamicSqlSupport.expires;
import static com.hst.ces.mybatis.mybatis3.dao.support.AccessTokenEntityDynamicSqlSupport.id;
import static com.hst.ces.mybatis.mybatis3.dao.support.AccessTokenEntityDynamicSqlSupport.modificationDate;
import static com.hst.ces.mybatis.mybatis3.dao.support.AccessTokenEntityDynamicSqlSupport.refreshToken;
import static com.hst.ces.mybatis.mybatis3.dao.support.AccessTokenEntityDynamicSqlSupport.token;
import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo;

import com.hst.ces.mybatis.mybatis3.entity.AccessTokenEntity;
import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.dynamic.sql.BasicColumn;
import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter;
import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider;
import org.mybatis.dynamic.sql.select.CountDSLCompleter;
import org.mybatis.dynamic.sql.select.SelectDSLCompleter;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.mybatis.dynamic.sql.update.UpdateDSL;
import org.mybatis.dynamic.sql.update.UpdateDSLCompleter;
import org.mybatis.dynamic.sql.update.UpdateModel;
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
import org.mybatis.dynamic.sql.util.SqlProviderAdapter;
import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

/**
 * @author dengxl
 */
@Mapper
public interface IAccessTokenMapper extends IBaseDao {
    BasicColumn[] selectList = BasicColumn.columnList(id, creationDate, modificationDate, expires, refreshToken, token,
            clientId, encodedPrincipal);

    /**
     * count
     */
    @SelectProvider(type = SqlProviderAdapter.class, method = "select")
    long count(SelectStatementProvider selectStatement);

    /**
     * count
     */
    default long count(CountDSLCompleter completer) {
        return MyBatis3Utils.countFrom(this::count, accesstokenEntity, completer);
    }

    /**
     * delete
     */
    @DeleteProvider(type = SqlProviderAdapter.class, method = "delete")
    int delete(DeleteStatementProvider deleteStatement);

    /**
     * delete
     */
    default int delete(DeleteDSLCompleter completer) {
        return MyBatis3Utils.deleteFrom(this::delete, accesstokenEntity, completer);
    }

    /**
     * deleteByPrimaryKey
     */
    default int deleteByPrimaryKey(Long idParam) {
        return delete(c ->
                c.where(id, isEqualTo(idParam))
        );
    }

    /**
     * insertMultiple
     */
    @Insert({"${insertStatement}"})
    @Options(useGeneratedKeys = true, keyProperty = "records.id")
    int insertMultiple(@Param("insertStatement") String insertStatement,
                       @Param("records") List<AccessTokenEntity> records);

    /**
     * insertMultiple
     */
    default int insertMultiple(MultiRowInsertStatementProvider<AccessTokenEntity> multipleInsertStatement) {
        return insertMultiple(multipleInsertStatement.getInsertStatement(), multipleInsertStatement.getRecords());
    }

    /**
     * insertMultiple
     */
    default int insertMultiple(Collection<AccessTokenEntity> records) {
        return MyBatis3Utils.insertMultiple(this::insertMultiple, records, accesstokenEntity, c ->
                c.map(creationDate).toProperty("creationDate")
                        .map(modificationDate).toProperty("modificationDate")
                        .map(expires).toProperty("expires")
                        .map(refreshToken).toProperty("refreshToken")
                        .map(token).toProperty("token")
                        .map(clientId).toProperty("clientId")
                        .map(encodedPrincipal).toProperty("encodedPrincipal")
        );
    }

    /**
     * insert
     */
    @InsertProvider(type = SqlProviderAdapter.class, method = "insert")
    @Options(useGeneratedKeys = true, keyProperty = "record.id")
    int insert(InsertStatementProvider<AccessTokenEntity> insertStatement);

    /**
     * insert
     */
    default int insert(AccessTokenEntity record) {
        return MyBatis3Utils.insert(this::insert, record, accesstokenEntity, c ->
                c.map(creationDate).toProperty("creationDate")
                        .map(modificationDate).toProperty("modificationDate")
                        .map(expires).toProperty("expires")
                        .map(refreshToken).toProperty("refreshToken")
                        .map(token).toProperty("token")
                        .map(clientId).toProperty("clientId")
                        .map(encodedPrincipal).toProperty("encodedPrincipal")
        );
    }

    /**
     * insertSelective
     */
    default int insertSelective(AccessTokenEntity record) {
        return MyBatis3Utils.insert(this::insert, record, accesstokenEntity, c ->
                c.map(creationDate).toPropertyWhenPresent("creationDate", record::getCreationDate)
                        .map(modificationDate).toPropertyWhenPresent("modificationDate", record::getModificationDate)
                        .map(expires).toPropertyWhenPresent("expires", record::getExpires)
                        .map(refreshToken).toPropertyWhenPresent("refreshToken", record::getRefreshToken)
                        .map(token).toPropertyWhenPresent("token", record::getToken)
                        .map(clientId).toPropertyWhenPresent("clientId", record::getClientId)
                        .map(encodedPrincipal).toPropertyWhenPresent("encodedPrincipal", record::getEncodedPrincipal)
        );
    }

    /**
     * selectOne
     */
    @SelectProvider(type = SqlProviderAdapter.class, method = "select")
    @ResultMap("AccesstokenEntityResult")
    Optional<AccessTokenEntity> selectOne(SelectStatementProvider selectStatement);

    /**
     * selectOne
     */
    default Optional<AccessTokenEntity> selectOne(SelectDSLCompleter completer) {
        return MyBatis3Utils.selectOne(this::selectOne, selectList, accesstokenEntity, completer);
    }

    /**
     * select
     */
    default List<AccessTokenEntity> select(SelectDSLCompleter completer) {
        return MyBatis3Utils.selectList(this::selectMany, selectList, accesstokenEntity, completer);
    }

    /**
     * selectMany
     */
    @SelectProvider(type = SqlProviderAdapter.class, method = "select")
    @Results(id = "AccesstokenEntityResult", value = {
            @Result(column = "id", property = "id", jdbcType = JdbcType.BIGINT, id = true),
            @Result(column = "creationDate", property = "creationDate", jdbcType = JdbcType.TIMESTAMP),
            @Result(column = "modificationDate", property = "modificationDate", jdbcType = JdbcType.TIMESTAMP),
            @Result(column = "expires", property = "expires", jdbcType = JdbcType.BIGINT),
            @Result(column = "refreshToken", property = "refreshToken", jdbcType = JdbcType.VARCHAR),
            @Result(column = "token", property = "token", jdbcType = JdbcType.VARCHAR),
            @Result(column = "client_id", property = "clientId", jdbcType = JdbcType.BIGINT),
            @Result(column = "encodedPrincipal", property = "encodedPrincipal", jdbcType = JdbcType.LONGVARCHAR)
        })
    List<AccessTokenEntity> selectMany(SelectStatementProvider selectStatement);

    /**
     * selectDistinct
     */
    default List<AccessTokenEntity> selectDistinct(SelectDSLCompleter completer) {
        return MyBatis3Utils.selectDistinct(this::selectMany, selectList, accesstokenEntity, completer);
    }

    /**
     * selectByPrimaryKey
     */
    default Optional<AccessTokenEntity> selectByPrimaryKey(Long idParam) {
        return selectOne(c ->
                c.where(id, isEqualTo(idParam))
        );
    }

    /**
     * update
     */
    @UpdateProvider(type = SqlProviderAdapter.class, method = "update")
    int update(UpdateStatementProvider updateStatement);

    /**
     * update
     */
    default int update(UpdateDSLCompleter completer) {
        return MyBatis3Utils.update(this::update, accesstokenEntity, completer);
    }

    /**
     * updateAllColumns
     */
    static UpdateDSL<UpdateModel> updateAllColumns(AccessTokenEntity record, UpdateDSL<UpdateModel> dsl) {
        return dsl.set(creationDate).equalTo(record::getCreationDate)
                .set(modificationDate).equalTo(record::getModificationDate)
                .set(expires).equalTo(record::getExpires)
                .set(refreshToken).equalTo(record::getRefreshToken)
                .set(token).equalTo(record::getToken)
                .set(clientId).equalTo(record::getClientId)
                .set(encodedPrincipal).equalTo(record::getEncodedPrincipal);
    }

    /**
     * updateSelectiveColumns
     */
    static UpdateDSL<UpdateModel> updateSelectiveColumns(AccessTokenEntity record, UpdateDSL<UpdateModel> dsl) {
        return dsl.set(creationDate).equalToWhenPresent(record::getCreationDate)
                .set(modificationDate).equalToWhenPresent(record::getModificationDate)
                .set(expires).equalToWhenPresent(record::getExpires)
                .set(refreshToken).equalToWhenPresent(record::getRefreshToken)
                .set(token).equalToWhenPresent(record::getToken)
                .set(clientId).equalToWhenPresent(record::getClientId)
                .set(encodedPrincipal).equalToWhenPresent(record::getEncodedPrincipal);
    }

    /**
     * updateByPrimaryKey
     */
    default int updateByPrimaryKey(AccessTokenEntity record) {
        return update(c ->
                c.set(creationDate).equalTo(record::getCreationDate)
                        .set(modificationDate).equalTo(record::getModificationDate)
                        .set(expires).equalTo(record::getExpires)
                        .set(refreshToken).equalTo(record::getRefreshToken)
                        .set(token).equalTo(record::getToken)
                        .set(clientId).equalTo(record::getClientId)
                        .set(encodedPrincipal).equalTo(record::getEncodedPrincipal)
                        .where(id, isEqualTo(record::getId))
        );
    }

    /**
     * updateByPrimaryKeySelective
     */
    default int updateByPrimaryKeySelective(AccessTokenEntity record) {
        return update(c ->
                c.set(creationDate).equalToWhenPresent(record::getCreationDate)
                        .set(modificationDate).equalToWhenPresent(record::getModificationDate)
                        .set(expires).equalToWhenPresent(record::getExpires)
                        .set(refreshToken).equalToWhenPresent(record::getRefreshToken)
                        .set(token).equalToWhenPresent(record::getToken)
                        .set(clientId).equalToWhenPresent(record::getClientId)
                        .set(encodedPrincipal).equalToWhenPresent(record::getEncodedPrincipal)
                        .where(id, isEqualTo(record::getId))
        );
    }
}

lambda的骚操作(集合collection(如list)才有steam()流方法,且返回流对象,findFirst()方法返回的是optional对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bst@微胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值