- 博客(63)
- 收藏
- 关注
转载 JUL日志
当我们每次重新启动这个类的时候,原来的日志文件内容会被覆盖,如果我们不想被覆盖,只需要FileHandler加上一个参数:FileHandler fileHandler = new FileHandler("test.log",ture);当我们在现实生活里开发程序的时候,在开发环境中,我们可能希望尽可能多地看到调试信息,但当程序上线的时候,我们只希望看到最关键的信息。在Java的日志系统中,Logger 对象可以有一个父 Logger,它通常是由日志系统的配置确定的。都有一个父日志打印器,我们可以通过。
2024-01-22 12:20:23
69
转载 Junit
那么如果我们在进行所有的测试之前需要做一些前置操作该怎么办呢,一种办法是在所有的测试用例前面都加上前置操作,但是这样显然是很冗余的,因为一旦发生修改就需要挨个进行修改,因此我们需要更加智能的方法,我们可以通过。它是一种广泛应用于 Java 开发中的测试工具,主要用于保证代码的质量和准确性。对于一个测试案例来说,我们肯定希望测试的结果是我们所期望的一个值,因此,如果测试的结果并不是我们所期望的结果,那么这个测试就应该没有成功通过!同理,在所有的测试完成之后,我们还想添加一个收尾的动作,那么只需要使用。
2024-01-19 14:43:27
60
原创 mybatis通过注解开发
MyBatis支持通过注解来进行数据库操作,这种方式称为MyBatis的注解开发(Annotation-Based Development)。通过注解,可以在Java接口或类上直接标注SQL语句,避免了在XML文件中编写相应的SQL映射。
2024-01-18 11:12:20
404
原创 mybatis的缓存机制
一级缓存是 MyBatis 默认开启的缓存,它指的是在同一个 SqlSession 中执行相同 SQL 语句时,第一次查询的结果会被缓存起来,后续再执行相同的查询,直接从缓存中获取结果,而不再去查询数据库。对于同一个 namespace 下的语句,如果开启了二级缓存,它们的查询结果会被缓存在一个全局的缓存区域中,当其他 SqlSession 执行相同的查询时,可以从全局缓存中获取结果。一个会话DML操作只会重置当前会话的缓存,不会重置其他会话的缓存,也就是说,其他会话缓存是不会更新的!
2024-01-18 09:05:46
1055
原创 mybatis执行增删改查
1.先看,这里和的作用类似,都是把数据库里名叫tid的列映射到java里teacher类中tid的字段。同样的情况,如果用的是,那么第二条语句会创建一个新的teacher对象,sid=2的这名同学会成为新teacher对象里studentlist里的第一个元素。目标是选择出老师1号的所有学生。
2024-01-17 03:03:55
913
原创 通过myBatis将sql语句返回的值自动包装成一个java对象(3)
之前我们将sql返回值转换为java对象时,每条sql的返回值的字段名和java类中的字段名是一一对应的,ie:sql选择的user有username和password两个字段,java中的user对象也有两个一模一样的字段,在这种情况下,mybatis可以自动一一对应。如果不一致怎么办呢?这时我们需要配置自己的映射规则。通过指定映射规则,我们现在用户名和密码一栏就发生了交换,因为我们将其映射字段进行了交换。rusultmap属性对应的就是刚刚编写的映射规则。2.映射的那个java对象有多个构造器怎么办。
2024-01-16 07:17:07
486
原创 通过myBatis将sql语句返回的值自动包装成一个java对象(2)
时,java发现这是一个接口的抽象方法,没有发现真正的实现方法,先暂停。3.mybatis开始工作,找到了这个mapper,和刚刚的那个接口,发现了mapper.xml和接口的各种对应关系。4.mybatis通过这个mapper里的sql语句开始为接口里的抽象方法同态生成实现的方法。这里抽象方法返回List<User>,而这个sql语句返回的就是一些列user对象的属性。这个全限定名唯一标识了这个接口在Java代码中(不是计算机的路径)的位置。xml中,每条sql的id应该和接口中的抽象方法名相同。
2024-01-16 04:03:44
1073
原创 通过myBatis将sql语句返回的值自动包装成一个java对象(1)以及SqlSessionFactory
(我可以通过mysql的用户界面访问数据库,创建会话,也可以通过idea来访问数据库,这两种访问方式虽然都访问了相同的数据库,但相互没有关联)。所以在这个类里,即使字段默认为protected的,也没有编写getter和setter方法,但是在这个类外,我们依旧可以使用getter和setter方法来编辑类。要想把数据库里的数据映射成一个java对象,首先我们需要有一个对应的java类来描述数据库中的这个对象。-- 定义映射器命名空间,通常与对应的 Java 接口或类的全限定名一致 -->
2024-01-15 15:10:10
1166
原创 MyBatis :工厂类封装与简化
工厂类的目的是将对象的创建逻辑封装在一个类中,以便客户端代码无需了解具体的实现细节,只需要通过工厂类获取所需的实例。如果需要更改或替换某个类的实现,只需修改工厂类的实现,而无需修改客户端代码。工厂类提供了一个统一的接口或方法来创建对象,客户端代码只需要调用这个接口或方法,而无需关心具体的实现类。将对象的创建过程和细节封装在工厂类中,使客户端代码无需关心如何创建对象,降低了代码的耦合性。对于某些复杂的对象创建过程,工厂类可以隐藏创建对象的复杂性,简化了客户端代码。,包含了对数据库的配置信息、映射信息等,
2024-01-15 15:03:08
498
原创 MyBatis的配置
(我可以通过mysql的用户界面访问数据库,创建会话,也可以通过idea来访问数据库,这两种访问方式虽然都访问了相同的数据库,但相互没有关联)。所以在这个类里,即使字段默认为protected的,也没有编写getter和setter方法,但是在这个类外,我们依旧可以使用getter和setter方法来编辑类。(已经编译过的,而不是源码)找到里面的jar包,复制到工程文件的lib文件夹下(如果没有lib文件夹,就直接复制到工程的大文件夹下),我们之前学习过,xml是一种用来存储映射关系的语言。
2024-01-14 18:21:35
812
转载 xml
这个头部声明是可选的,但通常建议在 XML 文档中包含它,以确保正确的解析和处理。XML 处理器(解析器)会使用这个声明来确定文档的 XML 版本和字符编码。XML 头部声明是 XML 文档中的一部分,用于提供有关 XML 文档的一些基本信息。(比如上面的书的例子,你可以自定义书的任何属性)XML 文档包含数据和标记,同时包含描述数据结构的元素,使数据更容易理解。XML 文档是纯文本格式,可以在不同的系统和应用程序之间轻松传递。标签用于定义文档中的元素,由开始标签和结束标签组成。标签中的文本内容称为值。
2024-01-14 09:34:18
31
原创 JDBC事务
JDBC默认的事务处理行为是自动提交,所以前面我们执行一个SQL语句就会被直接提交(相当于没有启动事务),所以JDBC需要进行事务管理时,首先要通过Connection对象调用setAutoCommit(false) 方法,关闭自动提交。例如,银行转账是一个事务,如果其中一个账户的扣款成功而另一个账户的存款失败,整个事务将被回滚,以确保数据一致性。数据库事务是一组数据库操作,它们被视为一个单一的逻辑工作单元,要么全部成功执行,要么全部回滚(撤销)到事务开始前的状态。持久性确保事务的提交是可靠的。
2024-01-13 15:58:39
496
原创 SQL注入攻击
而1=1一定是对的,所以这个语句一定是正确的。我们发现,如果允许这样的数据插入,那么我们原有的SQL语句结构就遭到了破坏,使得用户能够随意登陆别人的账号。因此我们可能需要限制用户的输入来防止用户输入一些SQL语句关键字,但是关键字非常多,这并不是解决问题的最好办法。第一个参数是传入的位置,第二个参数是传入的内容。我们发现,我们需要提前给到PreparedStatement一个SQL语句,并且使用。作为占位符,它会预编译一个SQL语句,通过直接将我们的内容进行替换的方式来填写数据。,而最外层有一个真正的。
2024-01-13 15:10:10
399
原创 JDBC
statement类的executeUpdate方法返回一个int,表明执行的语句更改了多少行,这个方法用来执行insert,delect之类的语句。jdbc是连接java和数据库的桥梁,对于不同的数据库,如果我们希望用java连接,我们需要下载不同的驱动。然后打开idea,在idea里的目录里找到这个包(在下面这张图里红色的),右键,选择“添加为库”,然后点击确定即可。如果想打印数据,除了上面的getString方法之外,还可以选择以其他类型返回数据,比如getInt。.ledger");
2024-01-12 04:13:32
851
原创 从网页连接socket服务器和I/O
最后的 "\r\n" 是回车和换行符,表示行结束符,HTTP 协议要求在头部信息的每一行末尾使用这个组合。之前我们都是通过自己写的client类连接server的,现在我们通过浏览器来连接server。这是非常重要的,特别是在处理文本数据时,因为它影响了字符到字节的映射。"HTTP/1.1 200 Accepted\r\n" 是 HTTP 协议中的响应头。类的子类,允许你按字符而不是字节写入数据到输出流中,并且可以指定字符编码。"Accepted" 是状态码的描述,表示请求已被接受。
2024-01-10 05:16:06
1314
原创 socket从客户端向主机传输一个文件
所以在这里,我们的client不仅仅可以传输txt文件,任何类型的文件都可以传输,只要server接受这个文件时,存储方式不发生变化就行。是字节流,对于这段字节,只要你编码的方式(txt按txt文件编码格式读取,class按class文件编码格式读取)是一样的,就永远可以读出正确的内容。首先,将需要读取的文件放入一个输入流a中,然后我们创建一个数组b,将输入流a中的数据写入数组b,然后创建输出流c,用输出流c输出数组b(也就是输出a)是 Java 中用于从文件中读取字节流的类,它属于字节流的一部分。
2024-01-09 13:47:22
374
原创 Java Socket
同时,把这个监听到的socket又通过accept接受为一个本地的socket,在例子里命名为socket1.这个本地化的socket1其实和client里的socket是连接的,但是名字可以不一样。方法是一个阻塞调用,它会等待客户端的连接请求,一旦有客户端连接请求到达,它会接受这个连接请求,并返回一个新的Socket对象,该Socket对象代表与客户端建立的连接。我们在client里创建了一个socket,给这个socket指定端口8080,然后我们在server里创建一个。用while循环就行了。
2023-11-02 12:23:39
116
原创 JavaScript 面向对象
在 `tryReassignment` 函数中,尝试重新分配(reassignment)传入的对象 `obj`,将其设置为一个新的对象,改变原来的属性为新的属性: `{ identified: false, 'transport type': 'flying' }`。在 `tryReassignment` 函数中,尝试重新分配 `obj`,将其设置为一个新的对象 `{ identified: false, 'transport type': 'flying' }`。
2023-08-03 09:35:10
101
原创 js函数进阶和迭代器
In JavaScript, functions are first class objects. This means that, like other objects you’ve encountered, JavaScript functions can have properties and methods.一等对象 (第一类对象)有如下“特权”:看个例子:这个例子中,原函数的名字太长,所以我们把这个函数赋给了另一个变量,就像把一个变量赋值给另一个变量一样。Notice how we as
2023-08-02 13:07:14
122
原创 学习笔记23 stack和queue
stack是一种按先进后出方法存放和取出数据的数据结构。queue是一种按先进先出方法存放和取出数据的数据结构。
2023-07-31 14:48:37
242
原创 JavaScript函数,数组,循环
具体来说,该代码首先定义了一个包含四个花色的数组cards,然后使用while循环来不断随机抽取一张牌,直到抽到黑桃为止。循环体中,使用Math.random()方法和Math.floor()方法来生成一个0-3之间的随机整数,然后使用该随机整数作为索引从cards数组中获取一张随机的牌,将其赋值给currentCard变量,并使用console.log()方法将其输出。如果当前抽到的牌不是黑桃,则继续循环,否则跳出循环。js可以直接打印数组。
2023-07-28 17:43:21
168
原创 学习笔记22 map
SortedMap接口中定义了一些与排序相关的方法,例如:按键排序的方法(keySet()、subMap()、headMap()和tailMap()),以及按照键所在的顺序返回映射关系的方法(firstKey()、lastKey()等)等。例如,可以使用keySet()方法获取一个包含Map中所有键的Set Collection,也可以使用values()方法获取一个包含Map中所有值的Collection。它们分别代表表示键和值对象的类型。这个方法返回一个set,set中的元素是map中的每个键值对。
2023-07-26 11:43:47
132
原创 JavaScript基础
假设您有一个网站,想用用户的用户名制作个性化的问候语。有时,用户没有账户,因此用户名变量是虚假的。和java不同,这里的length是hello这个string的属性,java里string要调用length方法返回值。语句中的代码块将运行,这种情况下我们认为myVarialble为真值。
2023-07-25 17:39:10
50
原创 学习笔记22 set
Set是一种集合类型,可以快速在大量数据中查找特定值。Set存储无序序列中的元素,并且不允许重复。与列表不同,列表中的数据可以通过索引访问,但是在集合中,元素没有与集合中的位置相关联。Set是优化了搜索特定元素的数据结构,是查找特定元素时比较适用的一种集合类型。Set与List的区别是,Set不允许重复元素,而且不能在指定位置插入元素。
2023-07-25 15:16:46
57
原创 sql多表查询
就需要知道所有人在一月,二月,三月...的订阅情况(是或否),然后把一月,二月,三月...的订阅情况汇总,就可以知道一年12个月,每个月的订阅情况,所以任务变成。作为人,我们可以通过判断某个月份在不在起止日期内得到这个人在这个月有没有订报纸,但是sql不能这么判断,所以我们的任务变成了。来说,这个表通过起始日期的方式,将一个人订报的5条记录(每个月一条)合并成了1条记录,我们可以将这一条数据拆分成5条。如果我们得到这样的数据,我们就可以知道某个人是否在给定月份订阅了报纸。一个人在这个月的订阅情况。
2023-07-19 17:45:34
49
原创 Aggregates
function takes two arguments inside the parenthesis,表示将结果保留几位小数,如果int为空,默认保留整数位。having是对组进行分类,我们用group by选择出组之后,可能有些组不是我们想要的,这时就可以用having把那些组筛选出去。如果我们使用了group,做的计算(sum,count等等)的全集就是这个group,而不是表中的所有元素。
2023-07-19 10:58:50
48
原创 SQL创建,查询
1. ALTER TABLE is a clause that lets you make the specified changes.2. is the name of the table that is being changed.3. is a clause that lets you add a new column to a table:1. UPDATE is a clause that edits a row in the table.2. is the name of th
2023-07-19 09:46:23
147
原创 form表单
在网页中我们经常需要收集信息到别处处理, tag就是收集信息的标签。我们需要定义收集的信息去哪以及http用什么方法去请求。actionmethodpost大小写都行,习惯大写。tag也可以包含其他内容,用来提醒用户:你输入的内容是关于什么的。
2023-07-17 14:09:46
52
转载 HTML展示基础文本和table
If you want to display text in HTML, you can use a paragraph or span:Take a look at each of these elements in action below: You can also style text using HTML tags. The tag emphasizes text, while the tag highlights important text.Later, when you begi
2023-07-05 00:15:18
143
原创 c命令行参数和exec家族
其中argc表示传入的参数的数量,argv是一个存string的数组,实际上是char数组的数组,里面存放着执行这个executable的时候,命令行的所有参数。
2023-04-29 12:10:40
106
原创 servlet
HttpServlet中有一个重要的方法叫service方法,每当html页面发送请求,servlet就会自动执行这个方法,service会调用doPost或者doGet方法。
2022-12-15 21:32:33
63
原创 JavaWeb(servlet)
form是一个表单,表单可以向服务器发送数据。input标签用于收集用户信息以发送给服务器,在下面的例子中,form中有三个input,前两个input接受text和password,第三个input标签是一个按钮,type属性为submit,表示当用户点击这个按钮,就会向服务器发送这个form标签中所有用户输入的值(属性为text的input和属性为password的input标签中的值)。
2022-12-15 13:34:47
198
原创 JavaWeb1(在idea里创建javaweb项目并配置tomcat和sevelet)
tomcat是一个web应用的容器,可以理解为我们在本地写项目,把项目放在tomcat里,就可以在web上运行了。实际上tomcat是一个web应用的服务器,把项目放在tomcat服务器里的过程叫做部署(deploy)。
2022-12-15 11:43:30
400
原创 学习笔记19(容易被忽视的基础)
一、print和println使用Java执行任务时,都是通过使用JavaAPI来完成的。术语API代表Application Programmer Interface。API是用于执行特定操作的预编写类的标准库。这些类及其方法可用于所有Java程序。print和println是API的一部分。System.out.println("Programming is great fun!");这是最简单的输出语句,那么这个语句的语义是什么呢?System是JavaAPI的一部分。它用于
2022-12-14 23:38:17
67
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人