- 博客(63)
- 收藏
- 关注
原创 1、mvc-HelloSpringMVC
○ 加在参数上,当前后端传值的参数名不一致时,表明前端传递的参数名,注入到紧跟的参数值。● MVC全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。● Model:数据模型,JavaBean的类,用来进行数据封装。○ 加在参数上,要求前端必须传一个json格式,如果是form表单传参报415错误,如果没有用请求体报400错误。○ 加在参数上,解析地址栏的动态参数,赋值给紧跟的参数,如果类型不匹配会报400,后端报类型转换异常。
2023-09-01 19:55:17
111
原创 13、Spring常用注解
使用Autowired我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC(Spring)容器中存在,且符合名字byname。@Autowired是根据类型自动装配的,加上@Qualifier则可以根据byName的方式自动装配@Qualifier不能单独使用。○ 加在配置类的方法上,@Bean相当于之前的bean标签,这个方法的名字,相当于bean标签中的id属性。○ @Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现!○ 加载类上标志是一个配置类。
2023-09-01 19:46:47
96
原创 12、spring-反射
○ filed.setAccessible()//暴力破解私有属性,是私有属性能设置值。● getDeclaredFields 返回值 Field[]● getDeclaredMethods 返回值 Method[]○ method.invoke(对象,参数) 现在 调用对象的方法。○ filed.set(对象,value) 设置值。○ 对象.方法名()以前 调用对象的方法。○ 对象.getClass()● 获取class的三种当时。● 利用反射给属性设置值。○ 类名.class。
2023-09-01 19:45:12
98
原创 11、spring-声明式事务
是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问 这个数据,然后使用了这个数据。
2023-09-01 19:41:19
36
原创 10、spring-整合Mybatis
1、实现类继承 SqlSessionDaoSupport,方法里面获取getSqlSession。5、将自己写的实现类注入到Spring容器中。
2023-09-01 19:36:52
31
原创 9、spring-AOP
AOP可以进行权限校验,日志记录,性能监控,事务控制。方式一,使用原生的Spring API接口。在不修改源码的情况下,对程序进行增强。方式二:自定义类实现aop。方式三:使用注解实现aop。
2023-09-01 19:33:31
32
原创 8、代理模式
○ 代理角色∶代理真实角色,代理真实角色后,我们一般会做一些附属操作。○ 一个真实角色就会产生一个代理角色,代码量翻倍,开发效率变低。○ 一个动态代理类可以代理多个类,只要是实现了同一个接口即可。○ 一个动态代理类代理的是一个接口,一般就是对应的一类业务。为什么要学习代理模式,因为AOP的底层机制就是动态代理!● 动态代理类是动态生成的,不是像静态代理一样自己写好的。○ 基于接口的动态代理—JDK动态代理 【学习这个】○ 基于类的动态代理----cglib。○ 真实角色︰被代理的角色。
2023-09-01 19:30:27
32
原创 7、使用java的方式配置spring
● @Bean相当于之前的bean标签,加在方法上,这个方法的名字,相当于bean标签中的id属性,这个方法的返回值,相当于bean标签中的class属性。● 配置类 @Configuration也会注册到Spring容器中@Configuration代表这是一个配置类相当于beans.xml。@PropertySource(value = “jdbc.properties”)读取properties文件。● @ComponentScan(“cn.zhy”)包扫描机制。1、配置类相当于beans.xml。
2023-08-30 19:05:11
78
原创 6、Spring-使用注解开发
● singleton:默认的,Spring会采用单例模式创建这个对象。● @Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现。我们之前都是使用 bean 的标签进行bean注入,但是实际开发中,我们一般都会使用注解!● @Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层!● 这四个注解功能都是一样的,都是代表将某个类注册到Spring中,装配Bean。我们在使用的过程中,只需要注意一个问题:必须让注解生效,就需要开启注解的支持。
2023-08-30 19:00:25
36
原创 5、Bean的自动装配
如果不唯一,会报不唯一的异常。使用Autowired我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC(Spring)容器中存在,且符合名字byname!@Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现!● @Autowired是根据类型自动装配的,加上@Qualifier则可以根据byName的方式自动装配。将查找其类中所有的set方法名,例如setCat,获得将set去掉并且首字母小写的字符串,即cat。·都是用来自动装配的,都可以放在属性字段上。
2023-08-30 18:58:12
61
原创 4、依赖注入
Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。当一个bean的作用域为Session,表示在一个HTTP Session中,一个bean定义对应一个实例。依赖注入本质:Set注入。
2023-08-30 18:54:42
30
原创 3、spring配置说明
一般用于团队开发使用,他可以将多个配置文件,导入合并为一个applicationContext.xml。起别名,可以使用别名获取对象。
2023-08-30 18:52:06
128
原创 2、spring-IOC创建对象的方式
○ 依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。总结:在配置文件加载的时候,bean中管理的对象就已经初始化了。○ 现在创建对象的方式被反转了,由spring容器创建。○ 以前创建对象是通过new关键字创建。2、根据参数类型设置 --不建议使用。1、默认使用的是无参构造创建对象。2、使用有参构造怎么创建呢?3、直接通过参数名赋值。● 什么是依赖注入?
2023-08-30 18:50:44
37
原创 1、spring-01-heilospring
● value=“Spring” 是给对应的属性设置值,是通过set方法设置的。● class=“cn.zhy.pojo.Hello” 是要创建的对象。● bean就是java对象 , 由Spring创建和管理。● name="name"对应Hello类中的属性名。● id=“hello” 是要创建的对象的变量名字。对UserService接口进行实现。建一个UserService接口。1、建一个Hello类。创建UserDao接口。实现UserDao接口。
2023-08-30 18:49:28
38
原创 12、mybatis-动态sql
where 元素只会在至少有一个子元素的条件返回SQL子句的情况下才去插入WHERE子句。○ ·现在Mysql中写出完整的SQL,再对应的去修改成为我们的动态SQL实现通用即可!什么是动态SQL:动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句.动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,总结,动态sql本质还是sql语句,只是我们可以在sql层面,去执行逻辑代码。当where标签内的if标签都失效时,会自动去掉where标签。相当于switch…
2023-08-30 18:25:49
54
原创 10、mybatis-一对多处理
■ 2、ofType 用来指定映射到List或者集合中的poji类型,就是泛型中的约束类型。■ 如果问题不好排查错误,可以使用日志,建议使用Log4j。■ 1、javaType 用来指定实体类中的属性类型。○ 2、集合 collection 【一对多】○ 1、关联association 【多对一】■ 注意一对多和多对一中,属性名和字段的问题!■ 保证SQL的可读性,尽量保证通俗易懂。● TeacherMappder接口。一个学老师对应多个学生。● 按照结果嵌套处理。● 按照查询嵌套处理。
2023-08-30 18:20:13
54
原创 9、mybatis-多对一处理
● association关联属性 property属性名 javaType属性类型 column在多的一方的表中的列名,property是学生类中的属性,因为他是一个引用数据类型所以,要通过javaType设置他的属性类型。○ 3. 思考问题,这样学生的结果集中应该包含老师,该如何处理呢,数据库中我们一般使用关联查询?● 多个学生,对应一个老师,对于学生而言,关联,多个学生关联一个老师【多对一】○ 2. 根据获取的学生信息的老师ID->获取该老师的信息。○ 1. 获取所有学生的信息。
2023-08-30 18:16:26
46
原创 8、mybatis-使用注解开发
● //方法存在多个基本类型或String的参数,所有参数前面必须添加@Param(“id”)注解。● 我们在SQL中#{}引用的就是我们这里的@Param()中设定的属性名!● //注解取得参数对应的是@Param(“id”)中的。● 只有一个基本数据类型可以忽略,建议加上。2、需要在核心配置文件上绑定接口。可以在工具类中设置自动提交事务。● 引用数据类型不需要加。1、注解在接口上实现。本质:反射机制的实现。使用注解进行增删查改。
2023-08-30 18:13:53
55
原创 7、mybatis-分页
在mybatis-config.xml配置 注意标签的位置。1、建一个dto类接收前端传来的页码和每页有多少数据。2、建一个vo类将查到的数据和总共多少条传给前端。dto前端传来的数据,vo后端传给前端的数据。RowBounds实现分页【了解】使用Mybatis实现分页查询。在接口中编写对应的方法。对应xml中的测试语句。
2023-08-30 16:01:29
43
原创 6、mybatis-日志
■ Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件。● 在要使用Log4j的类中,导入包 import org.apache.log4j.Logger;● logImpl 指定Mybatis所用日志的具体实现,未指定时自动查找。■ 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。在Mybatis中具体使用那个一日志实现,在设置中设定!● 日志对象,参数为当前类的class。● 现在:日志工厂!
2023-08-30 14:02:28
34
原创 5、mybatis-解决属性名和数据库字段名不一致的问题ResultMapper
● ResultMap最优秀的地方在于,虽然你已经对它相当了解了,但是根本就不需要显式地。● ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射。● ResultMap元素是MyBatis中最重要最强大的元素。autoMapping=“true” 与数据库一致的自动匹配。新建一个项目测试实体类属性名和数据库字段名不一致的问题。● 而对于复杂一点的语句,只需要描述它们的关系就行了。2、ResultMapper,结果集映射。
2023-08-30 10:06:18
90
原创 4、mybatis-配置解析
这些属性都是可外部配置且可动态替换的,既可以在典型的Java属性文件中配置,亦可通过properties元素的子元素来传递。○ . SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。○ ·因此 SqlSessionFactory的最佳作用域是应用作用域。○ sqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。生命周期,和作用域,是至关重要的,因为错误的使用会导致非常严重的并发问题。
2023-08-30 10:05:58
31
原创 3、mybatis-增删查改
● 比如order by id 这种的,以id排序 那么这个id 是没有单引号的,就是简单的SQL拼接,所以我们应该使用${} 而不是#{}{}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换,● id:对应的就是namespace中的方法名。● 2、编写对应的mapper中对应的sql语句。● 2、编写对应的mapper中对应的sql语句。● 2、编写对应的mapper中对应的sql语句。● 2、编写对应的mapper中对应的sql语句。
2023-08-29 21:02:22
70
原创 2、mybatis-第一个Mybatis程序
JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。接口实现类由原来的UserMapperImpl转变为一个Mapper配置文件。默认使用的环境 ID(比如:default="development")每个 environment 元素定义的环境 ID。type的值有JDBC和MANAGED。url数据库的 JDBC URL地址。UNPOOLED意思没有连接池的连接。○ 5、Maven导出资源问题。○ 1、配置文件没有注册。○ 2、绑定接口错误。
2023-08-29 21:00:04
28
原创 1、mybatis简介
● MyBatis 可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO (Plain Old JavaObjects,普通老式Java对象)为数据库中的记录。○ 语句对象preparedStatament存在硬编码,setString(1,“admin”)● mybatis有两种用法,注解和xml,一般常用xml,可以做到sql分离。■ 提供映射标签,支持对象与数据库的orm字段关系映射。● mybatis优点,小巧、方便、高效、简单、灵活。■ sql和代码的分离,提高了可维护性。
2023-08-29 20:58:10
30
原创 Servlet
web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse对象;web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,他代表了当前web应用。● Session把用户的数据写到用户独占Sessioon中,服务器中保存(保存重要的信息,减少服务器资源浪费)● 会话: 用户打开了一个浏览器,点击了很少超链接,访问多个web资源,关闭浏览器,这个过程称为会话。
2023-08-29 20:52:50
34
原创 Ajax初识
● JSON 属性值值可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true 或 false)、数组(在中括号中)、对象(在大括号中)、null。● 所有的 jQuery AJAX 方法都使用 ajax() 方法。○ 3、Ajax最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。○ 我们可以使用 JSON.parse(字符串) 方法将数据转换为 JavaScript 对象。○ load() 方法从服务器加载数据,并把返回的数据放入被选元素中。
2023-08-29 20:44:28
37
原创 jQuery初识
● $(“li:lt(3)”) 获取到的li元素中,选择索引号为小于3的元素,索引号index从0开始。● 方法返回带有被选元素的指定索引号的元素,索引号从 0 开头,所以第一个元素的索引号是 0(不是 1)。● $(“li:eq(2)”) 获取到的li元素中,选择索引号为2的元素,索引号index从0开始。● $(“li:even”) 获取到的li元素中,选择索引号为偶数的元素,索引号index从0开始。● attr() 、prop()方法用于获取和返回属性值。attr()可以设置自定义属性。
2023-08-29 20:40:43
36
原创 day04、JDBC
具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。○ Statement用于执行静态SQL语句,在执行的时候,必须指定一个事先准备好的SQL语句,并且相对不安全,会有SQL注入的风险。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
2023-08-29 20:24:56
642
原创 day03、多表查询
如: 使用子查询 对成绩划分等级, score<60 ,评级C 并且是差,score>=60 且 score<80 评级B并且是良,score>=80 评级是A并且是优。使用子查询的时候,建议大家养成使用别名的好习惯,这样可以让我们的查询语句更加清晰。如: 查询每个老师的学生的 最大分数,最小分数,平均分数,分数总和,学生人数,老师名字。2.必须要有别名,因为子查询优先被执行,子查询的别名,可以让别的查询当做表或者列去操作。group_concat(值,’拼接符’,值 ) : 拼接,多行压扁到一行。
2023-08-29 20:24:33
28
原创 day02、mysql应用
■ select substring( ‘系统信息类’, 1, 3 );● 注意: = 和 <> 额外留意,和java中有所不同,java中判断相等用 == , 这里只用 = , java中判断不相等用!返回 ‘a=b=c’。),max(字段名),min(字段名)…
2023-08-29 20:23:48
29
原创 使用EasyExcel将excel中多sheet导入,简单方便
你可以根据监听器中的map分别处理每一个sheet中的数据。重点来了,那就是easyexcel要使用的监听器。首先导入easyExcel依赖。service层实现类的方法。
2023-08-23 09:26:04
1125
原创 day01、数据库初试
○ 1、创建用户:CREATE USER ‘username’@‘host’ IDENTIFIED BY ‘password’;○ 关系型数据库:关系型数据库的关系主要体现在它自己的关系模型,反应了表与表之间的关系。■ 格式:insert into 表名 (列名1,列名2) values(值1,值2);■ update 表名 set 列名1=值, 列名2=值 where 列名 = 值;它的特点是开源免费,功能还是不错的,也比较稳定.○ 非关系型数据库:是存储键值对的,每个表之间不存在关联,都是独立的。
2023-08-15 21:01:40
36
原创 day22、Lambda表达式,Stream流
● 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。● 如果只有一条语句,并且是返回值语句,就可以不写return 不写 {}● Lambda表达式是一种没有名字的函数,是Java 8 发布的最重要新特性。● Stream 操作是延迟执行的。不是所有的匿名内部类都能用lambda表达式写,因为接口里可能不止一个方法。其本质是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。● 本质上是一段匿名内部类,也可以是一段可以传递的代码。
2023-08-15 20:58:44
32
原创 day21、正则表达式
● [a-z ]: a-z只匹配一次可以和其他的连用,[]表示一个范围,在这个范围的都能匹配。● \w:匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。● |:x|y:表示匹配x或y但是容易引起歧义,最后加()分组。● \s:匹配任何不可见的字符,包括空格,换行,制表符等。● {n,m}:n<=m 最少匹配n次,最多匹配m次。● [a-z ]{n}:n是非负整数,可以匹配n次。● . :匹配除、\r \n 之外的任意字符。
2023-08-15 20:55:37
32
原创 day20、多线程下的单例模式
○ a) wait():令当前线程挂起并放弃CPU、同步资源并等待,使别的线程可访问并修改共享资源,并释放锁而当 前线程排队等候其他线程调用notify()或notifyAll()方法唤醒,唤醒后等待重新获得对监视器的所有 权后才能继续执行。○ 不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁。开始(当前时间之前的,立刻开始执行,当前时间之后,等到了开始执行)○ 出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续。
2023-08-15 20:54:35
31
原创 day19、多线程
○ 1、给方法加上synchronized修饰相当于加锁,当有线程执行加锁的成员方法时,所有加锁的方法和加锁的代码块都被锁住,无法访问,只有等该线程释放锁,才可以继续访问。○ 阻塞,在某种特殊情况下,被人为挂起或执行输入输出操作时,让出 CPU 并临时中止自己的执行,进入阻塞状态,阻塞结束后再次进入就绪状态。■ 当有线程执行加锁的代码块,所有加锁的代码块和加锁的方法都被锁住,无法访问,只有等该线程释放锁,才可以继续访问。○ 2、调用interrupt方法可以唤醒沉睡的线程,但是会主动抛出异常。
2023-08-15 20:53:30
35
原创 day18、对象流、file
■ 3、ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量,不想被序列化的属性可以用transient修饰符修饰。○ 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。○ File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果此文件目录的上层目录不存在,也不创建。若文件存在,则不创建,返回false。
2023-08-15 20:52:18
34
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人