网站建设实训报告册,h5移动端网站开发,昆明汽车建站网站模板,wordpress添加搜索插件学习笔记系列开头惯例发布一些寻亲消息
链接#xff1a;https://baobeihuijia.com/bbhj/
Mybatis - Spring#xff08;使用第三方包new一个对象bean#xff09; 原始的Mybatis与数据库交互【通过sqlmapconfig来配置和连接】 初始化SqlSessionFactory获得连接获取数据层接口…学习笔记系列开头惯例发布一些寻亲消息
链接https://baobeihuijia.com/bbhj/
Mybatis - Spring使用第三方包new一个对象bean 原始的Mybatis与数据库交互【通过sqlmapconfig来配置和连接】 初始化SqlSessionFactory获得连接获取数据层接口 需要一个类与数据中的数据进行匹配用注解形式进行增删改查 关闭连接 使用第三方包Spring-Mybatis将mybatis改为spring的模式不要再类内new SqlSessionFactory而是把mybatis当作容器的对象可以用 引入mybatis-spring第三方包来帮助整合在注解方法中如果要用第三方包则需要新建一个config然后在这个类中手动new一个bean通过Bean生成一个SqlSessionFactoryBean对象加入扫描类型的包与数据源建立连接生成MapperScannerConfigurer对象获取数据层因此就可以通过注解的方式生成对象调用数据库了 public class MybatisConfig {//定义beanSqlSessionFactoryBean用于产生SqlSessionFactory对象Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){SqlSessionFactoryBean ssfb new SqlSessionFactoryBean();ssfb.setTypeAliasesPackage(com.itheima.domain);ssfb.setDataSource(dataSource);return ssfb;}//定义bean返回MapperScannerConfigurer对象Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc new MapperScannerConfigurer();msc.setBasePackage(com.itheima.dao);return msc;}
}Junit-Spring添加注解 Junit与spring的整合在测试类上添加注解然后在类内直接Autowired就可以将容器的对象引入测试 //设置类运行器
RunWith(SpringJUnit4ClassRunner.class)
//设置Spring环境对应的配置类
ContextConfiguration(classes SpringConfig.class)AOP-Spring
新建一个class作为component并且标记该类不是普通的类是AOP类打开config的AOP扫描
一般用在service拦截判断拦截一批处理一批然后将正确数据传入数据层 AOP面向切面编程通过调用第三方包AOP不需要new对象只需要新建一个component类并且通过EnableAspectJAutoProxy和Aspect保证config知道有AOP并且知道哪个是AOP从而调度对象代码执行时切入执行通知 在不惊动原始设计的基础上为其增强功能 连接点运行过程的任意方法切入点多个方法通知在切入点指定的操作即共性功能切面通知与切入点的绑定 在spring-config中添加
EnableAspectJAutoProxyComponent
//设置当前类为切面类类
Aspect
public class MyAdvice {//设置切入点要求配置在方法上方Pointcut(execution(void com.itheima.dao.BookDao.update()))private void pt(){}//设置在切入点pt()的前面运行当前操作前置通知// Before(pt())public void method(){System.out.println(System.currentTimeMillis());}
}AOP工作流程 spring容器启动容器开启AOP检测扫描component的时候扫描Aspect读取所有的绑定通知的切入点 匹配成功创建原始对象被代理的原始对象称为目标对象的代理对象bean进入容器匹配失败自定义对象以及引入的对象如mybatisbean加入到容器 AOP切入点描述表达式 execution(返回值 方法路径 (参数))
// 采用通配符来为一批方法设置切入点// 技巧
切入点一般描述到接口
返回值对于增删改方法用精准类型加速匹配对于查询类使用*通配快速匹配AOP通知类型 前置通知Before 后置通知After 环绕Around【ProceedingJoinPoint pjp】 // 拦截后需要return
// 要抛出异常不然就相当于执行原始代码出现问题但是在这里将问题吃掉了Around(pt2())public Object aroundSelect(ProceedingJoinPoint pjp) throws Throwable {System.out.println(around before advice ...);//表示对原始操作的调用Integer ret (Integer) pjp.proceed();System.out.println(around after advice ...);return ret;}AfterReturning AfterThrow AOP通知拿参数 都可以拿到参数可被修改 JoinPoint jp
Object[] args jp.getArgs();
System.out.println(Arrays.toString(args));public Object around(ProceedingJoinPoint pjp) {Object[] args pjp.getArgs();System.out.println(Arrays.toString(args));args[0] 666;Object ret null;try {ret pjp.proceed(args);} catch (Throwable t) {t.printStackTrace();}return ret;}返回值 // 接返回值AfterReturning(value pt(),returning ret)public void afterReturning(JoinPoint jp,String ret) {System.out.println(afterReturning advice ...ret);}// 接返回值Around(pt2())public Object aroundSelect(ProceedingJoinPoint pjp) throws Throwable {System.out.println(around before advice ...);//表示对原始操作的调用Integer ret (Integer) pjp.proceed();System.out.println(around after advice ...);return ret;}异常 Transactional// 接异常AfterThrowing(value pt(),throwing t)public void afterThrowing(Throwable t) {System.out.println(afterThrowing advice ...t);
}// 接异常Around(pt2())public Object aroundSelect(ProceedingJoinPoint pjp) throws Throwable {System.out.println(around before advice ...);//表示对原始操作的调用Integer ret (Integer) pjp.proceed();System.out.println(around after advice ...);return ret;}事务 【spring在业务层开了一个事务保证一系列数据操作同成功同失败用的是mysql的事务原理】 // 在接口上添加Transactional// 定义一个事务管理器Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource){DataSourceTransactionManager transactionManager new DataSourceTransactionManager();//第三方需要对象的时候要通过参数transactionManager.setDataSource(dataSource);return transactionManager;}// 告诉spring要检测注解事务
EnableTransactionManagementSpring的事务原理:通过使用共同的datasource来开启mysql事务 事务管理员发起事务方事务协调员加入事务方 有些异常默认不参与回滚需要Transactional的时候手动添加 事务传播行为有七种REQUIRES_NEW是让该事务协调员不加入到事务管理员而是自己开一个事务失败了不会跟着回滚 Transactional(propagation Propagation.REQUIRES_NEW)务方
[外链图片转存中…(img-OBMznC6o-1703559380919)] 有些异常默认不参与回滚需要Transactional的时候手动添加 事务传播行为有七种REQUIRES_NEW是让该事务协调员不加入到事务管理员而是自己开一个事务失败了不会跟着回滚 Transactional(propagation Propagation.REQUIRES_NEW)