前言
通过作者《从零开始学springboot》前面大概20几个独立的小demo以及最后的两个大汇总案例,相信大家和作者一样,对于使用springboot来开发已经得心应手了。作者在写《从零开始学springboot》这个专题时,也还是个phper,在写完前二十几章时,作者已经完成了从一名phper到javer的转型之路,项目也已安全上线。说这个,只是希望,这个系列能够对希望转型java开发的同学门一点心得和帮助。
讲真,《从零开始学springboot》这个系列到此已经基本完成了它的使命(ps:记录作者转型之路),不过出于深入学习的需要,我认为该系列还只完成了第一步,仅仅能够帮助大家完成“任务”,而对于springboot的原理知识还差的远呢。所以,该系列还会继续下去,接下来的文章重点将会讲解原理类的知识,可能比较抽象,当然,也会穿插一下作者在实际开发过程中碰到的各种问题,以及分享一下实用的工具。
mybatis进阶-通用mapper
使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL。而且,当数据库表结构改动时,对应的所有SQL以及实体类都需要更改。这工作量和效率的影响或许就是区别增删改查程序员和真正程序员的屏障。这时,通用Mapper便应运而生。 通用Mapper就是为了解决单表增删改查,基于Mybatis的插件。开发人员不需要编写SQL,不需要在DAO中增加方法,只要写好实体类,就能支持相应的增删改查方法。
通用mapper详解
使用通用mapper,默认继承了如下方法
Select 方法:List select(T record); 说明:根据实体中的属性值进行查询,查询条件使用等号
方法:T selectByPrimaryKey(Object key); 说明:根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
方法:List selectAll(); 说明:查询全部结果,select(null)方法能达到同样的效果
方法:T selectOne(T record); 说明:根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号
方法:int selectCount(T record); 说明:根据实体中的属性查询总数,查询条件使用等号
Insert 方法:int insert(T record); 说明:保存一个实体,null的属性也会保存,不会使用数据库默认值
方法:int insertSelective(T record); 说明:保存一个实体,null的属性不会保存,会使用数据库默认值
Update 方法:int updateByPrimaryKey(T record); 说明:根据主键更新实体全部字段,null值会被更新
方法:int updateByPrimaryKeySelective(T record); 说明:根据主键更新属性不为null的值
Delete 方法:int delete(T record); 说明:根据实体属性作为条件进行删除,查询条件使用等号
方法:int deleteByPrimaryKey(Object key); 说明:根据主键字段进行删除,方法参数必须包含完整的主键属性
Example方法 方法:List selectByExample(Object example); 说明:根据Example条件进行查询 重点:这个查询支持通过Example类指定查询列,通过selectProperties方法指定查询列
方法:int selectCountByExample(Object example); 说明:根据Example条件进行查询总数
方法:int updateByExample(@Param(“record”) T record, @Param(“example”) Object example); 说明:根据Example条件更新实体record包含的全部属性,null值会被更新
方法:int updateByExampleSelective(@Param(“record”) T record, @Param(“example”) Object example); 说明:根据Example条件更新实体record包含的不是null的属性值
方法:int deleteByExample(Object example); 说明:根据Example条件删除数据
总体来说,在实际开发过程中,通用mapper的使用能帮助我们节约大量的时间~ 下面我们就来实际体验下~
目录结构
手动创建 controller mapper model 等package
添加依赖
pom.xml:
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.0.0
mysql
mysql-connector-java
8.0.15
tk.mybatis
mapper-spring-boot-starter
2.1.5
添加mybatis自动生成插件
关于mybatis自动生成代码插件不多讲了,在前几章讲过多次了。 pom.xml:
org.springframework.boot
spring-boot-maven-plugin
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
src/main/resources/generator.xml
true
true
mybatis自动生成插件配置
generator.xml:
添加配置 application.yml:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
建库 创建test数据库
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for person
-- ----------------------------
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS = 1;
运行mybatis-generator 如果generator.xml配置正确(内容需要更改mysql连接地址和driver包所在路径以及需要生成的表名称)则会在mapper和model目录下生成person对应的文件。
通用mapper的使用 我们需要将mapper/PersonMapper改为:
package com.mrcoder.sbmcommonmapper.mapper;
import com.mrcoder.sbmcommonmapper.model.Person;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.common.ExampleMapper;
import tk.mybatis.mapper.common.Mapper;
//继承通用mapper
public interface PersonMapper extends Mapper, InsertListMapper, ExampleMapper {
}
model/Person增加主键的注解@Id 说明:如果不在主键上加此注解,则使用通用mapper的更新方法时会出现更新失败的问题。
package com.mrcoder.sbmcommonmapper.model;
import javax.persistence.Id;
public class Person {
@Id
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
最后我们在入口类中增加mapper类的扫描注解 SbmCommonMapperApplication:
package com.mrcoder.sbmcommonmapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
//扫描mapper类--注意引入的是(tk.mybatis.spring.annotation.MapperScan)这个包
@MapperScan("com.mrcoder.sbmcommonmapper.mapper")
@SpringBootApplication
public class SbmCommonMapperApplication {
public static void main(String[] args) {
SpringApplication.run(SbmCommonMapperApplication.class, args);
}
}
完善controller 基本完成,我们来编写 CommonMapperController:
package com.mrcoder.sbmcommonmapper.controller;
import com.mrcoder.sbmcommonmapper.mapper.PersonMapper;
import com.mrcoder.sbmcommonmapper.model.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import tk.mybatis.mapper.entity.Example;
import java.util.ArrayList;
import java.util.List;
@RestController
public class CommonMapperController {
@Autowired
private PersonMapper personMapper;
@GetMapping("/getList")
public List getList() {
//通用mapper的获取列表方法
return personMapper.selectAll();
}
@GetMapping("/getById/{id}")
public Person getById(@PathVariable("id") Integer id) {
//通用mapper的根据主键获取指定记录方法
return personMapper.selectByPrimaryKey(id);
}
@GetMapping("/insert")
public int insert() {
Person person = new Person();
person.setAge(10);
person.setName("p1");
//插入方法
return personMapper.insert(person);
}
@GetMapping("/update")
public int update() {
Person person = new Person();
person.setId(1);
person.setAge(10);
person.setName("p1-update");
//更新方法
return personMapper.updateByPrimaryKeySelective(person);
}
@GetMapping("/batchInsert")
public int batchInsert() {
Person p1 = new Person();
p1.setAge(10);
p1.setName("p2");
Person p2 = new Person();
p2.setAge(10);
p2.setName("p3");
List personList = new ArrayList();
personList.add(p1);
personList.add(p2);
//批量插入方法
return personMapper.insertList(personList);
}
@GetMapping("/query")
public List query() {
Example con = new Example(Person.class);
Example.Criteria criteria = con.createCriteria();
criteria.andEqualTo("age", 10);
//复杂条件查询方法
return personMapper.selectByExample(con);
}
}
项目地址 https://github.com/MrCoderStack/SpringBootDemo/tree/master/sbm-common-mapper
请关注我的订阅号
你可能感兴趣的:(从零开始学springboot)
SpringBoot整合AI:5行代码接入大模型API实战
weixin_74887700
spring boot 人工智能 后端
一、SpringAI快速入门指南1.1三步接入OpenAI//build.gradledependencies{implementation'org.springframework.ai:spring-ai-openai-spring-boot-starter:0.8.0'}//核心调用代码@RestControllerpublicclassAIController{@Autowiredpriva
从零开始Real-ESRGAN的复现
晒阳光的咸鱼
超分辨率重建 python
前言要初步了解Real-ESRGAN,可以看我之前发布的博客。初学Real-Esrgan-CSDN博客本文主要是对Real-ESRGAN的一个复现,主要就是对环境的配置进行记录,因为是实现之后才做的记录,所以只能尽可能的对其进行复现。大家可以看一下这个博主的文章进行一个参考。【论文阅读+测试】Real-Esrgan超分辨率算法_realesrgan-CSDN博客项目开始首先,我们要知道Real-E
【Git使用】在idea中上传springboot+vue项目至gitee
小菜不菜。
Git使用教程 intellij-idea vue.js gitee
1.在根目录下创建本地仓库gitinit2.添加所有文件到Git仓库gitadd.3.提交代码gitcommit-m"InitialcommitwithbothSpringBootbackendandVuefrontend"4.连接本地仓库5.推送代码到Giteegitpush-uoriginmaster
AI赋能Spring Boot:打造智能应用的秘诀
墨瑾轩
一起学学Java【一】 人工智能 spring boot 后端
关注墨瑾轩,带你探索Java的奥秘超萌技术攻略,轻松晋级编程高手技术宝库已备好,就等你来挖掘订阅墨瑾轩,智趣学习不孤单即刻启航,编程之旅更有趣引言各位技术探险家们,欢迎来到今天的冒险——我们将一起探索如何将SpringBoot与AI服务集成,利用OpenAI和TensorFlow提升应用的智能。想象一下,你的应用程序不再是一个简单的代码集合,而是一个拥有智慧的伙伴,能够理解和预测用户的需求。这就是
MicrobeCensus:快速估计宏基因组数据中的平均基因组大小
邪恶的凹凸曼
笔记 算法
MicrobeCensus:快速估计宏基因组数据中的平均基因组大小在微生物组学研究中,了解微生物群落的平均基因组大小(AGS)对于揭示群落结构和功能至关重要。今天,我将为大家介绍一个非常实用的工具——MicrobeCensus。它能够从宏基因组数据中快速估计微生物群落的平均基因组大小,帮助我们更好地理解微生物群落的组成和功能。接下来,我将详细分享如何安装和使用这个强大的工具。一、为什么选择Micr
理解 Spring Boot 架构流程
小蜗牛慢慢爬行
spring boot
SpringBoot是一个功能强大的框架,它通过提供预配置的设置简化了企业级应用程序的开发,使开发人员可以更加专注于编写业务逻辑而不是管理配置。在本文中,我们将深入研究典型SpringBoot应用程序的架构流程,帮助您了解组件如何交互以及请求从头到尾的处理方式。1.SpringBoot架构核心组件在深入研究流程之前,必须了解构成SpringBoot应用程序的核心组件:Spring框架:Spring
【A/B测试】深度解析:从理论到实践Python实现详解(含源码)
絆人心
python 前端 开发语言 数据分析 信息可视化 数据挖掘 机器学习
目录前言一、什么是A/B测试?A/B测试的常见应用场景二、A/B测试的基本流程三、假设检验:零假设与备择假设Python代码示例:A/B测试的实践四、A/B测试中的统计学方法五、总结附录:完整代码前言A/B测试(也称分流测试)在数据分析和产品优化中扮演重要角色。无论是在网站优化、营销活动还是产品改进中,A/B测试都帮助通过数据驱动决策、测试和验证论文提出了实际操作的基本概念,详细讲解了如何实施A/
70道Spring Boot面试八股文(答案、分析和深入提问)整理
守护海洋的猫
spring boot 面试 后端 java
1.什么是RESTfulWeb服务?如何在SpringBoot中创建一个RESTfulWeb服务?回答什么是RESTfulWeb服务?RESTfulWeb服务是基于REST(RepresentationalStateTransfer)架构风格构建的网络服务。REST的核心思想是利用HTTP协议的标准方法(如GET、POST、PUT、DELETE等)来操作资源。每个资源在服务中都有一个URI(统一资
四川专升本40天逆袭计划(热血硬核版)[特殊字符]
我的青春不太冷
学习 专升本 物联网应用技术 专科
你会感谢努力过的自己牛马版本舒缓版本牛马版本四川专升本40天逆袭计划(知乎硬核版)写在前面:40天够不够?老子告诉你:够!但得玩命!每天睡6小时,学12小时,最后10天你会感谢现在拼命的自己。(ps:物联网专业的兄弟,计算机基础给劳资冲满分!)一、战略总纲(理工科版)核心战术:✅保计算机冲140,数学死磕基础题,英语作文模板救命✅每天3科雨露均沾,但计算机优先提分!✅最后10天全真模拟,考试当日常
【Elasticsearch】java 集成es
日月星宿~
elk elasticsearch
选择很多人在Springboot项目中都已经习惯采用Spring家族封装的spring-data-elasticsearch来操作elasticsearch,而官方更推荐采用rest-client。今天给大家介绍下在springboot中如何整合rest-client操作elasticsearch。我们知道Elasticsearch是一款RestfulAPI风格的分布式搜索引擎。ESClient有
springboot基于web的汽车销售系统论文
m0_74825502
spring boot 前端 汽车
系统简介如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统汽车销售信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个汽车销售系统,可以解决许多问题。汽车销售系统可以实现用户购买汽车,预约汽车试驾,查看购买汽车的订单,在论坛模块发帖,回帖等,管理员管理汽车试驾预
springboot(十六):使用Jenkins部署Spring Boot
IT燕
spring boot spring spring boot Jenkins
原文链接jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署SpringBoot项目jenkins搭建部署分为三个步骤;第一步,jenkins安装第二步,插件安装和配置第三步,PushSSH第四步,部署项目第一步,jenkins安装准备环境:JDK:1.8Jenkins:2.83Centos:7.3maven3.5‘jdk默认已经安装完成配置maven版本要求maven3
超详细RabbitMq入门教程
phl成为自己的太阳
rabbitmq rabbitmq 分布式事务 可靠消费 可靠传递 过期队列
RabbitMq入门教程准备工作:安装rabbit参照https://blog.csdn.net/jiayou516/article/details/119183297?spm=1001.2014.3001.5501一.RabbitMQ-SpringBoot案例-fanout模式实现步骤1:创建生产者工程:sspringboot-rabbitmq-fanout-producer2:创建消费者工程:
深入解析设计模式之单例模式
菜鸟一枚在这
单例模式 javascript 开发语言
深入解析设计模式之单例模式在软件开发的复杂世界里,设计模式是开发者手中的得力工具,它们是对常见问题的总结和通用解决方案。单例模式作为其中一种基础且常用的设计模式,在各类应用中扮演着重要角色。一、单例模式的定义与概念单例模式的核心要义在于确保一个类在整个系统运行期间仅有一个实例,并且为系统提供一个全局的访问点来获取这个唯一实例。从数学与逻辑学的角度类比,就如同一个“有且仅有一个元素的集合”。在Jav
(二)趣学设计模式 之 工厂方法模式!
码熔burning
设计模式 设计模式 工厂方法模式 java
目录一、啥是工厂方法模式?二、为什么要用工厂方法模式?三、工厂方法模式怎么实现?四、工厂方法模式的应用场景五、工厂方法模式的优点和缺点六、总结我的其他文章也讲解的比较有趣,如果喜欢博主的讲解方式,可以多多支持一下,感谢!了解单例模式请看:(一)趣学设计模式之单例模式!这篇文章带你详细认识一下设计模式中的工厂方法模式一、啥是工厂方法模式?想象一下,你开了一家甜品店,有蛋糕、饼干、面包三种甜点。如果只
(四)趣学设计模式 之 原型模式!
码熔burning
设计模式 原型模式 设计模式
目录一、啥是原型模式?二、为什么要用原型模式?三、原型模式怎么实现?四、原型模式的应用场景五、原型模式的优点和缺点六、总结我的其他文章也讲解的比较有趣,如果喜欢博主的讲解方式,可以多多支持一下,感谢!了解工厂方法模式请看:(三)趣学设计模式之抽象工厂模式!这篇文章带你详细认识一下设计模式中的原型模式一、啥是原型模式?原型模式,说白了,就是“山寨”!你有一个宝贝,不想自己辛辛苦苦再做一个,就找个复印
被重复代码逼疯?AOP来当“舔狗”!日志/事务/权限,随叫随到!
码熔burning
SpringBoot 数据库
文章目录一、什么是AOP?二、AOP核心概念1.切面(Aspect)2.通知(Advice)3.切点(Pointcut)4.连接点(Joinpoint)️三、代码示例(SpringBoot环境)0.添加依赖1.简单日志记录(@Before)2.方法性能监控(@Around)3.权限校验(自定义注解+@Before)4.缓存优化(@Around+缓存逻辑)四、AOP底层原理(简单版)五、AOP最佳实
Kafka客户端连接服务端异常 Can‘t resolve address: VM-12-16-centos:9092
junzhen_chen
kafka 分布式
前置条件:已在CentOs上搭建好kafka节点服务器,已启动kafka服务已在Springboot项目中引入kafka客户端配置,kafka.bootstrap-server=ip:port,并启动客户端服务异常过程:在客户端Springboot服务启动过程,控制台抛出异常信息:Can'tresolveaddress:VM-12-16-centos:9092原因分析:当kafkabroker启动
Spring MVC 与 Spring Boot:从“手动挡”到“自动驾驶”的进化论,兼谈前后端分离的哲学
月落星还在
springBoot spring mvc spring boot 云原生
引言:当“造轮子”成为一门艺术在Java开发者的世界里,Spring框架就像空气一样无处不在。但你是否想过:为什么我们需要SpringBoot?为什么在“前后端分离”大行其道的今天,SpringMVC依然活跃在舞台上?这背后不仅是技术的迭代,更是一场关于开发效率与架构哲学的深刻博弈。让我们抛开教科书式的定义,用一场“时空穿越”的视角,重新审视这两个框架的恩怨情仇。第一章SpringMVC:那个“手
(三)趣学设计模式 之 抽象工厂模式!
码熔burning
设计模式 设计模式 抽象工厂模式
目录一、啥是抽象工厂模式?二、为什么要用抽象工厂模式?三、抽象工厂模式怎么实现?四、抽象工厂模式的应用场景五、抽象工厂模式的优点和缺点六、抽象工厂模式与工厂方法模式的区别七、总结我的其他文章也讲解的比较有趣,如果喜欢博主的讲解方式,可以多多支持一下,感谢!了解工厂方法模式请看:(二)趣学设计模式之工厂方法模式!这篇文章带你详细认识一下设计模式中的抽象工厂模式一、啥是抽象工厂模式?想象一下,你开了一
多环境日志管理:使用Logback与Logstash集成实现高效日志处理
程序猿熊跃晖
Java spring boot logback elk
多环境日志管理:使用Logback与Logstash集成实现高效日志处理在现代软件开发中,有效的日志管理是至关重要的。无论是调试问题、监控应用性能还是审计用户活动,良好的日志策略都能大大提高工作效率。本文将详细介绍如何配置SpringBoot项目以支持多环境的日志输出,并通过Logback与Logstash集成来实现高效的日志管理和分析。一、准备工作首先,在你的pom.xml文件中添加必要的依赖项
springboot使用logback自定义日志
m0_74825003
面试 学习路线 阿里巴巴 spring boot logback java
前言1、末尾有完整配置文件2、日志分为五个等级,按照优先级的高低可以分为:TRANCEorg.springframework.bootspring-boot-starter-logging解释:按理来讲需要引入的是spring-boot-starter-logging依赖,但是spring-boot-starter-web间接依赖于spring-boot-starter-logging,所以我们只
30天练完这96个爬虫项目案例,成功逆袭!靠接单月入W+轻轻松松!
小天才学习机打游戏
爬虫 python 开发语言 人工智能 云计算
在受所有大环境的影响,大家开始一个比一个卷,所以靠固定的收入那一点点是明显不够的。现在谁还没有一点其他的收入呢?Python爬虫就成了大家学习的不二之选~相信很多学习Python的小伙伴都苦于找不到python项目练手,在我看来,基础知识学的再好,没有经历过实战就是白扯,这️️️个项目非常适合新手学习Python爬虫虽然做为python学习中较简单的一个知识点,但是它在平时生活中的运用确实非常多的
RuoYi-Vue-Plus (Logback 和 logback-plus.xml 、p6spy)
syfjava
RuoYi-Vue-Plus 学习 logback
项目后本地日志一、logback依赖打开最外层的pom.xml,查看SpringBoot的依赖配置。org.springframework.bootspring-boot-dependencies${spring-boot.version}pomimport
代码随想录训练营第二十三天| 39. 组合总和 40.组合总和II 131.分割回文串
chengooooooo
算法
39.组合总和题目链接/文章讲解:代码随想录视频讲解:带你学透回溯算法-组合总和(对应「leetcode」力扣题目:39.组合总和)|回溯法精讲!_哔哩哔哩_bilibili//组合问题要考虑是不是在一个集合里操作//最常见的就是递归回溯法//再考虑考虑剪枝classSolution{publicList>combinationSum(int[]candidates,inttarget){List
从零开始学习黑客技术,看这一篇就够了
网络安全-旭师兄
学习 web安全 python 网络安全 密码学
基于入门网络安全/黑客打造的:黑客&网络安全入门&进阶学习资源包黑客,对于很多人来说,是一个神秘的代名词,加之影视作品夸张的艺术表现,使得黑客这个本来只专注于技术的群体,散发出亦正亦邪的神秘色彩。黑客源自英文hacker一词,最初曾指热心于计算机技术、水平高超的电脑高手,尤其是程序设计人员,逐渐区分为白帽、灰帽、黑帽等。其中,白帽黑客被称为道德黑客。他们不会非法入侵用户网络,而是通过一系列测试检查
2025网络安全学习路线 保姆级学习路线 非常详细 推荐学习
白帽黑客-晨哥
学习 web安全 安全 数据库 php
关键词:网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线首先咱们聊聊,学习网络安全方向通常会有哪些问题1、打基础时间太长学基础花费很长时间,光语言都有几门,有些人会倒在学习linux系统及命令的路上,更多的人会倒在学习语言上;2、知识点掌握程度不清楚对于网络安全基础内容,很多人不清楚需要学到什么程度,囫囵吞枣,导致在基础上花费太多时间;看到很多小伙伴,买了HTML,PHP,数据库,计算机
springboot中配置logback-spring.xml
m0_74824755
面试 学习路线 阿里巴巴 spring spring boot logback
一、在src/main/resources目录下,也就是在classpath路径下创建logback-spring.xml注:springboot框架自动配置,如果更换名称,可在配置文件指定该文件即可-->%d{yyyy-MM-ddHH:mm:ss}[%thread]%-5level%logger{80}-%msg%n${log_dir}/info.logINFOACCEPTDENY${log_d
在Spring Boot中如何使用Freemaker模板引擎
lozhyf
工作 学习 面试 spring boot 后端 java
在SpringBoot中使用FreeMarker模板引擎可以帮助你创建动态的Web页面。以下是详细的步骤和示例代码,介绍如何在SpringBoot项目里集成和使用FreeMarker。1.添加依赖如果你使用的是Maven项目,需要在pom.xml文件中添加FreeMarker相关依赖。SpringBoot提供了对应的Starter依赖,可简化配置过程。在标签内添加如下内容:xmlorg.sprin
Spring Boot定时任务原理
sjsjsbbsbsn
Spring八股 spring boot java 后端
SpringBoot定时任务原理在现代应用中,定时任务的调度是实现周期性操作的关键机制。SpringBoot提供了强大的定时任务支持,通过注解驱动的方式,开发者可以轻松地为方法添加定时任务功能。本文将深入探讨SpringBoot中定时任务的实现原理,重点分析@EnableScheduling和ScheduledAnnotationBeanPostProcessor的作用,以及任务如何被注册和执行。
java短路运算符和逻辑运算符的区别
3213213333332132
java基础
/*
* 逻辑运算符——不论是什么条件都要执行左右两边代码
* 短路运算符——我认为在底层就是利用物理电路的“并联”和“串联”实现的
* 原理很简单,并联电路代表短路或(||),串联电路代表短路与(&&)。
*
* 并联电路两个开关只要有一个开关闭合,电路就会通。
* 类似于短路或(||),只要有其中一个为true(开关闭合)是
Java异常那些不得不说的事
白糖_
java exception
一、在finally块中做数据回收操作
比如数据库连接都是很宝贵的,所以最好在finally中关闭连接。
JDBCAgent jdbc = new JDBCAgent();
try{
jdbc.excute("select * from ctp_log");
}catch(SQLException e){
...
}finally{
jdbc.close();
utf-8与utf-8(无BOM)的区别
dcj3sjt126com
PHP
BOM——Byte Order Mark,就是字节序标记 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。这样如
JAVA Annotation之定义篇
周凡杨
java 注解 annotation 入门 注释
Annotation: 译为注释或注解
An annotation, in the Java computer programming language, is a form of syntactic metadata that can be added to Java source code. Classes, methods, variables, pa
tomcat的多域名、虚拟主机配置
g21121
tomcat
众所周知apache可以配置多域名和虚拟主机,而且配置起来比较简单,但是项目用到的是tomcat,配来配去总是不成功。查了些资料才总算可以,下面就跟大家分享下经验。
很多朋友搜索的内容基本是告诉我们这么配置:
在Engine标签下增面积Host标签,如下:
<Host name="www.site1.com" appBase="webapps"
Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )
510888780
linux capistrano
1.ssh -v hdfs@192.168.18.133 出现
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
错误
运行状况如下:
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuratio
log4j的用法
Harry642
java log4j
一、前言: log4j 是一个开放源码项目,是广泛使用的以Java编写的日志记录包。由于log4j出色的表现, 当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代jdk1.4 的日志工具类,但当时jdk1.4已接近完成,所以sun拒绝使用log4j,当在java开发中
mysql、sqlserver、oracle分页,java分页统一接口实现
aijuans
oracle jave
定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量
oracle分页:
select * from ( select mytable.*,rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart
sqlServer分页:
Hessian 简单例子
antlove
java Web service hessian
hello.hessian.MyCar.java
package hessian.pojo;
import java.io.Serializable;
public class MyCar implements Serializable {
private static final long serialVersionUID = 473690540190845543
数据库对象的同义词和序列
百合不是茶
sql 序列 同义词 ORACLE权限
回顾简单的数据库权限等命令;
解锁用户和锁定用户
alter user scott account lock/unlock;
//system下查看系统中的用户
select * dba_users;
//创建用户名和密码
create user wj identified by wj;
identified by
//授予连接权和建表权
grant connect to
使用Powermock和mockito测试静态方法
bijian1013
持续集成 单元测试 mockito Powermock
实例:
package com.bijian.study;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import org.junit.Before;
import org.junit.Test;
import or
精通Oracle10编程SQL(6)访问ORACLE
bijian1013
oracle 数据库 plsql
/*
*访问ORACLE
*/
--检索单行数据
--使用标量变量接收数据
DECLARE
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
select ename,sal into v_ename,v_sal
from emp where empno=&no;
dbms_output.pu
【Nginx四】Nginx作为HTTP负载均衡服务器
bit1129
nginx
Nginx的另一个常用的功能是作为负载均衡服务器。一个典型的web应用系统,通过负载均衡服务器,可以使得应用有多台后端服务器来响应客户端的请求。一个应用配置多台后端服务器,可以带来很多好处:
负载均衡的好处
增加可用资源
增加吞吐量
加快响应速度,降低延时
出错的重试验机制
Nginx主要支持三种均衡算法:
round-robin
l
jquery-validation备忘
白糖_
jquery css F# Firebug
留点学习jquery validation总结的代码:
function checkForm(){
validator = $("#commentForm").validate({// #formId为需要进行验证的表单ID
errorElement :"span",// 使用"div"标签标记错误, 默认:&
solr限制admin界面访问(端口限制和http授权限制)
ronin47
限定Ip访问
solr的管理界面可以帮助我们做很多事情,但是把solr程序放到公网之后就要限制对admin的访问了。
可以通过tomcat的http基本授权来做限制,也可以通过iptables防火墙来限制。
我们先看如何通过tomcat配置http授权限制。
第一步: 在tomcat的conf/tomcat-users.xml文件中添加管理用户,比如:
<userusername="ad
多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
bylijinnan
java 多线程
public class IncDecThread {
private int j=10;
/*
* 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
* 两个问题:
* 1、线程同步--synchronized
* 2、线程之间如何共享同一个j变量--内部类
*/
public static
买房历程
cfyme
2015-06-21: 万科未来城,看房子
2015-06-26: 办理贷款手续,贷款73万,贷款利率5.65=5.3675
2015-06-27: 房子首付,签完合同
2015-06-28,央行宣布降息 0.25,就2天的时间差啊,没赶上。
首付,老婆找他的小姐妹接了5万,另外几个朋友借了1-
[军事与科技]制造大型太空战舰的前奏
comsci
制造
天气热了........空调和电扇要准备好..........
最近,世界形势日趋复杂化,战争的阴影开始覆盖全世界..........
所以,我们不得不关
dateformat
dai_lm
DateFormat
"Symbol Meaning Presentation Ex."
"------ ------- ------------ ----"
"G era designator (Text) AD"
"y year
Hadoop如何实现关联计算
datamachine
mapreduce hadoop 关联计算
选择Hadoop,低成本和高扩展性是主要原因,但但它的开发效率实在无法让人满意。
以关联计算为例。
假设:HDFS上有2个文件,分别是客户信息和订单信息,customerID是它们之间的关联字段。如何进行关联计算,以便将客户名称添加到订单列表中?
&nbs
用户模型中修改用户信息时,密码是如何处理的
dcj3sjt126com
yii
当我添加或修改用户记录的时候对于处理确认密码我遇到了一些麻烦,所有我想分享一下我是怎么处理的。
场景是使用的基本的那些(系统自带),你需要有一个数据表(user)并且表中有一个密码字段(password),它使用 sha1、md5或其他加密方式加密用户密码。
面是它的工作流程: 当创建用户的时候密码需要加密并且保存,但当修改用户记录时如果使用同样的场景我们最终就会把用户加密过的密码再次加密,这
中文 iOS/Mac 开发博客列表
dcj3sjt126com
Blog
本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息。
本博客列表涉及的文章内容支持 定制化Google搜索,特别感谢 JeOam 提供并帮助更新。
本博客列表也提供同步更新的OPML文件(下载OPML文件),可供导入到例如feedly等第三方定阅工具中,特别感谢 lcepy 提供自动转换脚本。这里有导入教程。
js去除空格,去除左右两端的空格
蕃薯耀
去除左右两端的空格 js去掉所有空格 js去除空格
js去除空格,去除左右两端的空格
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g
SpringMVC4零配置--web.xml
hanqunfeng
springmvc4
servlet3.0+规范后,允许servlet,filter,listener不必声明在web.xml中,而是以硬编码的方式存在,实现容器的零配置。
ServletContainerInitializer:启动容器时负责加载相关配置
package javax.servlet;
import java.util.Set;
public interface ServletContainer
《开源框架那些事儿21》:巧借力与借巧力
j2eetop
框架 UI
同样做前端UI,为什么有人花了一点力气,就可以做好?而有的人费尽全力,仍然错误百出?我们可以先看看几个故事。
故事1:巧借力,乌鸦也可以吃核桃
有一个盛产核桃的村子,每年秋末冬初,成群的乌鸦总会来到这里,到果园里捡拾那些被果农们遗落的核桃。
核桃仁虽然美味,但是外壳那么坚硬,乌鸦怎么才能吃到呢?原来乌鸦先把核桃叼起,然后飞到高高的树枝上,再将核桃摔下去,核桃落到坚硬的地面上,被撞破了,于是,
JQuery EasyUI 验证扩展
可怜的猫
jquery easyui 验证
最近项目中用到了前端框架-- EasyUI,在做校验的时候会涉及到很多需要自定义的内容,现把常用的验证方式总结出来,留待后用。
以下内容只需要在公用js中添加即可。
使用类似于如下:
<input class="easyui-textbox" name="mobile" id="mobile&
架构师之httpurlconnection----------读取和发送(流读取效率通用类)
nannan408
1.前言.
如题.
2.代码.
/*
* Copyright (c) 2015, S.F. Express Inc. All rights reserved.
*/
package com.test.test.test.send;
import java.io.IOException;
import java.io.InputStream
Jquery性能优化
r361251
JavaScript jquery
一、注意定义jQuery变量的时候添加var关键字
这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下:
$loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了相同的变量名,就会郁闷至死的
二、请使用一个var来定义变量
如果你使用多个变量的话,请如下方式定义:
. 代码如下:
var page
在eclipse项目中使用maven管理依赖
tjj006
eclipse maven
概览:
如何导入maven项目至eclipse中
建立自有Maven Java类库服务器
建立符合maven代码库标准的自定义类库
Maven在管理Java类库方面有巨大的优势,像白衣所说就是非常“环保”。
我们平时用IDE开发都是把所需要的类库一股脑的全丢到项目目录下,然后全部添加到ide的构建路径中,如果用了SVN/CVS,这样会很容易就 把
中国天气网省市级联页面
x125858805
级联
1、页面及级联js
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&l