04 2022 档案
摘要:编程式事务 编程式事务是指通过代码手动提交回滚事务的事务控制方法,SpringJDBC通过TransactionManager事务管理器实现事务控制,事务管理器提供commit/rollback方法进行事务提交与回滚 1.在applicationContext.xml中配置事务管理器 2.在需要事务
阅读全文
摘要:jdbcTemplate.update()方法可实现数据写入操作 package com.spring.jdbc.dao; import com.spring.jdbc.entity.Employee; import org.springframework.jdbc.core.BeanPropert
阅读全文
摘要:查询单条数据 jdbcTemplate.queryForObject() 查询复合数据 jdbcTemplate.query() 无法进行实体类映射 使用jdbcTemplate.queryForList()保存查询结果数据,结果封装成map对象 在EmployeeDao中增加查询方法 packag
阅读全文
摘要:有Mybatis为什么还需要Spring JDBC? MyBatis作为ORM框架,封装程度高,适合中小企业进行软件的敏捷开发,让程序员快速的完成数据交互工作,但是MyBatis涉及到一系列xml的配置以及各种操作细节,封装程度高,执行效率低。Spring JDBC只是对原始JDBC的API简单封装
阅读全文
摘要:Stream常用方法 Stream流的创建 package com.stream; import org.junit.Test; import java.util.ArrayList; import java.util.List; import java.util.Random; import ja
阅读全文
摘要:函数式接口 一个接口中有且只有一个抽象方法,这种接口视为函数式接口 函数式编程 基于函数式接口并使用Lambda表达的编程方式,函数式编程理念是将代码作为可重用数据代入到程序运行中 Lambda表达式语法 package com.lamba; @FunctionalInterface public
阅读全文
摘要:Spring AOP实现原理 Spring基于代理模式实现功能动态扩展,包含两种形式: 1.目标类拥有接口,通过JDK动态代理实现功能扩展。 2.目标类没有接口,通过CGLib组件实现功能扩展 代理模式 代理模式通过 代理对象 对 原对象的实现功能 进行拓展 静态代理 静态代理实现功能拓展,实现目标
阅读全文
摘要:反射是在运行时动态访问类与对象的技术,大多数框架都基于反射实现参数设置,动态注入等。 反射的四个核心类 Class、Constructor、Method、Field Class核心方法 员工实体类Employee package com.imooc.reflect.entity; /** * 员工实
阅读全文
摘要:1.添加依赖 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.17</version> </dependen
阅读全文
摘要:package com.spring.aoc.dao; public class UserDao { public void insert(){ System.out.println("新增用户数据"); } } package com.spring.aoc.service; import com.
阅读全文
摘要:package com.spring.aoc.dao; public class UserDao { public void insert(){ System.out.println("新增用户数据"); } } package com.spring.aoc.service; import com.
阅读全文
摘要:Spring AOP与AspectJ Eclipse AspectJ,一种基于Java平台的面向切面编程的语言 Spring AOP,使用AspectJWeaver实现类与方法匹配,并基于代理模式实现对象运行时功能扩展 几个关键概念 AOP的配置过程 1.依赖AspectJ 2.实现切面类/方法 3
阅读全文
摘要:Spring AOP - Aspect Oriented Programming面向切面编程,在不修改源码的情况下对程序行为进行拓展。AOP的做法是将通用、与业务无关的功能抽象封装为切面类,切面可配置在目标方法的执行前、后运行,真正做到即插即用。 用AOP实现在所有方法调用前打印时间 在pom.xm
阅读全文
摘要:Spring Text是Spring中用于测试的模块,Spring Text对JUnit4单元测试框架有良好的整合,通过Spring Test可在JUnit在单元测试时自动初始化IoC容器 Spring与JUnit4的整合过程 1.Maven工程依赖spring-test <dependencies
阅读全文
摘要:基于JavaConfig的优势 完全摆脱XML的束缚 注解配置相对分散,利用JavaConfig对注解配置集中管理 在编译时进行依赖检查,不容易出错 JavaConfig核心注解 @Configuration 描述类,说明当前类是Java Config配置类完全替代XML文件 @Bean 描述方法,
阅读全文
摘要:三类注解 组件类型注解-声明当前类的功能与职责 自动装配注解-根据属性特征自动注入对象 元数据注解-更细化地辅助IoC容器管理对象的注解 四种组件类型注解 @Component 组件注解,通用注解被该注解描述的类将被IoC容器管理并实例化 @Controller 语义注解,说明当前类是MVC应用中的
阅读全文
摘要:bean scope属性 bean scope属性用于决定对象何时被创建与作用范围,bean scope配置将影响容器内对象的数量,默认情况下bean会在IoC容器创建后自动实例化,全局唯一。 bean scope用法 <bean id="bookDao" class="com.spring.ioc
阅读全文
摘要:String[] beanNames = context.getBeanDefinitionNames(); 获取容器内所有beanId数组,返回一个string数组 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp
阅读全文
摘要:两个entity类 package com.spring.ioc.entity; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; public class
阅读全文
摘要:依赖注入是指运行时将容器内对象利用反射赋给其他对象的操作,依赖注入有两种形式 1.基于setter方法注入对象 2.基于构造方法注入对象。 基于setter方法注入对象包含两种使用场景 1.利用setter实现静态数值注入(value) <?xml version="1.0" encoding="U
阅读全文
摘要:spring对bean的管理提供了三种配置方式 1.基于XML配置bean 2.基于注解配置bean 3.基于java代码配置bean 三种配置方式本质是一样的,都是告诉springIoc容器如何实例化,如何管理这些bean 基于XML配置bean 在applicationContext.xml中所
阅读全文
摘要:传统的对象创建和对象关联设置 package com.spring.ioc; import com.spring.ioc.entity.Apple; import com.spring.ioc.entity.Child; public class Application { public stati
阅读全文
摘要:使用注解可以把原来放在XML文件中的配置信息和SQL语句放在程序中,小型敏捷开发的工程可以使用注解,而大型的需要团队协作的项目要使用XML 1.在dao目录创建一个GoodsDAO接口 package com.imooc.mybatis.dao; import com.imooc.mybatis.d
阅读全文
摘要:批量插入数据 <insert id="batchInsert" parameterType="java.util.List"> insert into t_goods (title,sub_title,original_cost,current_price, discount,is_free_del
阅读全文
摘要:MyBatis的默认连接池是POOLED,如果要使用其他连接池 1.添加依赖 <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.4</version> </dependen
阅读全文
摘要:PageHelper是MyBatis中拓展插件,他能帮助我们自动完成分页查询的工作 PageHelper的使用流程 1.maven引入PageHelper和jsqlparser <dependencies> <!--5.1.10及以上版本的PageHelper需要2.0及以上的jsqlparser支
阅读全文
摘要:多表关联查询是两个表通过主外键在一条SQL中完成所有数据的提取,多表级联查询是指通过一个对象来获取与他关联的另外一个对象,执行的SQL语句分为多条。 首先确定实体关系是一对多或是多对一 OneToMany对象关联查询 1.在Many的Mapper XML文件添加SQL语句 <?xml version
阅读全文
摘要:一级缓存默认开启,缓存范围是SqlSession会话,二级缓存需手动开启,缓存范围是Mapper Namespace。在某个namespace中手动开启的二级缓存被所有SqlSession共享。二级缓存开启后默认所有查询操作均使用缓存,为保证数据的一致性,写操作commit提交时对该namespac
阅读全文
摘要:动态SQL是根据参数数据动态组织SQL的技术 Mapper XML: <select id="dynamicSQL" parameterType="java.util.Map" resultType="com.MyBatis.entity.Goods"> select * from t_goods
阅读全文
摘要:什么是日志? 日志就是系统运行的历史记录,日志文件是用于记录系统操作世事件的记录文件或文件集合,日志保存历史数据,是诊断问题以及理解系统活动的重要依据。 SLF4j与Logback 在Java中日志分为两部分:日志门面与日志实现。日志门面为Java提供了统一的日志调用接口,日志实现的组件提供了日志的
阅读全文
摘要:SQL注入攻击是指攻击者利用SQL漏洞,绕过系统约束,越权获取数据的攻击方式。 #SQL代码 " select * from a where name=' " +name+ " ' "; #正常情况,name:张三 select * from a where name='张三'; #SQL注入,na
阅读全文
摘要:事务的ACID属性 原子性,一致性,隔离性,持久性 事务的原子性: 一个事务中所有的操作要么全部完成,要么全部失败。事务执行后,不允许停留在中间某个状态 事务的一致性: 不管在任何给定的时间、并发事务有多少,事务必须保证运行结果的一致性。 事务的隔离性: 隔离性要求事务不受其他并发事务的影响,如同在
阅读全文
摘要:一、数字函数 二、时间函数 日期格式化函数 DATE_FORMAT(日期,表达式); select ename,date_format(hiredate,"%Y") from t_emp; 表达式格式 日期偏移计算 DATE_ADD( 日期 INTERVAL 偏移量 时间单位); select da
阅读全文
摘要:数据插入: ignore关键字会让insert只插入数据库不存在的记录 #向数据表中插入数据 insert into t_dept(deptno,dname,loc) values(60,"后勤部","北京"),(70,"保安部","北京"); #向技术部插入一条员工记录 insert into t
阅读全文
摘要:表连接的分类: 表连接分为两种:内连接和外连接。内连接是结果集中只保留符合连接条件的记录,外连接是不管符不符合连接条件,记录都要保存到结果集中。 相同的数据表也可以做表连接。表连接查询速度比子查询高很多 内连接: 内连接的数据表不一定有同名字段,只要字段之间符合逻辑关系就行。 #内连接的多种语法形式
阅读全文
摘要:定位: position: relative(相对)、absolute(绝对)、static(无定位)、fixed(固定) 相对定位:position: relative; 相对于原来的位置发生变化,原来的位置不会被填充,依然是文档流 绝对定位:position: absolute; 相对于已定位的
阅读全文
摘要:聚合函数: 聚合函数在数据的查询分析中,应用十分广泛。聚合函数可以对数据求和、求最大值和最小值、求平均值等等。 聚合函数不能出现在where子句中,这是一种语法错误,聚合函数执行需要一个数据范围,而在where子句执行时还未划出这个范围。 1.sum函数由于求和,只能用于数字类型,字符类型的统计结果
阅读全文
摘要:查询语句的子句执行顺序 1.词法分析与优化,读取SQL语句 2.from,选择数据来源 3.where,筛选出符合条件的记录 4.group by, 对where筛选出的记录分组 5.select,选择输出内容 6.order by,对结果排序 7.limit,规定结果集中出现的数量 简单查询: #
阅读全文
摘要:SQL分为三个部分: DDL:Data Definition Language,数据定义语言,用来维护存储数据的结构(数据库,表) 代表指令:create,drop,alter等 DML:Data Manipulation Language,数据操作语言,用来对数据进行操作(数据表中的内容) 代表指
阅读全文
摘要:使用索引可以加快查询速度 索引的原则 数据量很大,且经常被查询的数据表可以设置索引 索引只添加在经常被作为检索条件的字段上面 不要在大字段上创建索引,字符串过长不适合添加索引 use test; #创建索引 create table t_message ( id int unsigned prima
阅读全文
摘要:构造数据库必须遵循一定的规则,这种规则就是范式,目前关系数据库有6中范式,一般只需满足第三范式即可 MySQL字段约束有四种: 1.主键约束primary key,字段值唯一且不为空 主键使用数字类型,数字类型检索速度快 如果主键是数字类型,可以设置自动增长(id int primary key a
阅读全文
摘要:#展示逻辑库的逻辑空间 show databases; #创建一个逻辑空间 create database demo; #删除逻辑空间 drop database demo; #创建一个数据表 use test; create table student( id int unsigned prima
阅读全文
摘要:创建表时在末尾加上 character set = utf8 create table student( id int unsigned primary key, name varchar(20) not null, sex char(1) not null, birthday date not n
阅读全文
摘要:路径表达式就是指 在加载XMl文件时传入的特殊格式的字符串, ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); classpath类路径如图,res
阅读全文
摘要:两种方式,推荐使用第一种 public class SpringApplication { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext
阅读全文
摘要:基于构造方法实例化对象 如果<bean>中不写任何配置信息,则调用无参构造实例化对象 <bean id="apple2" class="com.example.s02.ioc.entity.Apple"> <constructor-arg name="title" value="红富士"></con
阅读全文
摘要:IoC是一种设计理念,是现代程序设计遵循的标准,是宏观目标 DI是IoC在编程语言中的具体实现技术,是微观实现 DI在Java中利用反射技术实现运行时对象的创建与关联 (DI依赖注入) IoC控制反转: 将对象创建与管理的权利交给第三方,由第三方负责对象的创建与管理,对于这个集中管理的容器,我们将其
阅读全文
摘要:1.创建mybatis-config.xml进行环境配置、全局设置、Mapper声明及其他配置信息 2.在初始化工具类MyBatisUtils中,通过SqlSessionFactoryBuilder.build() 创建一个全局唯一的SqlSessionFactory对象 3.通过SqlSessio
阅读全文
摘要:Mapper XML <insert id="insert" parameterType="com.MyBatis.entity.Goods"> INSERT INTO t_goods(title,sub_title,original_cost,current_price,discount,is_f
阅读全文
摘要:ResultMap可以将查询结果映射为复杂类型的Java对象 ResultMap适用于java对象保存多表关联结果 ResultMap支持对象关联查询等高级操作 扩展出一个对象对查询结果进行保存 创建一个dto包src-main-java-com-MyBatis-dto dto是一个特殊的JavaB
阅读全文
摘要:<!--利用LinkedHashMap保存多表关联结果 MyBatis会将每一条记录包装为LinkedHashMap对象 key是字段名 value是字段对应的值,字段类型根据表结构进行自动判断 优点:易于拓展,易于使用 缺点:太过灵活,无法进行编译时检查--> <select id="select
阅读全文
摘要:SQL传参有两种形式 首先在Mapper XML中编写<select>标签并书写SQL语句 <!--单参数传参,使用parameterType指定参数的数据类型,SQL中#{value}提取参数--> <select id="selectById" parameterType="Integer" r
阅读全文
摘要:工厂模式用于隐藏创建对象的细节,核心是工厂类 (Factory),工厂模式可细分为简单工厂、工厂方法、抽象工厂,对于使用者而言,只需要关系工厂类即可,不需要关系多余的类 简单工厂实现: 1.创建一个接口I18N package com.factory.i18n; //Internationaliza
阅读全文
摘要:MyBatis数据查询步骤: 1.创建实体类Entity(包含对象属性和get和set方法) 2.创建Mapper XML 3.在Mapper XML中编写<select>SQL标签(书写SQL语句) 4.在mybatis-config.xml中开启驼峰命名映射 5.在mybatis-config.
阅读全文
摘要:MyBatisUtils代码 /** * 创建全局唯一的SqlSessionFactory对象 */ public class MyBatisUtils { //利用static属于类不属于对象,且全局唯一 private static SqlSessionFactory sqlSessionFac
阅读全文
摘要:SqlSessionFactory是MyBatis的核心对象,用于初始化MyBatis,读取配置文件,创建SqlSession对象,SqlSessionFactory是全局对象,为保证其在应用中全局唯一,要使用static进行初始化 SqlSession是MyBatis操作数据库的核心对象,SqlS
阅读全文
摘要:首先在pom.xml中添加依赖,并添加阿里云镜像 <repositories> <repository> <id>aliyun</id> <name>aliyun</name> <url>https://maven.aliyun.com/repository/public</url> </repos
阅读全文