- 博客(222)
- 收藏
- 关注
原创 27.spring声明式事务
spring中的事务声明式事务(AOP)编程式事务(要改变原代码,不建议)<!--配置声明式事务--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <constructor-arg ref="dataSource"/> <!-- <property
2021-06-28 21:20:26
285
原创 26.事务回顾
回顾事务把一组事务当作一个业务来做:要么都成功,要么都失败事务在项目中非常重要,涉及到数据的一致性问题确保完整性和一致性事务的ACID原则:原子性一致性隔离性多个业务操作同一个资源,防止数据损坏持久性事务一旦提交,无论系统发生什么问题,结果都不会再被影响,被持久化的写到存储器中...
2021-06-28 21:19:11
155
原创 25.整合mybatis方式二
整合mybatis方式二(直接继承一个类)package com.faq.mapper;import com.faq.pojo.User;import org.apache.ibatis.session.SqlSession;import org.mybatis.spring.support.SqlSessionDaoSupport;import java.util.List;public class UserMapperImpl2 extends SqlSessionDaoSupport
2021-06-28 17:37:14
346
原创 24.整合mybatis方式一
整合mybatis方式一编写数据源配置sqlSessionFactorysqlSessionTemplate给接口写实现类将自己写的实现类注入到Spring 中测试package com.faq.pojo;import lombok.Data;@Datapublic class User { private int id; private String name; private String pwd;}public interface UserM
2021-06-28 17:15:04
96
原创 23.回顾mybatis
整合Mybatis步骤:导入相关jar包junitmybatismysql数据库spring相关的aop织入mybatis-spring 【new知识点】<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> &l
2021-06-28 11:04:19
86
原创 22.注解实现AOP
方式三:注解实现package com.faq.diy;//方法三:使用注解方式实现AOPimport org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.Signature;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect
2021-06-17 16:18:41
430
原创 21.AOP实现方式二
AOP实现方式二:自定义(主要是切面定义)execution(* com.faq.service.UserServiceImpl.*(..))"表达式:execution():表达式主体第一个*号:表示返回类型,星号表示所有的类型包名:表示需要拦截的包名,可用…表示所有包包后面是类名,也可以用*表示所有的类,此处只有UserServiceImpl一个类*(…)表示所有的方法名,后面括弧里面表示方法的参数,两个句点表示任何参数package com.faq.diy;public cl
2021-06-17 14:52:01
144
原创 20.AOP实现方式一
AOP什么是AOP面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,能够使业务逻辑各部分之间的耦合度降低。AOP在Spring中的作用提供声明式事务;允许用户自定义切面横切关注点:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志 , 安全 , 缓存 , 事务等等 …切面(ASPECT):横切关注点 被模块化 的特殊对象。即,它是一个类。通知(Advice):切面必须要完成的工作。即,
2021-06-11 12:36:28
134
原创 19.动态代理详解
动态代理动态代理和静态代理角色一样动态代理的代理类是动态生成的,不是我们直接写好的!动态代理分为两大类:基于接口的动态代理,基于类的动态代理基于接口–JDK动态代理【学习这个】基于类–cglibjava字节码实现:javassist需要了解两个类:Proxy:代理,InvocationHandler:调用处理程序动态代理的好处:可以使真实角色的操作更加纯粹!不用去关注一些公共的业务公共的业务交给代理角色,实现业务分工公共业务发生扩展时,方便集中管理一个动态代理类代理的是一
2021-06-10 20:39:46
76
原创 18.静态模式再理解
静态代理再理解package com.faq.demo02;public interface UserService { public void add(); public void delete(); public void update(); public void query();}//实现类package com.faq.demo02;//真实对象public class UserServiceImpl implements UserService
2021-06-09 20:18:35
187
原创 17.静态代理模式
代理模式学代理模式的原因:因为这就是SpringAOP的底层! 【SpringAOP和SpringMVC】代理模式的分类:静态代理动态代理静态代理角色分析:抽象角色:一般会使用接口或者抽象类来解决(租房)真实角色:被代理的角色(房东)代理角色:代理真实角色,代理真实角色会进行一些附属操作(中介)客户:访问代理角色(租客)代码步骤:接口package com.faq.demo01;//租房public interface Rent { public voi
2021-05-26 20:13:59
90
原创 15.使用javaConfig配置
使用Java的方式配置Spring我们现在要完全不使用Spring的xml配置,全权交给Java来做javaConfig是Spring的一个子项目,在Spring4之后,成为了核心功能实体类//这里这个注解的意思就是说明这个类被Spring接管了,注册到了容器中@Componentpublic class User { private String name; public String getName() { return name; }
2021-05-26 17:21:45
333
原创 14.Spring注解开发
使用注解开发在Spring4之后,要使用注解开发,必须要保证aop的包导入org.springframework:spring-aop:5.2.0.RELEASE使用注解需要导入context约束,增加注解支持<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/
2021-05-26 15:48:46
74
原创 13.注解实现自动装配
使用注解实现自动装配jdk1.5支持注解,Spring2.5开始支持注解!使用注解需求:导入约束: context约束配置注解的支持:context:annotation-config/<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i
2021-05-25 20:47:37
105
原创 12.自动装配bean
bean的自动装配自动装配是Spring满足bean依赖的一种方式Spring在上下文中自动寻找,并自动开始给bean装配属性在Spring中有三种装配的方式在xml中显示的配置在Java中显示的配置隐式的自动装配bean[重要!!]测试环境搭建一个人有两个宠物(三个对象)ByName自动装配<!-- byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应bean id --> <bean id="peopl
2021-05-25 17:32:00
88
原创 11.bean的作用域
bean的作用域1.单例模式(Spring机制默认的) <bean id="user2" class="com.faq.pojo.User" c:age="18" c:name="hhh" scope="singleton"/>2.原型模式:每次从容器中get的时候都会产生一个新对象 <bean id="user2" class="com.faq.pojo.User" c:age="18" c:name="hhh" scope="prototype"/>测试: @T
2021-05-25 16:51:55
91
原创 10.c命名和p命名空间注入
拓展方式注入使用P命名和c命名空间注入官方使用:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
2021-05-25 15:47:20
174
原创 9.依赖注入之set注入
Set注入的所有方式<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
2021-05-25 15:10:12
107
原创 8.DI依赖注入环境
依赖注入构造器注入(前面已经说过了)Set方式注入拓展方式注入set注入依赖注入:Set注入依赖:bean对象的创建依赖于容器注入:bean对象中的所有属性,由容器来注入【环境搭建】复杂类型package com.faq.pojo;public class Address { private String address; public String getAddress(){ return address; } pu
2021-05-25 14:05:54
123
原创 7.Spring配置
Spring配置1.别名<!--别名:如果添加了别名,我们也可以使用别名获取到这个对象--> <alias name="user" alias="hsihas"/>2.Bean的配置 <!--id:bean的唯一标识符,也就是相当于我们学的对象名 class:bean对象所对应的全限定名:包名+类名 name:也是别名,而且name可以同时取多个别名,用,空格,;分隔都行 --> <bean id="userT
2021-05-24 17:44:18
87
原创 6.IOC创建对象
IOC创建对象的方式使用无参构造器创建对象,默认!package com.faq.pojo;public class User { private String name; public User(){ System.out.println("User的无参构造"); } public String getName() { return name; } public void setName(String nam
2021-05-24 16:48:37
80
原创 5.HelloSpring
实体类package com.faq.pojo;public class Hello { private String str; public void setStr(String str) { this.str = str; } public String getStr(){ return str; } @Override public String toString(){ retur..
2021-05-24 11:11:06
111
原创 4.IOC本质
DI(依赖注入)是实现IOC的一种方式。面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制。控制反转后,将对象创建转移给第三方(用户)。所谓控制反转,就是获得依赖对象的方式反转了。IOC是Spring框架的核心内容,可以用各种方式实现IOC。Spring容器中在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从IOC容器中取出需要的对象采用xml方式配置Bean时,Bean的定义信息是和实现分离的,而采用注解的方式可以把两.
2021-05-23 17:37:19
72
原创 3.IOC理论推导
IOC理论推导以前:UserDao接口package com.faq.dao;public interface UserDao { void getUser();}UserDaoImpl实现类package com.faq.dao;public class UserDaoImpl implements UserDao{ public void getUser(){ System.out.println("默认获取用户的数据"); }}
2021-05-23 15:48:22
82
原创 2.spring的组成和拓展
spring的组成拓展在Spring官网有这个介绍:现代化的Java开发,就是基于spring的开发spring boot一个快速开发的脚手架基于spring boot可以快速的开发单个微服务约定大于配置spring cloudspring cloud是基于spring boot实现的大多数公司都使用spring boot快速开发,学习spring boot的前提是掌握spring及springMVC弊端:spring发展太久,违背最初的理念,配置十分繁琐,“配置地狱
2021-05-21 21:05:20
52
原创 1.Spring简介
spring简介2002 年,spring框架雏形:interface212004.3.24 spring框架发布1.0正式版Rod Johnson目的:解决企业应用开发的复杂性spring理念:使现有的技术更加容易使用,本身就是一个大杂烩,整合了现有的技术框架SSH:Struct2+Spring+Hibernate(全自动)SSM:SpringMvc+Spring+Mybatis(半自动,手写sql)官网:https://spring.io/projects/spr
2021-05-21 20:22:31
80
原创 30.自定义缓存Ehcache
自定义缓存ehcache:它是一个纯Java的进程内缓存框架,具有快速,精干等特点,是Hibernate(全自动框架,sql语句都不用自己写)中默认的CacheProviderEhcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存要在程序中使用ehcache,先要导包!<dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache -->
2021-05-21 14:46:28
202
1
原创 28.二级缓存
二级缓存namespace层面的缓存步骤:开启全局缓存<!--显示开启全局缓存--> <setting name="cacheEnabled" value="true"/>在要使用二级缓存的Mapper中开启<!--在当前Mapper.xml中使用二级缓存--> <cache/>也可以自定义一些参数 <!--在当前Mapper.xml中使用二级缓存--> <!--先进先出-->
2021-05-20 21:31:00
66
原创 27.一级缓存
一级缓存测试步骤:开启日志测试在一个Session中查询两次相同记录查看日志输出测试 @Test public void test(){ SqlSession sqlSession = MybatisUtils.getsqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.queryUserById(1);
2021-05-20 20:46:13
61
原创 26.缓存简介
缓存简介查询 : 连接数据库 , 耗资源! 一次查询的结果,给他暂存在一个可以直接取到的地方!-->内存 :缓存再次查询相同的数据时,直接走缓存,不用走数据库 什么是缓存[Cache]?存在内存中的临时数据将经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。读写分离,主从复制为什么使用缓存?减少和数据库的交互次数,减少系统开销,提高系统效率什么样的
2021-05-20 17:47:28
75
原创 25.动态SQL之foreach
SQL片段将一些功能的部分抽取出来,方便复用!使用SQL标签抽取公共的部分在需要使用的地方使用include标签引用即可<sql id="if-title-author"> <if test="title != null"> and title = #{title} </if> <if test="author != null"> and author
2021-05-20 17:12:02
838
原创 24.动态SQL常用标签
choose(when,otherwise) <select id="queryBlogChoose" parameterType="Map" resultType="Blog"> select * from mybatis.blog <where> <choose> <when test="title !=nll"> title=
2021-05-20 14:27:29
192
原创 23.动态SQL之if语句
动态SQL之IF语句实体类 //查询博客 List<Blog> queryBlogIf(Map map);BlogMapper.xml <select id="queryBlogIf" parameterType="Map" resultType="Blog"> select * from mybatis.blog where 1=1 <if test="title != null"> and ti
2021-05-19 17:10:37
279
1
原创 22.动态SQL环境搭建
动态SQL什么是动态SQL:动态sql就是根据不同的条件生成不同的SQL语句利用动态SQL这一特性可以摆脱拼接语句的情况动态SQL元素和JSTL或者XML的文本处理器相似在mybatis之前的版本中,有很多元素需要花时间了解。mybatis3大大精简了元素种类,现在只需学原来一半的元素即可。mybatis采用功能强大的基于OGNL的表达式来淘汰其他大部分元素。ifchoose(when,otherwise)trim(where,set)foreach搭建环境CREATE TABLE `
2021-05-19 16:13:50
119
原创 21.一对多的处理
一对多处理比如:一个老师拥有多个学生对于老师而言,就是一对多的关系环境搭建,和多对一一样//实体类package faq.pojo;import lombok.Data;@Datapublic class Student { private int id; private String name; private int tid;}package faq.pojo;import lombok.Data;import java.util.Li
2021-05-18 21:11:00
114
原创 20.多对一的处理
多对一处理resources下建路径有/隔开按照查询嵌套处理<mapper namespace="faq.dao.StudentMapper"> <!--思路:1.查询所有的学生信息2.根据查询出来的学生的tid,寻找对应的老师--> <select id="getStudent" resultMap="StudentTeacher"> select * from student </select>
2021-05-17 19:44:47
59
原创 19.复杂查询环境搭建
多对一处理多个学生,对应一个老师对于学生这边而言,关联。。。多个学生,关联一个老师【多对一】对于老师而言,集合,一个老师有很多学生【一对多】CREATE TABLE `teacher`(`id` INT NOT NULL,`name` VARCHAR(30) DEFAULT NULL,PRIMARY KEY(`id`))ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO teacher(`id`,`name`)VALUES (1,'秦
2021-05-13 20:53:36
51
原创 18.Lombok
Lombokjava库、插件、注解、不用写get、set等方法使用步骤:1.在IDEA中安装Lombok插件2.在项目中导入Lombok的jar包、<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</v
2021-05-13 16:18:04
114
原创 17.注解增删改查
CRUD可以在创建工具类时实现自动提交事务 public static SqlSession getsqlSession(){ return sqlSessionFactory.openSession(true);//设置为true }编写接口,增加注解 @Select("select * from user where id = #{id}") User getUserById(@Param("id") int id); //有多个参数时一定要加@
2021-05-13 15:34:32
111
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人