序列化和反序列化:
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
git小乌龟更新仓库项目:
拉取--->提交--->推送(拉取出现冲突时:根据提示找到冲突的文件,还原一下,然后再拉取,成功拉取后,把更改的内容再写进去,然后再(拉取)提交,推送)
optional:详解
Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
Optional 类的引入很好的解决空指针异常。
id生成策略:
//hibernate的uuid
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
//id自动增长
@GeneratedValue(strategy = GenerationType.IDENTITY)
为什么用注解不用“new”?
@Resource(name = "manImpl") private Human human; 与 private Human human = new ManImpl();
这两种形式有区别么? 不都是为了在方法中是使用human.method();而引入一个对象么?
你自己new的对象, 你不清楚什么时候就会被回收了..而用注解,则是将这个对象交给spring的容器管理.
不需要为对象的创建和销毁而考虑.. 这也是使用spring框架的主要原因
@runWith注解:
@RunWith就是一个运行器
@RunWith(JUnit4.class)就是指用JUnit4来运行
@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境
@RunWith(Suite.class)的话就是一套测试集合,
Spring中的注解:
@Autowired 注释:它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
@controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层
@service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理
@repository(实现dao访问)
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
@component (把普通pojo实例化到spring容器中,相当于配置文件中的
<bean id="" class=""/>)
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我
们就可以使用@Component来标注这个类。
实体类中注释:
*@Table 标注类对应的表
若表名和类型相同时,省略@Table,比如类Users 和表 users;
若不相同时,必须有@Table,并设置name,为该类对应的表名。@Table(name="users")
* @Entity 标注实体
* @Id 标注id
* @Transient 标注该属性不做与表的映射(原因:可能表中没有该属性对应的字段)
有该注解,在执行sql语句时,就不会出现该属性,否则会有,若表中没有该字段则会报错
* @Basic 默认所有属性都有该注解(主键需要单独使用@Id),所以可以省略
该注解可以放在属性上,也可以放在对应的getter方法上。
注意:要么统一将@Basic放在属性上,要么统一放在对应的getter方法上。(一般都放在属性上,可读性比
较好)
* @Column 类中属性名和表中对应字段名不相同时,会使用该注解,指明在类中对应的字段
* @Column(name="对应的表中字段名")
Spring Boot定时任务注解:
@EnableScheduling
//创建定时任务
//在Spring Boot中编写定时任务是非常简单的事,下面通过实例介绍如何在Spring Boot中创建定时任务,
//实现每过5秒输出一下当前时间。
//在Spring Boot的主类中加入@EnableScheduling注解,启用定时任务的配置
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
//创建定时任务实现类
@Component
public class ScheduledTasks {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("现在时间:" + dateFormat.format(new Date()));
}
}
运行程序,控制台中可以看到类似如下输出,定时任务开始正常运作了。
2018-04-15 10:40:04.073 INFO 1688 --- [ main] com.cicoding.Application : Started Application in 1.433 seconds (JVM running for 1.967) 现在时间:10:40:09 现在时间:10:40:14 现在时间:10:40:19 现在时间:10:40:24 现在时间:10:40:29522 现在时间:10:40:34
关于上述的简单入门示例也可以参见官方的Scheduling Tasks
@Scheduled详解
在上面的入门例子中,使用了@Scheduled(fixedRate = 5000) 注解来定义每过5秒执行的任务,对于@Scheduled的使用可以总结如下几种方式:
@Scheduled(fixedRate = 5000) :上一次开始执行时间点之后5秒再执行
@Scheduled(fixedDelay = 5000) :上一次执行完毕时间点之后5秒再执行
@Scheduled(initialDelay=1000, fixedRate=5000) :第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
@Scheduled(cron="*/5 * * * * *") :通过cron表达式定义规则
SpringBoot-@PathVariable:详解
@RequestMapping("/del/{userId}")
public String del(@PathVariable String userId){
userService.del(userId);
return "redirect:/list";
}
@PathVariable:获取URL变量值赋值给注解后面的变量
java中trim()方法:
trim()方法返回调用字符串对象的一个副本,但是所有起始和结尾的空格都被删除了,
例子如下:
String s = " Hello World ".trim();
s = "Hello World";
//就是把"Hello World"放入s中
StringUtils中 isNotEmpty 和isNotBlank的区别【java字符串判空】
isNotEmpty(str)等价于 str != null && str.length > 0
isNotBlank(str) 等价于 str != null && str.length > 0 && str.trim().length > 0
同理
isEmpty 等价于 str == null || str.length == 0
isBlank 等价于 str == null || str.length == 0 || str.trim().length == 0
str.length > 0 && str.trim().length > 0 ---> str.length > 0
<form> 标签的 enctype 属性
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。
语法
<form enctype="value">
属性值
值 | 描述 |
---|---|
application/x-www-form-urlencoded | 在发送前编码所有字符(默认) |
multipart/form-data |
不对字符编码。 在使用包含文件上传控件的表单时,必须使用该值。 |
text/plain | 空格转换为 "+" 加号,但不对特殊字符编码。 |
清空数据库表数据,并重置主键/自动增长列计数器
语法(速度快效率高):
truncate table 表名;
js里引用绝对路径
1.先在jsp里定义
<script>
var context_path = '${pageContext.request.contextPath}';
</script>
2.再在js里引用
url: context_path + '/xxx/xxx.do',