MeowRain Life is Simple Life is Simple
Spring引入外部属性配置文件 我们都知道编写数据源的时候是需要连接数据库的信息的,例如:driver url username password等信息。这些信息可以单独写到一个属性配置文件中吗,这样用户修改起来会更加的方便。当然可以。
第一步:写一个数据源类,提供相关属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 MyDataSource.
p命名空间注入 目的:简化配置。 使用p命名空间注入的前提条件包括两个:
● 第一:在XML头部信息中添加p命名空间的配置信息:xmlns:p=“http://www.springframework.org/schema/p"
● 第二:p命名空间注入是基于setter方法的,所以需要对应的属性提供setter方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Customer.java package com.powercode.spring6.beans; public class Customer { private String name; private int age; public void setName(String name) { this.name = name; } public void setAge(int age){ this.age = age; } @Override public String toString() { return "Customer{" + "name='" + name + '\'' + ", age=" + age + '}'; } } 1 2 3 4 5 6 7 8 spring3.
基于的XML自动装配 根据名称自动装配 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 UserDao.java package com.powercode.spring6.dao; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /* * Bean * * */ public class UserDao { private static final Logger logger = LoggerFactory.getLogger(UserDao.class); public void insert() { //用log4j2日志框架 logger.info("数据库正在插入用户信息"); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 UserService.
maven配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>spring_first</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.
meowrain 发布于 2024-05-23 收录于 Java Java PO,BO,VO,DTO,POJO,DAO概念 一篇文章讲清楚VO,BO,PO,DO,DTO的区别 - 知乎 (zhihu.com)
POJO (Plain Old Java Object) Java POJO (Plain Old Java Object) 是指一个最基本的、普通的Java对象。POJO通常具有以下特点:
只包含私有属性,没有public、protected的属性。属性通常用private修饰。 提供getter和setter方法来访问和修改属性。 不继承或实现任何特定的接口和类。 不包含任何注解。 不依赖外部jar包和类库。 除了基本的构造方法、getter/setter方法、equals/hashCode/toString方法之外,没有任何其他方法。 POJO主要用于表示简单的数据结构,其设计符合面向对象的基本原则,可以很方便地进行序列化和反序列化。在Java Web应用中,POJO常用来接收和传递数据,例如作为Model对象。Spring框架也大量采用POJO设计模式。所以简单来说,POJO就是一个最基本的Java类,没有复杂的依赖关系,用来表示简单的数据模型。
DTO(Data Transfer Object)数据传输对象 DTO是一个比较特殊的对象,他有两种存在形式:
在后端,他的存在形式是java对象,也就是在controller里面定义的那个东东,通常在后端不需要关心怎么从json转成java对象的,这个都是由一些成熟的框架帮你完成啦,比如spring框架
在前端,他的存在形式通常是js里面的对象(也可以简单理解成json),也就是通过ajax请求的那个数据体
这也是为什么把他画成横跨两层的原因
这里可能会遇到个问题,现在微服务盛行,服务和服务之间调用的传输对象能叫DTO吗?
我的理解是看情况
DTO本身的一个隐含的意义是要能够完整的表达一个业务模块的输出
如果服务和服务之间相对独立,那就可以叫DTO
如果服务和服务之间不独立,每个都不是一个完整的业务模块,拆开可能仅仅是因为计算复杂度或者性能的问题,那这就不能够叫做DTO,只能是BO
VO (View Object) VO就是展示用的数据,不管展示方式是网页,还是客户端,还是APP,只要是这个东西是让人看到的,这就叫VO
VO主要的存在形式就是js里面的对象(也可以简单理解成json)
VO和DTO的区别 PO(bean,entity等命名) Persisitant Object 持久对象,数据库表中的记录在java对象中的显示状态
一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象
通常PO里面除了get,set之外没有别的方法
对于PO来说,数量是相对固定的,一定不会超过数据库表的数量
等同于Entity,这俩概念是一致的
BO(Business Object)业务对象
BO就是PO的组合
简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象
复杂点儿的例子PO1是交易记录,PO2是登录记录,PO3是商品浏览记录,PO4是添加购物车记录,PO5是搜索记录,BO是个人网站行为对象
BO是一个业务对象,一类业务就会对应一个BO,数量上没有限制,而且BO会有很多业务操作,也就是说除了get,set方法以外,BO会有很多针对自身数据进行计算的方法
为什么BO也画成横跨两层呢?原因是现在很多持久层框架自身就提供了数据组合的功能,因此BO有可能是在业务层由业务来拼装PO而成,也有可能是在数据库访问层由框架直接生成
很多情况下为了追求查询的效率,框架跳过PO直接生成BO的情况非常普遍,PO只是用来增删改使用
BO和DTO的区别 这两个的区别主要是就是字段的删减
BO对内,为了进行业务计算需要辅助数据,或者是一个业务有多个对外的接口,BO可能会含有很多接口对外所不需要的数据,因此DTO需要在BO的基础上,只要自己需要的数据,然后对外提供
在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成
DAO(Data Access Object) 数据访问对象 DAO(Data Access Object) 是数据访问对象的简称,是JavaWeb应用中用于封装对数据源的访问的组件。
meowrain 发布于 2024-05-23 收录于 网络编程 Socket Socket有两种编程方式
tcp编程 udp编程 Java Socket建立连接 Server.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(8080); // 8080 is the port number System.out.println("Server is running... waiting for client to connect"); Socket socket = server.accept();// wait for client to connect System.
meowrain 发布于 2024-05-23 收录于 网络编程 TCP网络通信编程-文件传输 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 package org.example.socket; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class TcpServerCopy { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8888); System.out.println("等待客户端连接..."); Socket socket = serverSocket.accept(); System.out.println("客户端连接成功"); /* 读入文件 */ File file = new File("src/org/example/111658775_p0.
meowrain 发布于 2024-05-23 收录于 网络编程 TCP字符流编程 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package org.example.socket; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class SocketTcp03Server { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(9999); Socket socket = serverSocket.accept(); System.out.println("服务端启动,正在监听9999端口"); InputStream inputStream = socket.getInputStream(); InputStreamReader reader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(reader); String s = bufferedReader.
meowrain 发布于 2024-05-23 收录于 网络编程 TCP网络通信编程1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 SockeTcp01Client.java package org.example.socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; public class SocketTcp01Client { public static void main(String[] args) throws IOException { Socket socket = new Socket(InetAddress.getLocalHost(),9999); System.out.println("客户端socket返回" + socket.getClass()); OutputStream outputStream = socket.getOutputStream(); byte[] content = "HelloServer,This is a message come from Client".getBytes(); outputStream.write(content); outputStream.
meowrain 发布于 2024-05-23 收录于 单片机 Pin引脚类的应用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from machine import Pin # 创建一个输出引脚在0引脚 p0 = Pin(0,Pin.OUT) # 给P0引脚线输出低电平,再输出高电平 p0.value(0) p0.value(1) # 给P0引脚线输出低电平,再输出高电平 p0.on() p0.off() # 给P0引脚先输出低电平,再输出高电平 p0.low() p0.high() #再P2创建一个输入引脚,并设置上拉电阻 p2 = Pin(2,Pin.IN,Pin.PULL_UP) # 打印P2的值 print(p2.value()) 软件设计1-点亮一个LED 1 2 3 4 5 from machine import Pin # 构建 pin_12 引脚对象,GPIO12输出 pin_12 = Pin(12,Pin.OUT) #使Pin12输出高电平 pin_12.high() 软件设计2-闪烁的LED 1 2 3 4 5 6 7 8 9 from machine import Pin # 导入time模块 import time # 构建pin12引脚对象,GPIO12输出 pin_12 = Pin(12,Pin.