`
blue2048
  • 浏览: 184448 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
本文以申明式事务为例,开始下探,分析spring事务的源码结构,再以mybatis为例,分析spring事务是如何作用于ORM的。 首先看看spring的配置文件,简而言之,TransactionAttributeSourceAdvisor采用AOP方式,将事务transactionInterceptor织入注解的特定的方法上 <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"> <property n ...
这道题有个点,即使用空间来对树进行分层,这个点对于不完全二叉树还是很常见的技巧 /** * Definition for binary tree with next pointer. * public class TreeLinkNode { * int val; * TreeLinkNode left, right, next; * TreeLinkNode(int x) { val = x; } * } */ public class Solution { public void conne ...
这题没啥难度,主要是仔细了 /** * Definition for binary tree with next pointer. * public class TreeLinkNode { * int val; * TreeLinkNode left, right, next; * TreeLinkNode(int x) { val = x; } * } */ public class Solution { public void connect(TreeLinkNode root) { ...
这两道题没什么说的,就是杨辉三角形的性质 public class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> triangle = new ArrayList<List<Integer>>(); if(numRows<0){ return triangle; } ...
动态规划的 1. 转移函数f[i][j]从top到第i排第j个元素的最小距离 2. 考虑到边界问题,状态转移方程为 int left = j-1<0?0:j-1; int right = j>i-1?i-1:j; f[i][j]=Math.min(f[i-1][left], f[i-1][right])+triangle.get(i).get(j);   public class Solution { public int minimumTotal(List<List<Integer>> triangle) { ...
问题1比较简单, 使用一个pre变量,记录之前最小值就可以了 public int maxProfit(int[] prices) { if (prices == null || prices.length == 0) { return 0; } int max = 0; int minPre = prices[0]; for (int i = 1; i < prices.length; i++) { int price = prices[i]; ...
这道题估计难在审题上,题目描述太简单了,导致提交各种情况没想到,整个代码比较简单,可以解释题目,采用递归后续遍历的方式,从叶子节点开始算起,每次计算产生两个值,一个是最大通路值(maxPathSum ),一个是子树能为父节点提供的最大单支值(findSingleBranchMaxPathSum递归返回的值)   /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeN ...
Statement在具体orm的过程总,主要靠这三个类进行参数装配,结果装配和相应的类型转换 parameterHandler resultSetHandler typeHandlerRegistry protected BaseStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler) { this.configuration = mappe ...
KeyGenerator接口有三个实现类,SelectkeyGenerator,Jdbc3KeyGenerator,NoKeyGenerator 其中SelectkeyGenerator对应于生成主键操作,即针对insert类型的sql语句,配置selectKey的策略,自动为insert语句的参数补全id Jdbc3KeyGenerator和NoKeyGenerator对应于insert写库,是否取回表的自增Id,它对应的Configuration的useGeneratedKeys全局配置,或者Mapper中insert操作的useGeneratedKeys属性,可以看到如果配置了,则 ...
JDBC1.0 、JDBC2.0 、JDBC3.0 中分别用以下方法创建Statement 。 JDBC1.0 : createStatement() JDBC2.0 : createStatement(resultSetType, resultSetConcurrency) JDBC3.0 : createStatement(resultSetType, resultSetConcurrency, resultSetHoldability) 下面依次分析resultSetType 、resultSetConcurrency 、resultSetHoldability 这几个参数的含义。 ...
如前文所诉,statementhandler是具体操作jdbc statement执行数据库sql的类 StatementHandler的初始化     跟随Executor,在Executor需要执行数据库操作时新建     依赖-Executor,MappedStatement, ResultHandler     StatementHandler的创建过程如下 //Executor执行数据库操作的方法中创建handler StatementHandler handler = configuration.newStatementHandler(this, ms, par ...
这道题可以考虑两种方式解决 1. 深度优先遍历 2. 广度优先遍历   其中算法的效率取决于数组中单词的顺序,如果解决方案靠前,那么深度优先所用时间短;如果解在中间的位置,那么广度优先用时较短   深度优先采用回 ...
Executor的初始化     跟随SqlSession,Executory是SqlSession的对象属性     依赖-Transaction,执行时需要根据特定的事务,进行commit,rollback,close操作     Executory的创建过程如下     在Configuration的配置文件中执行全局的ExecutoryType,有BATCH,REUSE,SIMPLE,如果Cache开启的话还有CachingExecutor,他是前三种Executor的代理类 public Executor newExecutor(Transaction tra ...
SqlSession的初始化     声明周期-SqlSession为回话声明周期,理论上一次用户请求,即一个线程里只开启一次session,使       用后即关闭     依赖-DefaultSqlSessionFactory为SqlSesson的工场类,看下面的代码,即可知道Configuration,         Executor和Connection为它所依赖对象 private SqlSession openSessionFromConnection(ExecutorType execType, Connection connection) { tr ...
原始的初始化流程 1.    配置Configuration xml文件 2.  SqlSessionFactoryBuilder.build拿到SqlSessionFactory(全局唯一) 3.  代码中的调用如下        SqlSession session= sqlSessionFactory.openSession();        UserDao userDao = session.getMapper(UserDao.class);        UserVo vo = new UserVo();        vo.setName("a" ...
Global site tag (gtag.js) - Google Analytics