1. Mybatis介绍
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs (Plain Old Java Objects, 普通的 Java 对象)映射成数据库中的记录。
以下是 MyBatis 的主要特点:
简单易学 :MyBatis 框架结构简单,学习门槛相对较低,易于上手。
灵活性强 :MyBatis 允许自定义 SQL、存储过程以及高级映射,以满足复杂的业务需求。
降低耦合度 :MyBatis 使得应用程序与数据库实现了解耦,便于代码的模块化管理和维护。
简化数据库操作 :MyBatis 简化了 JDBC 代码的编写,减少了手动设置参数和获取结果集的工作量。
支持事务管理 :MyBatis 可以与 Spring 框架集成,利用 Spring 的事务管理功能,确保数据的完整性和一致性。
缓存机制 :MyBatis 内置了二级缓存机制,可以在一定程度上提高查询效率。
插件化支持 :MyBatis 支持自定义插件,可以对框架进行扩展,满足特定的业务需求。
支持多数据库操作 :MyBatis 可以通过配置文件或注解的方式适配不同的数据库方言,实现对多种数据库的操作。
良好的社区支持 :MyBatis 拥有庞大的用户群体和活跃的社区,可以提供丰富的参考资料和解决方案。
支持 ActiveMQ 等异步消息队列 :通过与异步消息队列集成,MyBatis 可以实现异步数据操作,提高系统的响应速度。
2. Mybatis使用
以下是如何在 Spring Boot 项目中使用 MyBatis 的详细步骤和示例
2.1 添加依赖
首先,你需要在你的 pom.xml
文件中添加 MyBatis 和 MyBatis-Spring 的依赖。
< dependencies>
< dependency>
< groupId> org.mybatis.spring.boot groupId>
< artifactId> mybatis-spring-boot-starter artifactId>
< version> 2.2.0 version>
dependency>
dependencies>
2.2 配置数据源
在 application.properties
或 application.yml
中配置数据源信息。
# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=rootpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
2.3 创建实体类
创建一个实体类来表示数据库中的表。例如,一个用户实体类 User
:
public class User {
private Long id;
private String name;
private String email;
}
2.4 创建 Mapper 接口
创建一个接口来定义对数据库的操作。使用 MyBatis 的注解来定义 SQL 语句。例如,一个 UserMapper
:
import org. apache. ibatis. annotations. * ;
import java. util. List ;
import static org. apache. ibatis. annotations. Select . * ;
public interface UserMapper {
@Select ( "SELECT * FROM users WHERE id = #{id}" )
User getUserById ( Long id) ;
@Select ( "SELECT * FROM users" )
List < User > getAllUsers ( ) ;
}
2.5 在 Service 或 Controller 中使用 Mapper
你可以在你的 Service 或 Controller 中注入 UserMapper
并使用它。例如,在一个简单的 UserService:
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. stereotype. Service ;
import java. util. List ;
import static org. springframework. transaction. annotation. Transactional ;
import static org. springframework. transaction. annotation. Propagation . * ;
@Service ( "userService" )
@Transactional ( propagation = REQUIRED )
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById ( Long id) {
return userMapper. getUserById ( id) ;
}
public List < User > getAllUsers ( ) {
return userMapper. getAllUsers ( ) ;
}
}
3. Mybatis语法
3.1 增删改查
MyBatis 在 XML 文件中定义 SQL 语句时,主要使用以下元素:
:映射器,通常作为根元素使用,它允许你为 SQL 语句定义一个命名空间。
:查询语句,用于从数据库中检索数据。
:插入语句,用于向数据库中插入数据。
:更新语句,用于更新数据库中的数据。
:删除语句,用于从数据库中删除数据。
下面是一个详细的示例,展示如何在 MyBatis 的 XML 文件中定义 SQL 语句:
< mapper namespace = " com.example.UserMapper" >
< select id = " getUserById" parameterType = " Long" resultType = " User" >
SELECT * FROM users WHERE id = #{id}
select>
< select id = " getAllUsers" resultType = " User" >
SELECT * FROM users
select>
< insert id = " insertUser" parameterType = " User" >
INSERT INTO users (name, email) VALUES (#{name}, #{email})
insert>
< update id = " updateUser" parameterType = " User" >
UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
update>
< delete id = " deleteUser" parameterType = " Long" >
DELETE FROM users WHERE id = #{id}
delete>
mapper>
在上述示例中,我们定义了一个名为 “userMapper” 的映射器,并在其中定义了多个 SQL 语句。每个 SQL 语句都有一个唯一的标识符(如 “getUserById”、“getAllUsers” 等),以及参数类型和结果类型。这些 SQL 语句可以在 Java 代码中被调用,以执行相应的数据库操作。
3.2 动态SQL
MyBatis 的动态 SQL 语法允许你在 XML 映射文件中根据参数条件动态地构建 SQL 查询。它通过使用
、
、
、
等元素来构建可变的 SQL 查询。
元素 :用于条件判断,只有当指定的条件为真时,其内部的 SQL 片段才会被包含在最终的 SQL 语句中。
示例:
< select id = " findUsers" resultType = " User" >
SELECT * FROM users
WHERE 1 = 1
< if test = " name != null" >
AND name = #{name}
if>
< if test = " email != null" >
AND email = #{email}
if>
select>
在上面的示例中,如果 name
和 email
参数不为 null
,它们会被包含在最终的 SQL 语句中。
、、 元素 :这些元素可以组合使用,类似于 Java 中的 switch-case-default 结构。
示例:
< select id = " findUsersByCriteria" resultType = " User" >
SELECT * FROM users
WHERE 1 = 1
< choose>
< when test = " name != null" >
AND name = #{name}
when>
< when test = " email != null" >
AND email = #{email}
when>
< otherwise>
AND status = 'ACTIVE'
otherwise>
choose>
select>
在上面的示例中,根据参数的条件,选择相应的查询条件。如果 name
不为 null
,则包含 name 查询条件;如果 email
不为 null
,则包含 email 查询条件;否则,包含默认的查询条件。
使用 和 元素 :这些元素可以用来处理 SQL 的 WHERE
子句,避免多余的 AND
或 OR
关键字。
示例:
< select id = " findUsers" resultType = " User" >
SELECT * FROM users
< trim prefix = " WHERE" prefixOverrides = " AND | OR " >
< if test = " name != null" > AND name = #{name} if>
< if test = " email != null" > AND email = #{email} if>
trim>
select>
在上面的示例中,如果 name
和 email
都为 null
,则最终的 SQL 将不包含 WHERE
子句;如果任一参数不为 null
,则相应的查询条件将被添加到 WHERE
子句中。使用
和
可以避免多余的 AND
或 OR
关键字。
使用 元素 :该元素用于构建更新(UPDATE)语句中的 SET 子句。它支持多个
元素和
元素,以根据提供的参数动态地构建 SET 子句。
< update id = " updateUsers" parameterType = " map" >
UPDATE users
< set>
< if test = " name != null" > name = #{name}, if>
< if test = " email != null" > email = #{email}, if>
< if test = " phone != null" > phone = #{phone}, if>
set>
WHERE id = #{id}
update>
在上面的示例中,
元素用于构建动态的 SET 子句。根据提供的参数(name
、email
和 phone
),只有非 null
的参数才会被包含在 SET 子句中。注意,我们在每个条件后面添加了一个逗号(,
),以确保生成的 SQL 是正确的。
使用 元素 :该元素用于在 SQL 中迭代集合或数组。它可以与
、
和
元素一起使用,以处理集合或数组参数。
< insert id = " insertUsers" parameterType = " list" >
INSERT INTO users (id, name, email, phone)
VALUES
< foreach collection = " list" item = " user" separator = " ," >
(#{user.id}, #{user.name}, #{user.email}, #{user.phone})
foreach>
insert>
< resultMap id = " userResultMap" type = " User" >
< id property = " id" column = " id" />
< result property = " name" column = " name" />
< result property = " email" column = " email" />
< result property = " phone" column = " phone" />
resultMap>
< select id = " getUsersByList" resultMap = " userResultMap" >
SELECT * FROM users
WHERE id IN
< foreach collection = " list" item = " userId" open = " (" separator = " ," close = " )" >
#{userId}
foreach>
select>
在上面的
示例中,
元素用于迭代集合。在
元素中,我们指定了集合的名称(list
)、每个元素的别名(user
)和元素之间的分隔符(,
)。然后,我们使用 #{user.id}
、#{user.name}
等语法来引用每个元素的属性。最后,我们将每个插入语句以逗号分隔的形式列出。
在上面的
示例中:
我们首先定义了一个结果集映射 userResultMap
,用于将查询结果映射到 User
类型的 Java 对象。
然后,在
元素中,我们使用
元素来迭代传入的集合参数 list
。
元素的属性指定了集合的名称(list
)、每个元素的别名(userId
)和元素之间的分隔符(,
)。在
元素内部,我们使用 #{userId}
来引用每个元素的属性。
最后,查询语句中的 IN
子句使用了
元素生成的子查询,以匹配传入的集合中的用户ID。
结果映射 :当数据库中的列名与 Java 对象的属性名不匹配时,或者当查询返回多个结果集时,你需要定义结果映射。这可以通过使用
元素来完成。
< resultMap id = " userResultMap" type = " User" >
< id property = " id" column = " id" />
< result property = " name" column = " name" />
< result property = " email" column = " email" />
< result property = " phone" column = " phone" />
resultMap>
< select id = " getUserById" resultMap = " userResultMap" >
SELECT id, name, email, phone FROM users WHERE id = #{id}
select>
在上面的示例中:
首先,我们定义了一个名为 userResultMap
的结果集映射。该映射指定了 Java 对象的属性与数据库表的列之间的对应关系。通过
元素指定主键列,并通过
元素指定其他列。
然后,在
元素中,我们使用 resultMap
属性引用了之前定义的结果集映射 userResultMap
。这样,查询结果将根据该映射进行映射,并将查询结果转换为 User
类型的 Java 对象。
3.3 其他
多表联接查询 :如果你需要执行涉及多个表的复杂查询,可以使用
元素来定义多表联接查询。
别名 :为了简化 SQL 语句,可以使用别名来引用表或列。例如, 可以使你使用 user.column_name
来引用列。
使用注解 :虽然 MyBatis 的 XML 配置提供了很大的灵活性,但你也可以在接口方法上使用注解来简化 SQL 语句的定义。例如,@Select
、@Insert
、@Update
和 @Delete
注解可以直接在接口方法上定义 SQL 语句。
存储过程和函数 :除了标准的 CRUD 操作,MyBatis 也支持存储过程和函数的映射。
使用表达式语言 (EL) :MyBatis 支持使用表达式语言 (EL) 来简化 SQL 语句的编写,例如 ${}
可以用于直接插入变量值。但是要注意,为了防止 SQL 注入攻击,建议仅在已知安全的上下文中使用 ${}
。通常,建议使用 #{}
来传递参数。
类型处理器 (Type Handlers) :MyBatis 支持自定义类型处理器,用于处理数据库中的特殊类型和 Java 中的特殊类型之间的转换。
事务管理 :虽然 MyBatis 本身不负责事务管理,但它与 Spring 等框架集成时可以很好地支持事务管理。
插件 (Plugins) :MyBatis 支持插件,允许你拦截和修改 MyBatis 的行为,例如在执行 SQL 之前或之后执行某些操作。
命名空间和别名 :在大型项目中,为了避免 XML 文件之间的命名冲突,可以使用命名空间和别名来组织映射器。
分页插件 :对于分页功能,MyBatis 有一些流行的分页插件,如 PageHelper
和 MyBatis-Plus
,它们提供了方便的分页功能。
日志和监控 :MyBatis 支持各种日志实现,如 SLF4J、Log4j 等,这有助于监控和调试 SQL 语句的执行。
XML 配置文件的位置 :通常,MyBatis 的 XML 配置文件位于 src/main/resources/mybatis/mapper
目录下,与对应的接口位于同一包中。
高级特性 :MyBatis 还支持高级特性,如缓存、延迟加载等。这些通常需要根据具体需求进行配置。
你可能感兴趣的:(知识库,spring,boot,mybatis,tomcat,java)
[JavaWeb]搜索表单区域
亓才孓
css css3 前端 java web
一.注意事项设置外边距:margin:(参数可省去部分)上下左右二.源代码Tlias智能学习辅助系统/*导航栏样式*/.navbar{background-color:#b5b3b3;/*灰色背景*/display:flex;/*flex弹性布局*/justify-content:space-between;/*左右对齐*/padding:10px;/*内边距*/align-items:cente
Vue.js 组件开发:从基础到进阶
学不完了是吧
Vue vue.js
Vue.js是一个渐进式的JavaScript框架,其核心理念之一就是基于组件的开发。组件可以极大地提高代码的复用性、可维护性和可测试性。本篇文章将从基础到进阶,带你了解Vue.js的组件开发方法和最佳实践。什么是组件?在Vue.js中,组件是一个具有独立功能的可复用模块。组件可以包含HTML模板、CSS样式和JavaScript逻辑。通过组件化开发,可以将复杂的页面分解为多个易于管理的部分。组件
JavaScript网页设计案例:响应式动态购物车
学不完了是吧
js javascript
在现代网页开发中,购物车是电子商务网站的重要功能之一。通过JavaScript,我们可以实现一个响应式动态购物车,提供用户友好的体验,并展示前端开发的核心能力。案例需求我们的购物车需要实现以下功能:动态添加商品:用户可以从商品列表中选择并添加商品到购物车。实时更新:购物车的商品数量、价格和总金额自动更新。修改商品数量:用户可以调整购物车中商品的数量。移除商品:用户可以从购物车中移除商品。结算功能:
Spring ObjectFactory:不只是工厂,更是Bean生命周期的掌舵者
码农技术栈
spring cloud spring spring boot 后端 微服务
在Spring中,ObjectFactory就像是一个“对象工厂”,它的主要作用是延迟加载和创建对象。想象一下,你正在开发一个应用,其中有些对象在启动时并不需要立即创建,而是等到真正需要使用时再创建。这时候,如果一开始就创建所有对象,不仅会浪费资源,还可能影响应用的启动速度。ObjectFactory就是为了解决这个问题而存在的。它允许你在需要对象时,再通过调用getObject()方法来创建对象
w184校园网上店铺的设计与实现
栗豆包
java spring boot 后端 java spring tomcat
作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板,帮助书写开题报告。作者完整代码目录供你选择:《Springboot网站项目》400套《ssm网站项目》800套《小程序项目》300套《App项目》500套《Python网站项目
盘点JavaScript中所有声明变量的方式及特性
李游Leo
前端 编程语言 ECMAScript javascript 开发语言 ecmascript
在JavaScript中,变量的定义是编程的基础,而JavaScript提供了多种灵活的方式来定义变量。本文将详细盘点JavaScript中所有变量定义的方式,包括传统的var、let、const,以及通过this、window、top等对象定义变量的方式,并结合代码示例进行说明。一、传统变量定义方式var语法:varvariable_name[=initial_value];特性:函数作用域或全
this、self、window、top 在 JavaScript 中的区别深入研究
李游Leo
ECMAScript 编程语言 前端 javascript 开发语言 ecmascript
在JavaScript开发中,this、self、window、top是四个常用的概念,它们在不同的上下文中有着不同的用途和含义。理解它们的区别对于编写健壮的JavaScript代码至关重要。本文将详细解释这四个概念的区别,并通过代码示例进行验证。一、this的含义与用法基础概念this是一个关键字,它在JavaScript中指向当前执行上下文的对象。this的值取决于函数的调用方式。例如,在全局
JavaScript原型链与继承:优化与扩展的深度探索
李游Leo
ECMAScript 编程语言 前端 原型模式 javascript 开发语言
在JavaScript的世界里,万物皆对象,而每个对象都有一个与之关联的原型对象,这就构成了原型链的基础。原型链,简单来说,是一个由对象的原型相互连接形成的链式结构。每个对象都有一个内部属性[[Prototype]](在大多数浏览器中可以通过__proto__属性访问,不过__proto__是非标准属性,更推荐使用Object.getPrototypeOf()方法来获取原型),它指向该对象的原型对
编程语言中的常见Bug及解决方案
李游Leo
前端 Python 编程语言 bug javascript php python go
在编程过程中,不同语言有其独特的特性和挑战,这也导致了各种常见Bug的出现。本文将总结几种主流编程语言中的常见Bug,包括JavaScript、Python、C/C++、Java和Go,并提供相应的解决方案和案例。一、JavaScript中小数相加精度不准确的Bug在JavaScript中,进行小数相加时,由于浮点数的精度问题,可能会导致结果不准确。例如:letadd1=0.1+0.2;conso
JavaScript电子网页时钟效果(canvas版)
李游Leo
前端 javascript ecmascript 前端
先上代码:分部翻页电子时钟body{display:flex;justify-content:center;align-items:center;height:100vh;background-color:#333;margin:0;}canvas{background-color:#000;border:5pxsolid#555;}constcanvas=document.getElementB
盘点原生JavaScript中直接触发事件的方式
李游Leo
前端 javascript 开发语言 ecmascript
JavaScript提供了多种方式来直接触发事件,无论是在用户交互、程序逻辑处理或是数据更新时。本文将全面探讨原生JavaScript中各种事件触发方式,并通过深入的技术案例分析,帮助开发者掌握这些方法在实际开发中的应用。使用dispatchEvent原生JavaScript中触发事件的核心方法是dispatchEvent。这个方法允许开发者为任何DOM元素触发几乎任何类型的事件,包括但不限于点击
CSS特效 —— 蛇形左右扭动的效果
DTcode7
HTML网站开发 # 前端基础入门三大核心之CSS HTML CSS web css3 网页开发
CSS特效——蛇形左右扭动的效果引言基础概念示例一:基本的蛇形动画HTML结构CSS样式代码解释示例二:增加动画的复杂度CSS样式代码解释示例三:多条蛇形元素HTML结构CSS样式代码解释示例四:改变蛇形元素的形状CSS样式代码解释示例五:加入碰撞效果CSS样式代码解释功能使用思路思路一:控制动画的重复次数思路二:调整动画方向思路三:使用JavaScript控制动画实际开发中的使用技巧自行拓展内容
构建 Java Web 应用程序:实现简单的增删查改(Mysql)
F2022697486
java 前端 mysql
简介本教程将指导您如何使用JavaServlet和JSP技术构建一个简单的Web应用程序。该应用程序将包括用户注册、登录、注销(删除用户信息)、修改密码以及根据性别查询用户信息等功能。我们将使用MySQL数据库来存储用户数据。环境准备JavaDevelopmentKit(JDK):安装JDK8或更高版本。IDE:推荐使用IntelliJIDEA或Eclipse。Servlet容器:如ApacheT
Java 分布式与微服务架构:现代企业应用开发的新范式
来恩1003
Java 从入门到精通 架构 java 分布式
Java学习资料Java学习资料Java学习资料一、引言在当今数字化时代,企业应用面临着越来越高的性能、可扩展性和灵活性要求。传统的单体架构在应对大规模用户访问、复杂业务逻辑和频繁的功能迭代时,逐渐暴露出诸多问题。Java分布式与微服务架构应运而生,为解决这些问题提供了有效的方案。它们使得企业能够构建出更加高效、灵活和可维护的应用系统。二、分布式架构基础2.1分布式架构的概念分布式架构是将一个完整
spring-transaction
Think_Higher
Java生态圈 spring java mvc
文章目录配置解析TransactionalEventListener主要组件注册代理类生成Advisor寻找运行调用链生成调用链调用TransactionInterceptor事务管理器DataSource事务开启是否已存在事务事务已存在PROPAGATION_NEVERPROPAGATION_NOT_SUPPORTED事务挂起PROPAGATION_REQUIRES_NEWPROPAGATION
MyBatis概述——一个优秀的持久层框架
AI天才研究院
Python实战 自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
作者:禅与计算机程序设计艺术1.简介MyBatis是一款开源的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和参数处理,将XML配置化结果映射成Java对象并通过接口形式传入到业务层,使得开发人员更关注于业务逻辑而不是数据库相关的事务控制和重复代码等低级事务性工作。MyBatis的定位就是将Java对象和关系数据库的数据对接起来,做到自动化crud
FactoryBean:Spring容器中的超级工厂,你了解多少?
码农技术栈
spring cloud spring spring boot 微服务 java
想象你有一个特殊的“玩具定制工厂”(FactoryBean),这个工厂不仅仅按照固定的“生产指南”(接口)来制造玩具(Bean),它还能根据顾客的特殊需求来定制玩具。普通的“玩具生产指南”(BeanFactory)只能制造标准化的玩具,但“玩具定制工厂”(FactoryBean)却更加灵活。它能够理解复杂的制造指令,比如:“我要一个能根据输入参数变化而变化的玩具”,“我要一个延迟到顾客下单时才制造
Java 六边形架构 – BABAL
Java_ttcd
java 架构 servlet
一、概述在本教程中,我们将使用HexagonalArchitecture的原理,使用CLI使用者实现一个简单的JavaCMS应用程序。主要思想是尽可能保持业务逻辑分离,并使用SOLID原则中的“D”依赖反转原则来防止层之间的耦合。2.什么是六边形架构它是一种围绕业务逻辑设计软件应用程序架构并将其与其他层解耦的方法。解耦是通过使用端口和适配器来处理的,这就是为什么HexagonalArchitect
Spring框架AOP基本使用指南
未来并未来
spring java 后端
AOP(Aspect-OrientedProgramming,面向切面编程)是Spring框架中的一个重要特性,它允许开发者将横切关注点(如日志记录、事务管理、安全性等)从业务逻辑中分离出来,从而提高代码的模块化和可维护性。本文将详细介绍Spring框架中AOP的基本使用,包括如何定义切面、通知、切点以及如何在Spring应用中配置AOP。1.AOP基本概念在开始使用SpringAOP之前,我们需
浅析Java反射机制
未来并未来
java 开发语言
一、什么是反射?反射(Reflection)是Java语言的一种特性,它允许程序在运行时取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。简单来说,反射就是动态地获取类信息、创建对象、调用方法、访问属性等操作。二、反射的核心类库Java反射机制主要涉及以下四个核心类库:Class类:反射的核心类,用于表示类的相关信息。Constructor类:表示类的构造方法。Method类:表示类的方
如何在 Typecho 中实现 Joe 编辑器标签自动填充
6v6博客
编辑器 android
如何在Typecho中实现Joe编辑器标签自动填充在Typecho的文章编辑过程中,如果你使用Joe编辑器,可能会希望输入#标签后能自动提取并填充到文章的标签输入框中,以提高工作效率。接下来,我们将详细介绍如何通过开发一个Typecho插件来实现这一功能。6v6博客地址:6v6.ren一、功能实现原理这个功能的实现依赖于JavaScript来监听Joe编辑器中的输入事件,通过正则表达式提取出#开头
通过反射搭建简易的Servlet层自动化映射参数并调用Service层业务方法的框架
未来并未来
servlet 自动化 运维
在现代JavaWeb开发中,Servlet作为处理HTTP请求的核心组件,通常需要手动解析请求参数并调用相应的Service层方法。这种方式虽然直观,但随着业务逻辑的复杂化,代码量会迅速增加,维护成本也随之上升。为了提高开发效率,我们可以通过反射机制搭建一个简易的框架,实现Servlet层参数的自动化映射和Service层方法的自动调用。1.框架设计思路我们的目标是实现以下功能:自动化参数映射:将
刷题前必学!二叉树!用JavaScript学数据结构与算法
JavaScript算法与数据结构-HowieCong务必要熟悉JavaScript使用再来学!一、树是什么?数据结构中的树,对于现实世界中的树简化——树根抽象为“根节点”,树枝抽象为“边”,树枝的两个端点抽象为“结点”,树叶抽象为“叶子结点”计算机中的树如下:二、树的重点树的层次计算规则:根结点所在的那一层为第一层,其子节点为第二层,以此类推结点和树的高度计算规则:叶子结点高度为1,每向上一层
Java反射和动态代理(详解)
何似在人间575
java 开发语言
1、反射1.1反射的概述是在运行状态中,不用创建对象就能够调用任意一个类的所有属性和方法;1.2反射作用反射都是从class字节码文件中获取的内容。获取class字节码文件的对象利用反射如何获取构造方法(创建对象)利用反射如何获取成员变量(赋值,获取值)利用反射如何获取成员方法(运行)1.3获取字节码文件对象的方式Class这个类里面的静态方法forName(“全类名”)(最常用)通过class属
Spring MVC 框架:构建高效 Java Web 应用的利器
来恩1003
Java 从入门到精通 java spring mvc
Java学习资料Java学习资料Java学习资料一、引言在JavaWeb开发领域,SpringMVC框架是一颗耀眼的明星。它作为Spring框架家族的重要成员,为开发者提供了一套强大而灵活的解决方案,用于构建Web应用程序。SpringMVC遵循模型-视图-控制器(MVC)设计模式,将业务逻辑、数据展示和用户交互进行了有效的分离,使得代码结构清晰、易于维护和扩展。二、MVC设计模式概述2.1基本概
SpringBoot+Vue.js协同过滤算法美食推荐小程序
wqq_992250277
java java
摘要伴随着我国社会的发展,人民生活质量日益提高。于是对各种需求进行规范而严格是十分有必要的,所以许许多多的微信小程序应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套协同过滤算法美食推荐小程序,帮助美食推荐进行美食分类、美食信息、订单信息等繁琐又重复的工作,提高工作效率的同时,也减轻了管理者的压力。本论文的主要内容包括:第一,研究分析当下主流的Uni-weixin技术,结
springboot
sunlichao123
1.新建一个springboot的项目1:在线创建一个springboot的项目网址:https://start.spring.io2:在本地修改pom.xml的文件即可,并建立相应的文件目录的结构。springboot的文件的结构:src|main|java|resources|static存放静态的资源|templates存放模板的文件相当于是jsp|application.propertie
Spring Boot中使用Micrometer进行指标监控
wx_tangjinjinwx
spring boot 后端 java
SpringBoot中使用Micrometer进行指标监控大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊一聊如何在SpringBoot中使用Micrometer进行指标监控。1.引言在现代应用中,监控是确保系统健康和性能的关键。Micrometer是一个应用度量库,专为JVM应用设计,支持多种监控系统,如Prometh
【自我提升】一、Hyperledger Fabric 概念梳理
记录菌
hyperledger fabric hyperledger
写在前面:最近因为业务需要,开始学习HyperledgerFabric了,做java全栈工程师可真难搞。现在算是啥类型的都在涉及了,现在这个技术啥都不懂,就先开个学习专栏,记录记录。顺带也给各位道友参考参考。目录1.什么是hyperledger2.什么是HyperledgerFabric2.1主要特点2.2应用场景3.关键名词4.通道概念4.1通道的关键特性如下:4.2通道的工作机制:5.步骤简单
阿里服务器安装Tomcat后./shutdown.sh报错
Jason_Wzlong
Java学习之路 开发中遇到的错误 成长
错误描述:[root@iz2zeh5l0j8vxrz3sshglqzbin]#./shutdown.sh/usr/local/tomcat/apache-tomcat-7.0.90/bin/catalina.sh:line110:-Xmx1024m:commandnotfoundUsingCATALINA_BASE:/usr/local/tomcat/apache-tomcat-7.0.90Usi
java工厂模式
3213213333332132
java 抽象工厂
工厂模式有
1、工厂方法
2、抽象工厂方法。
下面我的实现是抽象工厂方法,
给所有具体的产品类定一个通用的接口。
package 工厂模式;
/**
* 航天飞行接口
*
* @Description
* @author FuJianyong
* 2015-7-14下午02:42:05
*/
public interface SpaceF
nginx频率限制+python测试
ronin47
nginx 频率 python
部分内容参考:http://www.abc3210.com/2013/web_04/82.shtml
首先说一下遇到这个问题是因为网站被攻击,阿里云报警,想到要限制一下访问频率,而不是限制ip(限制ip的方案稍后给出)。nginx连接资源被吃空返回状态码是502,添加本方案限制后返回599,与正常状态码区别开。步骤如下:
java线程和线程池的使用
dyy_gusi
ThreadPool thread Runnable timer
java线程和线程池
一、创建多线程的方式
java多线程很常见,如何使用多线程,如何创建线程,java中有两种方式,第一种是让自己的类实现Runnable接口,第二种是让自己的类继承Thread类。其实Thread类自己也是实现了Runnable接口。具体使用实例如下:
1、通过实现Runnable接口方式 1 2
Linux
171815164
linux
ubuntu kernel
http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.1.2-unstable/
安卓sdk代理
mirrors.neusoft.edu.cn 80
输入法和jdk
sudo apt-get install fcitx
su
Tomcat JDBC Connection Pool
g21121
Connection
Tomcat7 抛弃了以往的DBCP 采用了新的Tomcat Jdbc Pool 作为数据库连接组件,事实上DBCP已经被Hibernate 所抛弃,因为他存在很多问题,诸如:更新缓慢,bug较多,编译问题,代码复杂等等。
Tomcat Jdbc P
敲代码的一点想法
永夜-极光
java 随笔 感想
入门学习java编程已经半年了,一路敲代码下来,现在也才1w+行代码量,也就菜鸟水准吧,但是在整个学习过程中,我一直在想,为什么很多培训老师,网上的文章都是要我们背一些代码?比如学习Arraylist的时候,教师就让我们先参考源代码写一遍,然
jvm指令集
程序员是怎么炼成的
jvm 指令集
转自:http://blog.csdn.net/hudashi/article/details/7062675#comments
将值推送至栈顶时 const ldc push load指令
const系列
该系列命令主要负责把简单的数值类型送到栈顶。(从常量池或者局部变量push到栈顶时均使用)
0x02 &nbs
Oracle字符集的查看查询和Oracle字符集的设置修改
aijuans
oracle
本文主要讨论以下几个部分:如何查看查询oracle字符集、 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题。
一、什么是Oracle字符集
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货
png在Ie6下透明度处理方法
antonyup_2006
css 浏览器 Firebug IE
由于之前到深圳现场支撑上线,当时为了解决个控件下载,我机器上的IE8老报个错,不得以把ie8卸载掉,换个Ie6,问题解决了,今天出差回来,用ie6登入另一个正在开发的系统,遇到了Png图片的问题,当然升级到ie8(ie8自带的开发人员工具调试前端页面JS之类的还是比较方便的,和FireBug一样,呵呵),这个问题就解决了,但稍微做了下这个问题的处理。
我们知道PNG是图像文件存储格式,查询资
表查询常用命令高级查询方法(二)
百合不是茶
oracle 分页查询 分组查询 联合查询
----------------------------------------------------分组查询 group by having --平均工资和最高工资 select avg(sal)平均工资,max(sal) from emp ; --每个部门的平均工资和最高工资
uploadify3.1版本参数使用详解
bijian1013
JavaScript uploadify3.1
使用:
绑定的界面元素<input id='gallery'type='file'/>$("#gallery").uploadify({设置参数,参数如下});
设置的属性:
id: jQuery(this).attr('id'),//绑定的input的ID
langFile: 'http://ww
精通Oracle10编程SQL(17)使用ORACLE系统包
bijian1013
oracle 数据库 plsql
/*
*使用ORACLE系统包
*/
--1.DBMS_OUTPUT
--ENABLE:用于激活过程PUT,PUT_LINE,NEW_LINE,GET_LINE和GET_LINES的调用
--语法:DBMS_OUTPUT.enable(buffer_size in integer default 20000);
--DISABLE:用于禁止对过程PUT,PUT_LINE,NEW
【JVM一】JVM垃圾回收日志
bit1129
垃圾回收
将JVM垃圾回收的日志记录下来,对于分析垃圾回收的运行状态,进而调整内存分配(年轻代,老年代,永久代的内存分配)等是很有意义的。JVM与垃圾回收日志相关的参数包括:
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-Xloggc
-XX:+PrintGC
通
Toast使用
白糖_
toast
Android中的Toast是一种简易的消息提示框,toast提示框不能被用户点击,toast会根据用户设置的显示时间后自动消失。
创建Toast
两个方法创建Toast
makeText(Context context, int resId, int duration)
参数:context是toast显示在
angular.identity
boyitech
AngularJS AngularJS API
angular.identiy 描述: 返回它第一参数的函数. 此函数多用于函数是编程. 使用方法: angular.identity(value); 参数详解: Param Type Details value
*
to be returned. 返回值: 传入的value 实例代码:
<!DOCTYPE HTML>
java-两整数相除,求循环节
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class CircleDigitsInDivision {
/**
* 题目:求循环节,若整除则返回NULL,否则返回char*指向循环节。先写思路。函数原型:char*get_circle_digits(unsigned k,unsigned j)
Java 日期 周 年
Chen.H
java C++ c C#
/**
* java日期操作(月末、周末等的日期操作)
*
* @author
*
*/
public class DateUtil {
/** */
/**
* 取得某天相加(减)後的那一天
*
* @param date
* @param num
*
[高考与专业]欢迎广大高中毕业生加入自动控制与计算机应用专业
comsci
计算机
不知道现在的高校还设置这个宽口径专业没有,自动控制与计算机应用专业,我就是这个专业毕业的,这个专业的课程非常多,既要学习自动控制方面的课程,也要学习计算机专业的课程,对数学也要求比较高.....如果有这个专业,欢迎大家报考...毕业出来之后,就业的途径非常广.....
以后
分层查询(Hierarchical Queries)
daizj
oracle 递归查询 层次查询
Hierarchical Queries
If a table contains hierarchical data, then you can select rows in a hierarchical order using the hierarchical query clause:
hierarchical_query_clause::=
start with condi
数据迁移
daysinsun
数据迁移
最近公司在重构一个医疗系统,原来的系统是两个.Net系统,现需要重构到java中。数据库分别为SQL Server和Mysql,现需要将数据库统一为Hana数据库,发现了几个问题,但最后通过努力都解决了。
1、原本通过Hana的数据迁移工具把数据是可以迁移过去的,在MySQl里面的字段为TEXT类型的到Hana里面就存储不了了,最后不得不更改为clob。
2、在数据插入的时候有些字段特别长
C语言学习二进制的表示示例
dcj3sjt126com
c basic
进制的表示示例
# include <stdio.h>
int main(void)
{
int i = 0x32C;
printf("i = %d\n", i);
/*
printf的用法
%d表示以十进制输出
%x或%X表示以十六进制的输出
%o表示以八进制输出
*/
return 0;
}
NsTimer 和 UITableViewCell 之间的控制
dcj3sjt126com
ios
情况是这样的:
一个UITableView, 每个Cell的内容是我自定义的 viewA viewA上面有很多的动画, 我需要添加NSTimer来做动画, 由于TableView的复用机制, 我添加的动画会不断开启, 没有停止, 动画会执行越来越多.
解决办法:
在配置cell的时候开始动画, 然后在cell结束显示的时候停止动画
查找cell结束显示的代理
MySql中case when then 的使用
fanxiaolong
casewhenthenend
select "主键", "项目编号", "项目名称","项目创建时间", "项目状态","部门名称","创建人"
union
(select
pp.id as "主键",
pp.project_number as &
Ehcache(01)——简介、基本操作
234390216
cache ehcache 简介 CacheManager crud
Ehcache简介
目录
1 CacheManager
1.1 构造方法构建
1.2 静态方法构建
2 Cache
2.1&
最容易懂的javascript闭包学习入门
jackyrong
JavaScript
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
下面就是我的学习笔记,对于Javascript初学者应该是很有用的。
一、变量的作用域
要理解闭包,首先必须理解Javascript特殊
提升网站转化率的四步优化方案
php教程分享
数据结构 PHP 数据挖掘 Google 活动
网站开发完成后,我们在进行网站优化最关键的问题就是如何提高整体的转化率,这也是营销策略里最最重要的方面之一,并且也是网站综合运营实例的结果。文中分享了四大优化策略:调查、研究、优化、评估,这四大策略可以很好地帮助用户设计出高效的优化方案。
PHP开发的网站优化一个网站最关键和棘手的是,如何提高整体的转化率,这是任何营销策略里最重要的方面之一,而提升网站转化率是网站综合运营实力的结果。今天,我就分
web开发里什么是HTML5的WebSocket?
naruto1990
Web html5 浏览器 socket
当前火起来的HTML5语言里面,很多学者们都还没有完全了解这语言的效果情况,我最喜欢的Web开发技术就是正迅速变得流行的 WebSocket API。WebSocket 提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看6个HTML5教程介绍里 的 WebSocket API:它可用于客户端、服
Socket初步编程——简单实现群聊
Everyday都不同
socket 网络编程 初步认识
初次接触到socket网络编程,也参考了网络上众前辈的文章。尝试自己也写了一下,记录下过程吧:
服务端:(接收客户端消息并把它们打印出来)
public class SocketServer {
private List<Socket> socketList = new ArrayList<Socket>();
public s
面试:Hashtable与HashMap的区别(结合线程)
toknowme
昨天去了某钱公司面试,面试过程中被问道
Hashtable与HashMap的区别?当时就是回答了一点,Hashtable是线程安全的,HashMap是线程不安全的,说白了,就是Hashtable是的同步的,HashMap不是同步的,需要额外的处理一下。
今天就动手写了一个例子,直接看代码吧
package com.learn.lesson001;
import java
MVC设计模式的总结
xp9802
设计模式 mvc 框架 IOC
随着Web应用的商业逻辑包含逐渐复杂的公式分析计算、决策支持等,使客户机越
来越不堪重负,因此将系统的商业分离出来。单独形成一部分,这样三层结构产生了。
其中‘层’是逻辑上的划分。
三层体系结构是将整个系统划分为如图2.1所示的结构[3]
(1)表现层(Presentation layer):包含表示代码、用户交互GUI、数据验证。
该层用于向客户端用户提供GUI交互,它允许用户