- 博客(29)
- 收藏
- 关注
原创 JPA外键映射注解导致的性能问题
于是根据上面的注解属性我们得知了问题根本原因,由于使用的是JPA的实体类查询方法,会直接通过某些条件获取实体类所有字段,相当于sql中的select *,而此处使用了cascadeType.ALL和fetchType.EAGER,表示在加载实体类时同时将其关联的所有实体加载出来,由于该表外键所关联的信息极多且泛型里字段也多,因此在加载外键关联的时候浪费了大量的时间(前端并不需要关联的实体类),造成了性能问题
2024-08-23 10:30:35
426
原创 Java集合中的retainAll()方法和removeAll()方法
1.问题在更新数据库的数据时,往往我们有这样的一个需求:传入数据库中的数据存在相同key值时就更新key值一样的数据,数据库中没有的数据就进行插入操作,相比于我们传入的数据,数据库中多余的数据就就进行删除操作。这样的需求很常见,解决的方法也很多,此处我仅介绍一下标题中的方法,用集合来寻找交集以及差集进行更新删除插入操作!2.解决方法比如当前数据库中存在3,4,5三个值,而我们前端传入了1,2,3三个值,此时我们就需要对数据库中的数据进行操作,首先寻找交集进行更新,然后寻找差集,将前端传入的不存在于后
2021-08-04 14:43:18
4111
2
原创 双亲委派机制:一些自己的拙见
类加载器(ClassLoader)提到双亲委派机制就不得不说到类加载机制,我们日常编写的程序运行过程为:首先由编译器将我们的代码编译成.class文件,然后交给类加载器推送到JVM中进行处理(大致流程)JVM一共给我们提供了三种类加载器:Bootstrap classLoader:启动类加载器,主要负责加载核心的类库和构造下面两个加载器ExtClassLoader:拓展类加载器,负责加载jre/lib/ext目录下的一些扩展的jarAppClassLoader:应用程序类加载器,负责加载应用程序的
2021-07-01 10:45:02
261
原创 postman测试使用@RequestBody无法接收list中的内容
在编写一个接口的时候,传参中存在着一个list,但是在用@RequestBody映射的时候显示list中的所有内容都为null,百度了很久没有找到能够解决自己问题的方法最后看了一眼实体类,一不小心就发现了错误所在的地方,使用框架的时候一定记住六个字“约定大于配置”,Java中的属性定义时一定要遵循驼峰命名法,因为我首字母是大写,所以没接收到很正常!!改成驼峰命名法后解决问题!于是写个笔记记录一下长个记性!...
2021-06-02 11:25:36
1833
原创 报错“在要求输入数字处找到非数字字符”
在Java链接Oracle数据库的时候报错"在要求输入数字处找到非数字字符",一开始完全不知道问题所在,就开始在请求字段中找数字类型的变量,还是找不到问题所在就开始百度了:回合1:百度发现是日期格式的问题,于是就在参数的基础上加上了一个to_date方法,执行后还是报错,再去百度(面向百度编程)。回合2:由于在执行sql的时候没办法将to_date函数的执行结果赋值给指定的字段,所以依旧会报错,所以解决方法就是将to_date函数写在sql语句中,再次执行完美运行!参考:https://blog.cs
2021-05-31 11:16:01
5356
原创 try(){}catch(){}自动释放资源
自动资源释放在公司看项目的时候意外发现了了一个看不懂的写法:try(FileInputStream in = new FileInputStream (file);OutPutStream os = new OutPutStream()){}catch(){}跟传统的写法对比一下发现这个写法不是传统的try后面接{},而是try后面跟了个小括号,括号里写上stream操作,而且最后并没有释放资源。在网上查了一下,发现这是Java7之后提供的新写法,这样可以不需要在finally语句
2021-05-24 17:37:24
591
原创 mybatis嵌套查询与子查询
多对一的查询处理1.按照查询嵌套处理。将多表的数据分别查出来然后用resultMap对应起来(复杂属性的字段使用association(对应对象)或者collection(对应集合)来映射)<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-
2021-04-21 11:22:50
2973
原创 maven资源过滤问题的解决方法
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> ...
2021-04-17 21:27:24
144
原创 使用JDBC编写事务
public class TestTranslation { public static void main(String[] args) { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = JDBCUtils.getConn(); conn.setAutoC
2021-04-09 16:44:18
201
原创 最原始的JDBC逐渐进化
阶段1原始阶段import java.sql.*;public class JDBCDemo01 { public static void main(String[] args) throws ClassNotFoundException, SQLException { //1.加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2.编写用户信息和url 显示时区&serverT
2021-04-07 17:29:01
122
原创 关于properties报空指针异常的原因
在写jdbc的时候,将一些连接属性放在了properties文件中,然后用Properties去读取。InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties"); Properties properties = new Properties(); properties.load(in);在读取的时候一直显示空指针异常:C:\Environm
2021-04-07 17:02:35
1859
8
原创 一个简单的Filter过滤器
1.首先定义一个类实现Javax.servlet包下的Filter接口2.Java实现import javax.servlet.*;import java.io.IOException;public class CharacterEncodingFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { System.out.println
2021-03-31 13:20:00
298
原创 session的应用
往session中存储信息@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解决乱码问题 req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); resp.s
2021-03-29 13:41:57
304
原创 给客户端响应cookie
1. 代码实现 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); resp.setContentType("text
2021-03-29 11:09:46
442
原创 Request请求转发
LoginServlet:在请求转发的时候,转发映射的地址是localhost:8080/当前web项目!所以在写转发地址的时候前面就不需要再加上当前项目名称,加了项目名称的话浏览器会报404。在重定向的时候映射的地址是localhost:8080!!所以需要在重定向的地址前加上当前项目名称!resp.sendRedirect();是重定向的写法!当前项目名称可以用req.getContextPath()获取!!可以直接与当前项目进行拼接!import javax.servlet.ServletEx
2021-03-24 00:59:04
200
原创 Response实现验证码
使用response在web端实现一个每三秒刷新一次的验证码: @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //如何让浏览器三秒自动刷新一次 resp.setHeader("refresh","3"); //在内存中创建一个图片 Bu
2021-03-23 22:55:42
363
原创 Response下载文件
首先新建一个servlet,继承HttpServlet类,重写doGet和doPost方法。我们在下载文件的时候需要经过以下几个步骤:1.获取文件下载的位置2.获取文件名3.设置浏览器支持4.创建下载文件的输入流5.创建缓冲区6.获取OutpuStream对象7.将输出流写入到缓冲区中,用OutputStream对象将缓冲区的数据写入到客户端8.关闭流 @Override protected void doGet(HttpServletRequest req, HttpSer
2021-03-23 21:35:38
286
原创 读取资源文件properties
1.首先在Java文件和resources文件下分别建一个properties资源文件用来读取。发现在加载过程中,resources文件下的properties资源文件被加载到了classes路径下,但是Java文件夹下的资源文件没有加载,这就涉及到maven资源导出的问题。我们可以在当前项目的pom文件中加入一系列的配置:<build> <resources> <resource> <directory>
2021-03-22 23:25:56
257
原创 getRequestDispatcher().forward()请求转发
1.首先通过ServletContext获取context对象,调用context.getRequestDispatcher()方法进行转发 ServletContext context = this.getServletContext();// System.out.println("进入了Demo04,然后转发到了Demo03"); context.getRequestDispatcher("/getp").forward(req,resp);
2021-03-22 01:26:13
629
原创 ServletContext获取初始化参数
1.首先在xml文件中配置初始化参数 <context-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/mybatis</param-value> </context-param>2.在类中通过ServletContext的getInitParameter(“url”)方法获取初
2021-03-22 01:22:22
643
原创 利用servletContext实现简单的数据共享
1.首先用this关键字获取一个servletContext对象,创建一个变量存储值,将该变量存到context中,并使用setAttribute()方法向Context中存入数据 ServletContext context = this.getServletContext(); String username = "gsy"; context.setAttribute("username",username);2.在需要共享数据的类中再次获取Servl
2021-03-22 00:22:52
539
原创 在IDEA中编写一个简单的Servlet
1.maven操作过程首先建一个空的maven项目,将src文件夹删掉,然后建一个我们自己的module文件用来写servlet。因为servlet是一个用来处理Javaweb的文件,所以我们在创建的时候点击wepapp模板建完module后,我们在父工程的pom文件需要配置我们需要的jar包 <dependencies> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet
2021-03-21 22:21:40
361
2
原创 前后端数据的传递
前后端数据的传递方法1.首先是前端产生的数据通过json获取,然后利用Ajax传递给后端。需要添加jQuery库,因为jQuery库里封装了json数据的操作。如下图可以设置传递方式等属性。 $.ajax({ type:'POST', data:a,//json contentType = 'application/json', dataType:'json', url:'user/saveJsonUser.do', success:function
2021-03-20 15:55:13
3399
原创 JVM的垃圾回收算法
JVM的垃圾回收算法1.标记-清除算法:主要分为两个阶段,一个是标记阶段还有一个清除阶段,在标记阶段标记出所有活着的对象,然后在清除阶段将没有标记的对象全部清除。适用于老年代,存活对象比较多的时候比较高效。缺点是容易产生内存碎片,再来一个比较大的对象时,该对象的大小大于空闲表中的每一块儿大小但是小于其中两块儿的和,会提前触发垃圾回收。而且扫描了整个空间两次。2.复制算法对所有节点进行扫描,将存活的对象复制到一个新的内存空间,然后将原来的内存空间直接回收。适用于新生代,存活对象较少的情况。只扫描了
2021-03-18 21:44:10
79
1
原创 生命周期
Bean的生命周期1.Spring对Bean进行实例化,相当于程序中的new()2.Spring将值和Bean的引用注入到Bean对应的属性中3.BeanNameAware的setBeanName(), 如果实现该接口,则执行其setBeanName方法(实现BeanNameAware主要是为了通过Bean的引用来获得Bean的ID)4.BeanFactoryAware的setBeanFactory(),如果实现该接口,则执行其setBeanFactory方法(实现BeanFactoryAware
2021-03-18 21:17:21
106
1
原创 Java面试错题集2
转发(forward)和重定向(redirect)的区别1.请求次数不同:重定向发送请求收到响应后再次向新地址发出请求(至少请求两次)转发收到请求后相应跳转新地址(请求一次)2.重定向地址栏会发生变化,转发地址栏不会改变3.重定向可跳转到任意的url,转发只在当前站点跳转toString()方法和强制转换为String有什么区别1.toString()方法的对象不能是null,会返回空指针异常NullPointerException,解决方法是用StringValueof()方法,这个方法在调
2021-03-16 23:46:16
299
原创 Java面试错题集1
SpringBoot的注解:1.@SpringBootApplication:这个注解是用来声明springboot来给程序进行一些必要的配置,相当于@Configuration:声明这是一个配置文件、相当于xml配置文件@EnableAutoConfiguration:自动配置功能、@ComponentScan组件扫描可以自动发现和装配一些bean上述三个注解的整合版本。2.@ResponseBody:表示该方法返回的结果直接写入到responsebody中,一般在异步获取数据时使用,用于构
2021-03-16 22:04:09
212
原创 DAO层,Service层,Controller层的作用
DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。Service层:Service层主要负责业务模块的逻辑应用设计。同样是首先设计接口,再设计其实现的类,接着再Spring的配置文件中配置其实现
2021-03-14 00:30:09
19261
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人