spring学习笔记三
spring 整合mybatis(重点)
mybatis管理的是sqlSessionFactory对象
红色框框里的内容可以改。
第一步:在pom.xml配置相应坐标
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version>
</dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.10.RELEASE</version>
</dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version>
</dependency>
第二步:在config文件夹下创建MybatisConfig.java文件
public class MybatisConfig { //定义bean,SqlSessionFactoryBean,用于产生SqlSessionFactory对象 @Bean public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){ SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); ssfb.setTypeAliasesPackage("com.itheima.domain");//初始化类型别名,可以修改ssfb.setDataSource(dataSource); return ssfb; } //定义bean,返回MapperScannerConfigurer对象 @Bean public MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setBasePackage("com.itheima.dao");//初始化映射配置,可以改return msc; }
}
第三步:测试代码
public class App2 { public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); AccountService accountService = ctx.getBean(AccountService.class); Account ac = accountService.findById(1); System.out.println(ac); }
}
spring整合JUnit
第一步:在pom.xml导入坐标
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope>
</dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.10.RELEASE</version>
</dependency>
第二步: 在test文件下编写测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class BookDaoTest { @Autowired private BookDao bookDao; @Test public void testSave() { bookDao.save(); }
}
AOP面向切面编程
AOP入门案例
第一步:导入坐标
spring-context下面绑定了spring-aop的依赖因此导入spring-context的依赖即可。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.10.RELEASE</version>
</dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version>
</dependency>
第二步:在aop文件夹下制作连接点方法
public class MyAdvice { public void method(){ System.out.println(System.currentTimeMillis()); }
}
第三步:切入点
//1.告诉spring来加载
@Component
//2.告诉spring这是做AOP的
@Aspect
public class MyAdvice { //3.定义切入点@Pointcut("execution(void com.itheima.dao.BookDao.update()) ") private void pt(){} //5.把通知跟切入点绑定@Before("pt()") //4.定义通知public void method(){ System.out.println(System.currentTimeMillis()); }
}
第四步:SpringConfig.java文件配置注解
@Configuration
@ComponentScan("com.itheima")
//@PropertySource加载properties配置文件
@PropertySource({"jdbc.properties"})
@EnableAspectJAutoProxy //配置这个注解
public class SpringConfig {
}
AOP工作流程
AOP切入点表达式
AOP的通知类型
MyAdvice代码:
@Component
@Aspect
public class MyAdvice { @Pointcut("execution(public int com.itheima.dao.BookDao.select())") private void pt(){} @Around("pt()") public Object method(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("前。。。。"); Object proceed = joinPoint.proceed(); System.out.println("后。。。。"); return proceed; }
}
案例:测量业务层接口执行效率
AOP通知获取数据
AOP通知获取参数数据
BookDaoImpl的代码
public void save(String title, String author) { }
AOP通知获取返回值数据
AOP获取异常数据
案例:百度网盘密码空格问题
总结