概述 示例 项目结构 数据库表数据Oracle 实体类 服务层 Spring配置文件 单元测试 日志输出 日志分析 示例源码 概述 Spring Cache基于注解的配置 如果不想使用注解或者由于其他原因无法获得项目的源码等...,Spring也支持使用XML的方式配置Spring Cache,主要是通过类似于aop:advice的cache:advice来进行的。...cache:advice下面可以指定多个cache:caching元素,其有点类似于使用注解时的@Caching注解。...cache:caching元素下又可以指定cache:cacheable、cache:cache-put和cache:cache-evict元素,它们类似于使用注解时的@Cacheable、@CachePut...; import org.junit.Before; import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext
概述 使用Spring JDBC 基本的数据操作 更改数据 返回数据库表的自增主键值 批量更改数据 查询数据 使用RowCallbackHandler处理结果集 使用RowMapperT处理结果集 RowCallbackHandler...当然了,还有其他方法 ,需要指出的是,在实际用用中,应该优先考虑不带回调接口的JdbcTemplate方法。没有必要使用那些带有回调接口的方法,因为Spring会在内部自动创建这些回调实例。...更好的选择是使用JDBCTemplate批量数据更改的方法。一般情况下,后者拥有更好的性能,因为更新的数据将被批量发送到数据库中,它减少了对数据库访问的次数。 ?...Spring在内部使用JDBC提供的批量更新API完成操作,如果底层的JDBC Driver不支持批量更新操作,Spring将采用逐条更新的方式模拟批量更新。...这里应该使用RowCallbackHandler接口,在processRow接口方法内部处理结果集数据。
1、使用JdbcTemplate的execute()方法执行SQL语句 Java代码 jdbcTemplate.execute("CREATE TABLE USER (user_id integer..., new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()}); 4、使用JdbcTemplate进行查询时...将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。...除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring...所提供的相关封装类别方法的使用。
在Java中一般会对调用方法进行缓存控制,比如 findUserById(Sting id),先从缓存中查找有没有符合查询条件的数据,如果没有,则执行改方法从数据库中查找该用户,然后添加到缓存中,下次调用时将从缓存中获取...通过使用AOP对方法机型织入,如果已经为特定方法入参执行过该方法,那么不必执行实际方法就可以返回被缓存的结果。...假设:我们根据artisanName查询artisan信息是一个非常频繁的动作,自然会想到对一个artisan的查询方法做缓存,以避免频繁的数据库访问操作,提高页面的相应速度。...Artisan的服务类,此服务使用缓存管理器来支持用户查询。...,当调用这个方法的时候,会从一个名叫 littleArtisan的缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象。
Spring Cache抽象-基于XML的配置声明(基于ConcurrentMap的配置),本篇博文基于XML的配置,使用了Ehcache缓存管理器。...---- 基于Java类注解的EhCache请阅读 Spring Cache抽象-使用Java类注解的方式整合EhCache ---- 完整示例 pom.xml增加依赖 ...; private JdbcTemplate jdbcTemplate; @Autowired public void setJdbcTemplate(JdbcTemplate...@return: LittleArtisan */ public LittleArtisan getArtisan(String artisanName) { // 方法内部实现不考虑缓存逻辑...---- 单元测试 package com.xgj.cache.springCacheXmlEhCache.service; import org.junit.After; import org.junit.Before
我们在使用BeanPropertyRowMapper时,是给query()方法传递一个BeanPropertyRowMapper对象,让JdbcTemplate帮我们把查询结果集ResultSet的每一行结果都使用...BeanPropertyRowMapper.mapRow()方法,转化成我们想要的Java类对象 注意:自动绑定,需要列名称和Java实体类名字一致,如:属性名 “userName” 可以匹配数据库中的列字段...重点(敲黑板) 所以,如果在使用时,Java类名称要想和数据库字段名称匹配上,必须要把数据库字段名称设计成以下两种中的一种, 数据库字段名设计成全小写的形式,如myname;数据库字段名设计成下划线分割的形式...= jdbcTemplate.query( SEL_BY_USERNAME_PWD, new Object[] { user.getUserName(), user.getPwd()...}, new BeanPropertyRowMapper(UserEntity.class) ); User user = jdbcTemplate.queryForObject
-- 通过AOP配置提供事务增强,让service包下所有的bean的所有方法拥有事务 --> 使用DBCP实现的数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method...loginDate; } public void setLoginDate(Date loginDate) { this.loginDate = loginDate; } } 两个dao(用的jdbcTemplate...; final User user = new User(); jdbcTemplate.query(sqlString, new Object[]{userName}, new RowCallbackHandler...web项目 配置文件 junit单元测试 springmvc 项目完整示例03 小结 springmvc 项目完整示例04 整合mybatis mybatis所需要的jar包 mybatis配置文件 sql
https://blog.csdn.net/sinat_35512245/article/details/52918120 在MyEclipse中使用Junit 的方法,这一部分先记 Test...Case 的创建方法。...MyEclipse中创建Junit 的步骤如下: 1、选择一个存放测试类的package,右键–>new–>Other–>Java–>JUnit–>JUnit Test Case–>填写完测试类的名字,...然后,点“finish”,这样就创建了一个 Junit Case。...下面是一个简单的例子: /** * */ package com.hqj.java.nextline; import static org.junit.Assert.*; import org.junit.After
final List objList = new ArrayList(); jdbcTemplate.query(listSql, new RowCallbackHandler()...【比JdbcTemplate更好使用】): TeacherPupil.java: package com; public class TeacherPupil { public String...for(Object obj :regis){ System.out.println(obj); } System.out.println("成功查询多个..."); / /*一对多,专门做一个类TeacherPupil,接收.用底下的as 别名方法,就可以解决teacher和pupil表中都有同名的字段name的方法。...这样就可以从不同的表中同时取值了。
这些注解定义了哪些方法的返回值会被缓存或者从缓存中移除。 需要注意的是,只有public定义的方法才可以被缓存, private、protected或者使用default修饰符的方法都不能被缓存。...当在一个类上使用注解时,该类中每个公共方法的返回值都将被缓存到指定的缓存项或者从中移除。...在默认情况下,缓存抽象使用方法签名以及参数作为key,并将该键与方法调用的结果作为Value,如果在Cache注解上没有指定Key,则Spring会使用KeyGenerator来生成一个key....在调用方法前,将对注解中声明的条件进行评估,满足条件才缓存。 与condition属性相反,可以使用unless属性排除某些不希望缓存的对象。...当希望使用方法返回值来更新缓存时可以选择这种方法 如果使用了 @Cacheable 注释,则当重复使用相同参数调用方法的时候,方法本身不会被调用执行,即方法本身被略过了,结果直接从缓存中找到并返回了。
:component-scan base-package="com.nicestar"/> 创建实体类和仓储 上面传统方式是先建数据表,这里是创建实体类后自动生成数据表,注意对比这里使用的是包装类型...,即没有任何方法声明的接口。...Repository 查询方法定义规则: 示例: public interface EmployeeRepository extends Repository {...public List findByNameInOrAgeLessThan(List names, Integer age); } 对于按照方法命名规则来使用的话,有弊端...: 方法名会比较长:约定大于配置 对于一些复杂的查询,很难实现 Query 注解 不需要遵循查询方法命名规则。
本节分析JdbcTemplate的源码。...一. execute()方法 从简单更新语句入手 使用JdbcTemplate的update()方法可以进行数据库的更新操作,源码如下: public int update(String sql,...的execute()是一个核心方法,JdbcTemplate的大部分操作最后都是调用execute()方法执行。...,保证同一线程中的数据库操作都是使用同一个事务连接。...,只不过是在回调方法中使用PreparedStatement的executeQuery()方法执行查询逻辑。
6、单元测试:JUnit 在之前的测试方法中,几乎都能看到以下的两行代码: ApplicationContext context = new ClassPathXmlApplicationContext...针对上述问题,我们需要的是程序能自动帮我们创建容器。我们都知道JUnit无法知晓我们是否使用了 Spring 框架,更不用说帮我们创建 Spring 容器了。...注解标识的位置 @Transactional标识在方法上,则只会影响该方法 @Transactional标识的类上,则会影响类中所有的方法 7.3.5、事务属性:只读 ①介绍 对一个查询操作来说,如果我们把它设置成只读...②使用方式 @Transactional(readOnly = true) public void buyBook(Integer bookId, Integer userId) { //查询图书的价格...在service类中有a()方法和b()方法,a()方法上有事务,b()方法上也有事务,当a()方法执行过程中调用了b()方法,事务是如何传递的?合并到一个事务里?还是开启一个新的事务?
在实际业务中,进行单元测试时,我们除了需要测试正常流程和正确的程序功能之外,可能还需要测试异常场景,在Junit中该如何模拟异常场景呢? 在Junit中,通常有3种方式去模拟生产中的异常场景。...使用@Test结合它的属性expected 使用try-catch并且最后使用fail() 使用@Rule和 ExpectedException 1....; import org.junit.Test; public class Exception1Test { /** * 如果测试该方法时产生一个ArithmeticException...的异常,则表示测试通过 * 你可以改成int i = 1 / 1;运行时则会测试不通过-因为与你的期望的不符 */ @Test(expected = ArithmeticException.class...; //注意:这是java中的静态引入 import static junit.framework.TestCase.fail; import static org.hamcrest.CoreMatchers.is
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 通过JdbcTemplate...spring-test 5.2.6.RELEASE 注意:MySQL驱动的版本需要与下载使用的...增删改操作时,调用jdbcTemplate.update()方法 查询操作时,可调用jdbcTemplate.queryForObject()和jdbcTemplate.query()等方法 ①添加操作...;"; //第二步 调用jdbcTemplate的方法完成更新 int rows = jdbcTemplate.update(sql, "高启兰", 20, "女");...④查询操作 查询操作,可以查询对象,查询集合,查询单个值等... import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired
目录 JdbcTemplate 简介 准备 ①加入依赖 ②创建jdbc.properties ③配置Spring的配置文件 测试 ①在测试类装配 JdbcTemplate ②测试增删改功能 ③查询一条数据为实体类对象...③观察结果 基于XML的声明式事务 场景模拟 修改Spring配置文件 JdbcTemplate 简介 Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作 准备...③观察结果 由于使用了Spring的声明式事务,更新库存和更新余额都没有执行 @Transactional注解标识的位置 @Transactional标识在方法上,咋只会影响该方法 @Transactional...标识的类上,咋会影响类中所有的方法 事务属性:只读 ①介绍 对一个查询操作来说,如果我们把它设置成只读,就能够明确告诉数据库,这个操作不涉及写操作。...②使用方式 @Transactional(readOnly = true) public void buyBook(Integer bookId, Integer userId) { //查询图书的价格
七.JdbcTemplate 概念:Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。...目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。 JdbcTemplate处理了资源的建立和释放。...方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句; query方法及queryForXXX方法:用于执行查询相关语句; call方法: 用于执行存储过程、函数相关语句...:void方法之前 @After: void方法之后 @Test:用于单元测试的void方法 import org.junit.After; import org.junit.Before; import...jdbcTemplate; /** * 这个注解是在junit单元测试,常规的void方法之前进行; */ @Before public void before
的操作 PrepareStatement的缺陷 NamedParameterJdbcTemplate的操作示例 示例源码 概述 除了标准的JdbcTemplate外,Spring还提供了两个易用的JDBC...模板类 SimpleJdbcTemplate 封装了JdbcTemplate,将常用的API开放出来 ....占位符声明参数,并使用索引号绑定参数,必须要保证参数的索引号和SQL语句中的占位符“?”的位置正确匹配。...// 定义命名参数 SqlParameterSource sps = new BeanPropertySqlParameterSource(artisan); // 使用模板类方法...artisanName", artisan.getArtisanName()) .addValue("artisanSex",artisan.getArtisanSex); 由于这个原因,使用方法调用链模式设计的
创建DynamicDataSourceHolder用于持有当前线程中使用的数据源标识 步骤四 配置多个数据源和DynamicDataSource的bean 步骤五 定义名为@DataSource的注解...抽象类的determineCurrentLookupKey方法。...方法查找当前的lookupKey。...,也可以加在接口或者接口的实现类上,优先级别:方法>实现类>接口。...,如果没有则使用其实现接口的注解 for (Class<?
);获取下一个主键值,主键值类型为String 在其抽象类AbstractDataFieldMaxValueIncrementer中,提供了几个重要属性: incrementerName:定义序列名后模拟序列表的名称...AbstractSequenceMaxAbstractSequence使用标准的数据库序列产生主键值, 而AbstractColumnMaxValueIncrementer使用一张模拟序列的表产生主键值...1、数据库层主键方案不足: 其一,它给应用开发带来不便,因为你必须通过一个查询获取新增数据的主键值; 其二,不方便主键值的全局管理和控制,使系统散失灵活性; 其三,不方便数据的整合和迁移。...JdbcTemplate 为获取基于行集的结果集,提供如下查询方法 SqlRowSet queryForRowSet(String sql) SqlRowSet queryForRowSet(String...所以对于大结果集的数据,使用SQLRowSet会造成很大的内存消耗,不过JdbcTemplate的maxSize属性依然会现在SqlRowSet的返回记录数。
领取专属 10元无门槛券
手把手带您无忧上云