Java
学习ing...
阿财继续努力
学习ing...
展开
-
√ SSM - 02.常用的配置文件模板
文章目录0. 关系图1. 【pom.xml】2. 【xxxMapper.xml】3. 【mybatis-config.xml】4. 【applicationContext.xml】5. 【database.properties】6. 【spring-dao.xml】7. 【spring-service.xml】8. 【spring-mvc.xml】9. 【web.xml】0. 关系图1. 【pom.xml】导入依赖:Junit、数据库驱动、数据库连接池、Servlet-JSP、MyBatis、Sp原创 2021-08-14 10:36:20 · 1100 阅读 · 0 评论 -
√ SSM - 01.怎么利用SSM框架从零实现CRUD
文章目录1. 配置pom.xml2. 连接数据库(1) 连接MySQL(2) 创建database、table3. 建立目录结构4. 创建配置文件(1) mybatis-config.xml(2) applicationContext.xml(3) database.properties(4) spring-dao.xml(5) spring-service.xml(6) spring-mvc.xml5. 配置web.xml6. 编写xxx类7. 编写xxxMapper接口8. 编写xxxMapper.xm原创 2021-08-01 11:11:41 · 1092 阅读 · 0 评论 -
SpringMVC - 02.怎么实现文件的上传与下载
<!--文件上传--><dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version></dependency><!--servlet-api导入高版本的--><dependency&g原创 2021-07-27 19:38:05 · 1108 阅读 · 0 评论 -
SpringMVC - 01.怎么实现MVC架构模式
MVC:模型(model)(dao、service)、视图(view)(jsp)、控制器(controller)(servlet)。配置三件套:处理器映射器、处理器适配器、视图解析器。DispatcherServlet流程。前端传递的参数是对象时,需要传递的参数名与对象属性名一致。...原创 2021-07-25 20:16:03 · 1082 阅读 · 0 评论 -
Spring - 05.怎么管理事务
事务一般添加到Service层。Spring的声明式事务管理底层使用AOP原理。事务配置参数:propagation(事务传播行为)、isolation(事务隔离级别)、timeout(超时时间)、readOnly(只读)、rollbackFor(回滚)、noRollbackFor(不回滚)。...原创 2021-07-15 14:54:58 · 1020 阅读 · 0 评论 -
Spring - 04.怎么使用AOP增强方法(基于注解方式)
package com.acai.JdbcTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;import java.util.List;@Repositorypublic class UserDaoImp原创 2021-07-15 09:57:06 · 1052 阅读 · 0 评论 -
Spring - 03.怎么使用AOP增强方法(基于xml方式)
连接点:类中可以被增强的方法。切入点:类中实际被增强的方法。通知:方法中实际增强的逻辑部分。分为前置通知、后置通知、环绕通知、异常通知、最终通知。切面:把通知应用到切入点的过程。...原创 2021-07-14 15:05:40 · 1018 阅读 · 0 评论 -
Spring - 02.怎么使用IOC管理Bean(基于注解方式)
实现对象创建的四种注解:1)@Component:可应用于任意类2)@Repository:一般应用于Dao层3)@Service:一般应用于Service层4)@Controller:一般应用于Web层实现属性注入的四种注解:1)@Autowired:根据属性类型或名称注入2)@Qualifier:根据属性名称注入3)@Resource:根据属性名称或类型注入4)@Value:注入普通类型属性...原创 2021-07-14 10:11:01 · 1070 阅读 · 0 评论 -
Spring - 01.怎么使用IOC管理Bean(基于xml方式)
bean的生命周期:1)执行构造器方法2)调用set方法设置属性值3)执行bean的后置处理器方法postProcessBeforeInitialization()4)执行初始化方法5)执行bean的后置处理器方法postProcessAfterInitialization()6)获取创建的bean对象7)执行销毁方法依赖注入:构造器注入、Set方法注入bean的作用域:单例模式singleton、原型模式prototype...原创 2021-07-13 19:38:11 · 1006 阅读 · 0 评论 -
MyBatis - 04.怎么使用动态SQL语句
<resultMap id="Order" type="com.acai.pojo.Order"> <result property="id" column="order_id"/> <result property="createTime" column="create_time"/> <result property="price" column="price"/> <resul...原创 2021-07-21 14:01:47 · 986 阅读 · 0 评论 -
MyBatis - 03.怎么查询一对多关系表
<select id="getTeacher" resultMap="TeacherStudent"> select s.id sid, s.name sname, t.name tname,t.id tid from student s,teacher t where s.tid = t.id and t.id = #{tid} </select> <resultMap id="TeacherStude...原创 2021-07-20 21:33:19 · 1006 阅读 · 0 评论 -
MyBatis - 02.怎么查询多对一关系表
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.acai.dao.OrderMapper"> <resultMap id="OrderU原创 2021-07-20 21:31:26 · 990 阅读 · 0 评论 -
MyBatis - 01.怎么使用xml文件实现增删改查
流程:创建数据库表 - 导入maven依赖 - 编写mybatis-config.xml - 编写mybatis工具类 - 编写实体类 - 编写Mapper接口 - 编写Mapper.xml - 测试重点:Mapper.xml文件和mybatis-config.xml文件中不能出现中文,包括注释!利用对象传递参数,在sql中取出对象的属性即可;利用Map传递参数,在sql中取出Map的Key即可。Mapper.xml文件放在dao包下需要额外在pom中配置: <build>原创 2021-07-19 16:10:49 · 1054 阅读 · 0 评论 -
JavaWeb - 03.怎么实现商品增删改查与分页显示的功能
package com.acai.servlet;import com.acai.pojo.Book;import com.acai.service.BookService;import com.acai.service.impl.BookServiceImpl;import com.acai.utils.WebUtils;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;i原创 2021-07-05 10:54:13 · 1177 阅读 · 0 评论 -
JavaWeb - 02.怎么实现文件上传与下载的功能
package com.UploadDownload.servlet;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileItemFactory;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFil原创 2021-07-03 21:35:50 · 982 阅读 · 0 评论 -
JavaWeb - 01.怎么实现用户注册与登录的功能
目录1. 创建user_info表2. 创建JavaBean对象3. 编写JdbcUtils工具类4. 编写BaseDao抽象类5. 编写UserDao接口及UserDaoImpl实现类6. 编写UserService接口及UserServiceImpl实现类7. 编写JSP(HTML)页面8. 编写Servlet继承类9. 配置web.xml1. 创建user_info表CREATE TABLE user_info( id INT PRIMARY KEY AUTO_INCREMENT, usern原创 2021-06-11 14:20:27 · 1086 阅读 · 1 评论 -
JDBC - 07.怎么使用DBUtils实现增删改查
public class DBUtilsTest { @Test public void testInsert(){ Connection connection = null; try { QueryRunner queryRunner = new QueryRunner(); connection = JDBCUtils.getConnection(); String sql="sel原创 2021-06-10 22:37:03 · 1851 阅读 · 0 评论 -
JDBC - 06.怎么使用Druid连接数据库
1、占位 @Test public void test1() throws Exception { Connection connection = JDBCUtils.getConnection(); System.out.println(connection.getTransactionIsolation()); connection.setTransactionIsolation(Connection.TRANSACTION_SERIALI原创 2021-06-10 17:10:10 · 2112 阅读 · 1 评论 -
JDBC - 05.怎么处理事务
1、事务的四种属性:原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)2、数据库的三种并发问题:脏读不可重复读幻读3、数据库的四种隔离级别READ_UNCOMMITTED(读未提交)READ_COMMITTED(读已提交)REPEATABLE_READ(可重复读)SERIALIZABLE(串行化)public class TransactionTest { @Test public v原创 2021-06-10 15:21:02 · 2195 阅读 · 1 评论 -
JDBC - 04.怎么实现高效批量插入数据
1、开启MySQL的批处理功能:在配置文件的url后面添加?rewriteBatchedStatements=true。public class InsertTest { @Test public void testInsert(){ Connection connection = null; PreparedStatement preparedStatement = null; try { connection =原创 2021-06-10 10:13:34 · 2524 阅读 · 0 评论 -
JDBC - 03.怎么操作Blob类型数据
1、Blob类型的数据即为图片。2、tinyBlob最大支持4KB,Blob最大支持64KB,MediumBlob最大支持16MB,LongBlob最大支持4GB。public class BlobTest { @Test public void insertBlob() throws Exception{ Connection connection = JDBCUtils.getConnection(); String sql="insert into原创 2021-06-10 09:51:36 · 2493 阅读 · 0 评论 -
JDBC - 02.怎么实现增删改查(Create Retrieve Update Delete,CRUD)
1、ORM(Object Relational Mapping)思想:数据库中的一张表对应一个Java类表中的一条记录对应Java类的一个对象表中的一个字段对应Java类的一个属性2、查询时必须用Java类中的属性名为字段命名别名。3、PreparedStatement与Statement的区别:import org.junit.Test;import java.io.InputStream;import java.lang.reflect.Field;import java.sql原创 2021-06-08 21:16:18 · 3625 阅读 · 0 评论 -
JDBC - 01.怎么连接数据库
import org.junit.Test;import java.io.InputStream;import java.sql.Connection;import java.sql.Driver;import java.sql.DriverManager;import java.util.Properties;public class ConnectionTest { @Test public void testConnection1() throws Exception原创 2021-06-08 16:20:03 · 3819 阅读 · 0 评论 -
MySQL - 05.视图、存储过程和函数、流程控制结构
1. 视图2. 存储过程和函数2.1 存储过程2.2 函数3. 流程控制结构3.1 分支结构3.2 循环结构#视图#创建视图CREATE VIEW world.SOMECOUNTRYINFOASSELECT world.country.`Name`,world.country.PopulationFROM world.countryWHERE world.country.Population>10000000ORDER BY world.country.Populatio原创 2021-06-07 14:43:00 · 4887 阅读 · 0 评论 -
MySQL - 04.数据控制语言(Data Control Language,DCL)
1、事务:一条或多条SQL语句组成的一个执行单位,这组SQL语句要么都执行,要么都不执行。2、事务的特点:A(原子性),C(一致性),I(隔离性),D(持久性)。3、事务的并发问题:脏读、不可重复读、幻读。4、通过设置隔离级别解决并发问题。 脏读 不可重复读 幻读READ UNCOMMITTED(读未提交) × × ×READ COMMITTED (读已提交) √ × ×REPEATABLE READ (可重复读)原创 2021-06-01 09:24:33 · 11096 阅读 · 0 评论 -
MySQL - 03.数据定义语言(Data Definition Language,DDL)
1. 库的管理2. 表的管理#分组查询#SELECT 分组函数,分组后的字段#FROM 表#WHERE 筛选条件#GROUP BY 分组的字段#HAVING 分组后的筛选#ORDER BY 排序列表SELECT world.country.Continent,MAX(world.country.SurfaceArea)FROM world.countryGROUP BY world.country.Continent;SELECT world.country.Continent原创 2021-06-01 09:22:18 · 10988 阅读 · 0 评论 -
MySQL - 02.数据操纵语言(Data Manipulation Language,DML)
1. 插入2. 修改3. 删除#连接查询 多表查询 第一张表的每一条数据都跟第二张表的所有数据匹配#等值连接SELECT world.city.`Name`,world.city.CountryCode,world.country.`Name`,world.city.PopulationFROM world.city,world.countryWHERE world.city.CountryCode=world.country.`Code`AND world.city.`Name` LIK原创 2021-06-01 09:16:13 · 10992 阅读 · 0 评论 -
MySQL - 01.数据查询语言(Data Query Language,DQL)
0. 语法SELECT 查询列表 (7)FROM 表1 (1)INNER/LEFT/RIGHT/FULL JOIN 表2 (2)ON 连接条件 (3)WHERE 分组前的筛选条件 (4)GROUP BY 分组列表 (5)HAVING 分组后的筛选条件 (6)ORDER BY 排序列表 (8)LIMIT 起始索引,条目数; (9)1. 基础查询2. 条件查询3. 排序查询4. 常见函数4.1原创 2021-05-26 20:13:44 · 15761 阅读 · 0 评论 -
√ JavaSE - 28.怎么使用lambda表达式(卷1 P242)
只有一个抽象方法的接口称为函数式接口,需要这种接口的对象时,就可以提供一个lambda表达式。lambda表达式实质上是函数式接口的对象。lambda表达式就是一个代码块,以及必须传入代码的变量规范。方法引用的本质是lambda表达式,即利用已经实现的方法替换lambda表达式。import java.util.Comparator;public class LambdaTest { public static void main(String[] args) { /.原创 2021-05-24 20:53:21 · 16994 阅读 · 0 评论 -
√ JavaSE - 27.怎么使用代理(卷1 P273)
利用代理可以在运行时创建实现了一组给定接口的新类,只有在编译时期无法确定需要实现哪个接口时才有必要使用代理。代理模式:使用一个代理对象将原对象包装起来,任何对原对象的调用都要通过代理对象,代理对象决定是否以及何时将方法调用转到原对象上。静态代理:代理类和被代理类在编译期间就确定下来了,不利于程序的扩展,每一个代理类只能为一个接口服务。动态代理:客户通过代理类来调用其他对象的方法,并且是在程序运行时根据需要动态创建被代理类的代理对象。import java.lang.reflect.Invocat.原创 2021-05-24 19:48:10 · 16948 阅读 · 0 评论 -
√ JavaSE - 26.怎么使用反射(卷1 P198)
Class类是一个泛型类,Class类的对象表示一个运行时类型。加载到内存中的类,会缓存一定的时间,在此期间内可以通过不同的方式获取这个类的信息。类的加载过程:加载。将类的class文件读入内存,并由类加载器为之创建一个java.lang.Class对象。链接。将类的二进制数据合并到jre中。初始化。jvm负责类的初始化。利用反射实例化类的对象通常是通过调用类的空参构造器实现的,因此需要保证类具有空参构造器,且是public的。import java.lang.annotation..原创 2021-05-24 11:07:13 · 16965 阅读 · 0 评论 -
√ JavaSE - 25.怎么利用网络传输文件(卷2 P180 P186 P199 P215 P221)
套接字(Socket)由IP地址和端口号组成。IP地址可以自行查询手动输入,也可以利用域名通过InetAddress.getByName()获取。访问量较大的域名通过对应多个IP地址实现负载均衡,访问时InetAddress.getByName()会随机获取其中一个IP地址,InetAddress.getAllByName()会获取所有的IP地址。服务器的输出会成为客户端的输入,客户端的输出会成为服务器的输入。服务器的工作流程:(1) 通过输入流接收客户端输出流发送的请求命令;(2) 解析请求.原创 2021-05-20 14:40:13 · 16963 阅读 · 0 评论 -
√ JavaSE - 24.怎么传输对象(卷2 P70)
利用ObjectOutputStream类进行对象序列化,ObjectInputStream类进行对象反序列化。实现序列化的对象必须实现Serializable接口,提供全局常量serialVersionUID,而且其所有属性也是可序列化的。利用对象序列化可以快速地对一个对象进行深拷贝。import java.io.*;public class SerializableTest { public static void main(String[] args) { //对.原创 2021-05-19 20:14:32 · 16979 阅读 · 0 评论 -
√ JavaSE - 23.怎么操作文件(卷1 P55 卷2 P43 P61 P86)
相对路径是相对于当前Module的路径。Windows系统的路径分隔符为【\\】,Unix系统的路径分隔符为【/】,一般使用File.separator获取当前系统的路径分隔符。一般用字节流处理字节文件,用字符流处理字符文件。一般用缓冲流代替节点流,以提高文件的读写速度。一般先开输入流,再开输出流,先关输出流,再关输入流。为了保证流资源一定被关闭,一般使用try-catch-finally,关闭外层流时内层流自动关闭。一般使用Files类进行读、写、复制、移动、删除文件,以及创建、访问目录。.原创 2021-05-12 17:12:35 · 16899 阅读 · 0 评论 -
√ JavaSE - 22.怎么使用泛型(卷1 P326 P328 P330 P331 P333 P338 P346 P348 P354)
类型变量(T、S、U、……)不能是基本数据类型,只能是引用数据类型,默认为Object类。自定义泛型类或泛型接口时,类型变量在类名或接口名的后面;自定义泛型方法时,类型变量在修饰符的后面,返回值类型的前面。通过关键字extends对类型变量加以约束,类型变量和限定类型可以是类,也可以是接口。最多有一个限定类型是类,可以有多个限定类型是接口;多个类型变量用“,”分隔,多个限定类型用“&”分隔。具有继承关系的类型作为泛型使用时,两个泛型类不再具有继承关系,但可以利用通配符“?”作为其公共父类。.原创 2021-05-12 11:20:28 · 16964 阅读 · 0 评论 -
√ JavaSE - 21.怎么使用Map(卷1 P394 P403 P419)
集合的基本接口之二是Map接口,与Collection接口不同,Map接口存储的是双列数据。Map接口中的key是无序的、不可重复的,使用Set接口存储;value是无序的、可重复的,使用List接口存储;entry(key-value)是无序的、不可重复的,使用Set接口存储。Map的底层实现原理:调用map.put(key,value)时,先调用key.hashCode()计算key的哈希值,根据哈希值计算出该键值对在entry[]中的存放位置,如果此位置上为空,则直接添加,否则比较key与该位置.原创 2021-05-11 15:35:42 · 16913 阅读 · 0 评论 -
√ JavaSE - 20.怎么使用Collection(卷1 P365 P373 P375)
集合的基本接口之一是Collection接口。Collection接口的 contains() 调用对象的equals()进行比较,因此加入集合的对象所在类应重写equals()。Iterator接口是一个迭代器,用于遍历集合中的元素,通过循环调用hasNext()和next()依次访问集合中的元素。每次调用集合对象的iterator()都会得到一个全新的迭代器,指向集合第一个元素的前一个位置。foreach循环可以遍历任何实现了Iterable接口的对象,等价于迭代器。一般情况下,考虑Coll.原创 2021-05-08 09:46:52 · 17050 阅读 · 0 评论 -
√ JavaSE - 19.怎么使用日期和时间(卷2 P280 P284 P288 P289 P290 P294 P298)
Instant类表示时间线上的某个点。LocalDateTime类表示本地的日期和时间。DateTimeFormatter类表示日期和时间的格式器,包括三种格式器:预定义的格式器。locale相关的格式器。带有定制模式的格式器。import java.time.Duration;import java.time.Instant;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;pu.原创 2021-05-07 08:45:17 · 17018 阅读 · 0 评论 -
√ JavaSE - 18.怎么使用String、StringBuffer、StringBuilder(卷1 P44)
String是不可变的Unicode字符序列,底层使用 final char[] 存储;StringBuffer和StringBuilder是可变的Unicode字符序列,底层使用 char[] 存储。String有两种实例化的方式,一种是被字面值直接赋值,另一种是通过关键字new实例化。被字面值直接赋值时,会在常量池中创建String对象,常量池中不会存在内容相同的String对象,若再有被字面值直接复制的String变量,则直接指向常量池中已有的String对象。通过关键字new实例化时,会在堆中创.原创 2021-05-06 15:12:16 · 16912 阅读 · 0 评论 -
√ JavaSE - 17.怎么实现线程间的通信(卷1 P563)
线程进入临界区后,如果发现只有满足了某个条件后才能继续向下执行,则此时可以使用一个条件对象管理这个线程。条件对象负责将不满足条件的线程添加到等待集中,使得该线程进入阻塞状态,直到其他线程利用该条件对象解锁该线程的阻塞状态。Java中的每个对象都有一个内部对象锁,内部对象锁只有一个关联条件。线程间通信的方法:wait() / await():添加线程到等待集中。notifyAll() / signalAll():解锁等待集中所有等待线程的阻塞状态。notify() / signal():解锁等.原创 2021-04-24 21:01:37 · 16985 阅读 · 0 评论