<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
@Slf4j public class GenericSqlSession extends DefaultSqlSession { private static final ThreadLocal<Class<?>> CTX = new ThreadLocal<>(); private final Executor generalExecutor; public GenericSqlSession(Configuration configuration, Executor executor, boolean autoCommit) { super(configuration, executor, autoCommit); this.generalExecutor = executor; } @Override public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) { return doSelectList(statement, parameter, rowBounds); } protected <E> List<E> doSelectList(String statement, Object parameter, RowBounds rowBounds) { try { return generalExecutor.query(getCustomMappedStatement(statement), ParamNameResolver.wrapToMapIfCollection(parameter, null), rowBounds, Executor.NO_RESULT_HANDLER); } catch (Exception e) { throw ExceptionFactory.wrapException("Error querying database. Cause: " + e, e); } finally { ErrorContext.instance().reset(); } } protected MappedStatement getCustomMappedStatement(String statement) { var ms = getConfiguration().getMappedStatement(statement); var clazz = GenericSqlSession.get(); if (ObjectUtil.isEmpty(clazz)) { return ms; } else { var resultMaps = ms.getResultMaps(); var resultMap = resultMaps.get(0); var customMap = new ResultMap.Builder(getConfiguration(), resultMap.getId(), clazz, resultMap.getResultMappings(), resultMap.getAutoMapping()).build(); return new MappedStatement.Builder(getConfiguration(), ms.getId(), ms.getSqlSource(), ms.getSqlCommandType()) .resultMaps(Collections.singletonList(customMap)) .resource(ms.getResource()) .useCache(ms.isUseCache()) .build(); } } public static void set(Class<?> clazz) { CTX.set(clazz); } public static Class<?> get() { return CTX.get(); } public static void remove() { CTX.remove(); } }
public class GenericSqlSessionFactory extends DefaultSqlSessionFactory { public GenericSqlSessionFactory(Configuration configuration) { super(configuration); } @Override public SqlSession openSession(ExecutorType execType) { Transaction tx = null; try { final var environment = getConfiguration().getEnvironment(); final var transactionFactory = getTransactionFactoryFromEnvironment(environment); tx = transactionFactory.newTransaction(environment.getDataSource(), null, false); final var executor = getConfiguration().newExecutor(tx, execType); return new GenericSqlSession(getConfiguration(), executor, false); } catch (Exception e) { // may have fetched a connection so let's call close() closeTransaction(tx); throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e); } finally { ErrorContext.instance().reset(); } } private TransactionFactory getTransactionFactoryFromEnvironment(Environment environment) { if (environment == null || environment.getTransactionFactory() == null) { return new ManagedTransactionFactory(); } return environment.getTransactionFactory(); } private void closeTransaction(Transaction tx) { if (tx != null) { try { tx.close(); } catch (SQLException ignore) { // Intentionally ignore. Prefer previous error. } } } }
@Component public class GenericSqlSessionTemplate extends SqlSessionTemplate { public GenericSqlSessionTemplate(SqlSessionFactory sqlSessionFactory) { super(new GenericSqlSessionFactory(sqlSessionFactory.getConfiguration())); } }
public interface SuperMapper<T> extends BaseMapper<T> { /** * selectById * * @param clazz 自定義結果集class * @param id id * @param <D> D * @return D */ @SuppressWarnings("unchecked") default <D> D selectById(Class<D> clazz, Serializable id) { try { GenericSqlSession.set(clazz); return (D) selectById(id); } finally { GenericSqlSession.remove(); } } }
繼承自定義的基礎Mapper
@Data @TableName("tag") public class TagPO implements Serializable { private static final long serialVersionUID = 1L; @TableId(type = IdType.AUTO) private Integer id; private String name; } public interface TagDAO extends SuperMapper<TagPO> { } @Component @Slf4j public class MybatisTest implements CommandLineRunner { @Autowired TagDAO tagDAO; @Override public void run(String... args) throws Exception { TagDTO id1 = tagDAO.selectById(TagDTO.class, 1); log.info("{}", id1); TagPO id2 = tagDAO.selectById(1); log.info("{}", id2); } }
以上就是MyBatis-Plus動態返回實體類範例詳解的詳細內容,更多關於MyBatis-Plus返回實體類的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45