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.bootgroupId >
< artifactId> mybatis-spring-boot-starterartifactId >
< version> 2.2.0version >
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)
helm学习第四篇-微服务组件的加入
Wade_Crab
java-rocketmq 微服务 spring boot 云计算 kubernetes
微服务的组件也放进去—向外扩张要将Nacos服务添加到你已经包含了SpringBoot、Redis、MySQL和RocketMQ的HelmChart中,你可以按照以下步骤操作:注意!!:nacos好像只有helm文件的github仓库,没有helm的包地址仓库。所以一会思路:找到nacos的github仓库:nacos仓库修改values.yaml内容1.添加NacosHelmChart依赖首先,
SpringBoot集成EasyExcel实现Excel文件导入/出
码届艺术家
spring boot excel
一,添加依赖com.alibabaeasyexcel最新版本org.projectlomboklombokorg.springframework.bootspring-boot-starter-logging二,创建实体类@ExcelProperty的属性说明value按列名去匹配Excel数据,如果名字重复,会导致只有一个实体类字段读取到数据index按列的下标去匹配Excel数据不建议inde
Springboot使用Mongo数据库实现文件的上传下载预览等服务接口
泰山AI
技术交流 spring boot 数据库 后端 mongo gridFS JAVA
MongoDBGridFS简介MongoDBGridFS是一个用于存储和检索大型文件的规范,它允许在MongoDB数据库中存储超过16MB的文件,如图片、音频、视频等。GridFS通过将文件分割成多个小的chunk(文件片段),每个chunk通常为255KB,并将这些chunk存储在MongoDB的集合中,从而解决了MongoDB对单个文档大小的限制。以下是GridFS的详细介绍:GridFS的基
servlet的过滤器filter和springmvc的拦截器Interceptor
后台技术汇
servlet
背景Servlet的过滤器(Filter)和SpringMVC的拦截器(Interceptor)都是用于在请求处理过程中对请求进行拦截和处理的组件。它们之间的主要区别在于它们的作用范围和使用方式。作用范围Filter:过滤器是基于Servlet规范的,它可以在整个Web应用程序中对所有请求进行拦截和处理。过滤器可以用于处理诸如身份验证、日志记录、数据压缩等通用任务。Interceptor:拦截器是
helm学习第三篇--结合 springboot 单做
Wade_Crab
java-rocketmq spring boot redis kubernetes
创建一个springboot项目放到里面去—开山立派要将你的SpringBoot项目代码与Redis、MySQL和RocketMQ组合到同一个HelmChart中,你可以按照以下步骤进行操作:1.准备SpringBoot项目确保你的SpringBoot项目已经打包为Docker镜像。如果还没有创建Docker镜像,可以在SpringBoot项目的根目录下创建一个Dockerfile,并使用以下内容
从打开电源到开机操作系统启动的全过程
hkhl_235
操作系统 操作系统 开机 启动
从打开电源到开始操作,计算机的启动是一个非常复杂的过程我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示……这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。零、boot的含义先问一个问题,”启动”用英语怎么说?回答是boot。可是,boot原来的意思是靴子,”启动”与靴子有什么关系呢?原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语:“pullone
Java实现十大排序算法
Mojitocean
程序猿日常 java 排序算法 算法
时间/空间复杂度对比:n表示输入元素的数量,k表示元素的取值范围大小。稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面。时间复杂度:对排序数据的总操作次数。反映当n变化时,操作次数呈现什么规律。空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。排序算法时间复杂度-最好时间复杂度-最差时
ES6--《每日学习》
Oswaldhs
es6 学习 javascript
一、ES6相关介绍1.1、什么是ES61995年的美国,有一家名为netscape(网景)的公司打造了一款主要用于check验证的脚本语言,而恰在此时,Sun公司的java语言火的一塌糊涂,netscape公司为蹭其热度,便将该脚本语言命名为JavaScript。不料JavaScript居然被越来越多的人使用,后效仿大秦的货币统一政策将其提交给国际标准组织ECMA。该组织发布的标准被称做ECMAS
Java LinkedList 深入解析
wjs2024
开发语言
JavaLinkedList深入解析概述JavaLinkedList是Java集合框架中的一部分,实现了List接口和Deque接口。与ArrayList相比,LinkedList在插入和删除操作上提供了更好的性能,但在随机访问元素方面则相对较慢。LinkedList由一系列的双向链表节点组成,每个节点都包含数据和两个指针,分别指向前一个节点和后一个节点。主要特性双向链表结构LinkedList的
There is no getter for property named 'sn' in 'class java.lang.String'
在下小保
结果selectidfromtableandsn=#{sn}报错的情况只有一个String参数用了<where<iftest标签,没用_parameter没用<iftest,也没用wheresn=#{value}
Vue.js项目构建
彭于晏“
vue.js
Vue.js是一个流行的JavaScript框架,用于构建用户界面。下面是使用Vue.js构建项目的详细方法:安装Vue.js:首先,你需要在项目中安装Vue.js。你可以通过在终端中运行以下命令来安装Vue.js:npminstallvue创建Vue实例:在项目的入口文件中,创建一个Vue实例。你可以使用以下代码创建一个简单的Vue实例:importVuefrom'vue';newVue({el
sqllabs游戏
Vanilla-li
web安全
文章目录总体思路:less-1:less-2:less-3:less-4:less-5:less-6:less-7:less-8:布尔盲注less-9:时间盲注less-21:less-24:总体思路:1、第一件事情逃脱出单引号的控制闭合单引号2、单双引号需要成对出现在pythonphpJava中3、2个办法继续把多出来的单引号闭合,要么注释掉单引号4、MySQL注释符–#/***/*/url会编
Java刷题随笔---137.只出现一次的数字Ⅱ
Dunponsion
Leetcode刷题随笔 java leetcode 算法
137.只出现一次的数字II-力扣(LeetCode)(leetcode-cn.com)难度:中等题目描述:给你一个整数数组nums,除某个元素仅出现一次外,其余每个元素都恰出现三次。请你找出并返回那个只出现了一次的元素。分析:分析:1-这类题可以简单的使用HashMap进行存储,key值为数组元素,value值为元素出现的次数,最后遍历一遍,输出value为1的key即可。2-进阶方法可以使用位
Vue3 + Axios双Token刷新解决方案
洛*璃
vue.js 前端 javascript Axios 双token刷新
在现代前端开发中,使用API进行数据交互时,我们常常会遇到身份认证的问题。为了提高安全性,许多应用采用了Token机制,如JWT(JSONWebToken)来管理用户的身份状态。本文将介绍如何在Vue3项目中使用Axios实现双Token刷新机制,确保用户体验流畅的同时提高安全性。前置条件本文只针对Vue3前端所编写的双Token刷新解决方案,关于SpringCloud微服务项目的双Token刷新
bootstramp下拉列表-坑
bubbleoO0
对bootstramp的下拉列表进行数据返填。需要使用selectpicker方法来设置$('#update-complete').selectpicker('val',Data.complete);下列方法无效设置selected为true设置val为对应属性值
第 004 期 提高页面渲染速度的 3 个 CSS 技巧
前端GoGoGo7
提到提高页面渲染速度,我们第一想到的是优化JavaScript。其实通过优化CSS也能提高页面渲染速度。优化方案1.延时渲染屏幕外的内容-content-visibility:auto很长的页面会有大量的内容在屏幕外。如果只渲染屏幕内的内容,屏幕外的内容在出现时才渲染,能大大的节约渲染时间。CSSContainmentModuleLevel2模块新增了content-visibility属性。这个
js字符串方法速览---字符串的静态方法,实例方法和属性合集,各包含一个示例
I_am_shy
javascript 前端 开发语言
tips:本文仅作为查找和基本使用的展示,需要深入了解这些方法的使用请参考:String-JavaScript|MDN(mozilla.org)可以通过目录快速锁定需要查找的方法和查看它的使用目录tip:新建一个字符串字符串实例属性字符串静态方法String.fromCharCode(...nums)String.fromCodePoint(...nums)String.raw({raw:arr}
SpringBoot项目中mybatis执行sql很慢的排查改造过程(Interceptor插件、fetchSize、隐式转换等)
星月昭铭
java mybatis SpringBoot spring boot mybatis sql java
刚入职公司,就发现公司项目跑sql特别慢,差不多一万条数据插入到数据库要5秒以上(没有听错,就是这个速度),查询修改删除也是特别慢。直到22年年底实在是受不了了,我就去排查了一下。用的是Oracle数据库,mybatis、mybatisplus,其中mybatis是引入的平台的依赖。平台封装了一些工具和插件。做个对照试验首先为了做对照试验,自己新建了一个SpringBoot项目T,里面引入了官方的
JavaScript防抖函数
喂!大掌柜
javascript 开发语言 ecmascript
在JavaScript中,你可以使用函数闭包来创建一个防抖函数。下面是一个简单的实现示例:functiondebounce(func,delay){lettimeoutId;returnfunction(){clearTimeout(timeoutId);timeoutId=setTimeout(func,delay);};}使用这个防抖函数时,你需要将需要防抖的函数和延迟时间作为参数传递给deb
停止在 TypeScript 中使用“any”类型
喂!大掌柜
typescript typescript javascript 前端 前端框架
有更好的TS类型和接口可用。为什么你不应该在TypeScript中使用“any”类型TypeScript是Web开发人员最常用的编程语言之一。它具有出色的语言功能,可让您轻松设计可扩展的应用程序。因此,开发人员倾向于为他们的项目选择TypeScript而不是JavaScript。但是,在使用TypeScript时,我们需要避免一些常见错误,以最大限度地发挥其功能。例如,过度使用any类型是我们经常
深入理解Spring Boot的开箱即用与自动装配特性
拾柒mm
开发语言 spring boot java
在SpringBoot中,“开箱即用”和“自动装配”是两个重要的特性,它们大大简化了应用程序的开发和维护。通过这些特性,开发者可以专注于业务逻辑,而不必陷入繁琐的配置中。1.开箱即用特性1.1开箱即用的概念“开箱即用”意味着开发者可以通过最少的配置,快速启动和运行一个Spring应用程序。SpringBoot通过提供一系列的“Starter”依赖和自动配置功能,能够快速构建应用,而无需手动配置大量
Android 12.0 App全屏时通过系统属性控制上划下拉是否显示虚拟导航栏和状态栏
VaporRuby
android
遇到问题厂测App触摸屏测试,需要全屏显示,禁止出现状态栏和导航栏,以免影响测试。参考资料https://zhuanlan.zhihu.com/p/440810585Android12系统源码_SystemUI(九)WindowInsetsController源码解析-CSDN博客解决方案1、framework修改点+++b/frameworks/base/services/core/java/c
常用的 Spring Boot 注解及其作用
chenwenxing228
SpringBoot spring boot 后端 java
1、常用注解介绍:SpringBoot提供了许多注解来简化开发,并帮助开发者在Spring应用中实现各种功能。以下是一些常用的SpringBoot注解及其作用:@SpringBootApplication:作用:用于标识主启动类,通常位于SpringBoot应用的入口类上。功能:该注解整合了三个常用注解:@Configuration、@EnableAutoConfiguration和@Compon
如何在小程序中实现页面之间的返回
那维莱特
小程序 apache
在小程序中实现页面之间的返回,通常有以下几种方法,这些方法各有特点,适用于不同的场景:1.使用wx.navigateBack方法描述:wx.navigateBack是微信小程序中用于关闭当前页面,返回上一页面或多级页面的API。使用方式:javascript复制代码wx.navigateBack({delta:1//表示返回上一级,如果delta大于1则表示返回多级});特点:可以根据delta的
android11 状态栏导航栏控制显示隐藏
Optimus●Prime
android frameworks 状态栏控制 statusbar navigationbar 导航栏控制
目录1.添加Intent广播2.设置全局KEY3.设置默认开关4.配置默认状态保存5.状态栏关闭时禁止下拉6.根据默认值设置显示隐藏7.配置广播控制8.使用方式通过自定义广播的形式将系统的状态栏,导航栏显示隐藏,分别控制,也可以在配置文件中默认设置显示隐藏。(效果图)1.添加Intent广播frameworks/base/core/java/android/content/Intent.java
Spring Boot 核心注解,常用注解,注解大全
码上农民
springBoot spring boot spring java
前言SpringBoot主要优势之一,就是“开箱即用,远离繁琐的配置”。SpringBoot架构没有代码生成,也不需要XML配置,有效避免大量的Maven导入和各种版本冲突,为Spring开发提供一个更快、更广泛的入门体验。不得不说,掌握SpringBoot常用注解,是学习SpringBoot架构的关键。一、核心注解@SpringBootApplication通常用在启动类上,申明让springb
00后会自动化就想拿20K?不,你还差点远呢···
v_648374
自动化 运维
等你搭建好公司的自动化生态,你还是不满足,我为什么不把这些东西可视化管理呢?做个平台?管理用例,管理任务,管理测试报告?我还可以把公司的一些部署任务也集成过来?想法很好!此时的你已经不仅仅是一名优秀的自动化工程师了,已经迈向了测试开发的道路!开始学习,了解了测试框架httprunner,开发框架django/flask/springboot,懂得了接口开发的流程,了解了mybatis,shiro,
Windows 设置环境变量
kylinholmes
windows powershell 环境变量
环境变量是什么环境变量是一种在系统里的变量,可以理解成一种属性,就放在那,有需要的程序就会去读,类似写代码里的全局变量通常用作,程序运行时的一些参数环境变量分为用户,系统。举个经典的栗子,Java安装的时候,需要自己手动配置环境变量,非常头大但其实Windows可以通过命令行一句话设置。假设我们需要设置JAVA_HOME这个环境变量PowerShell中的Env在powershell里有3个环境变
Java集合——map
Java小义
Java集合 java 开发语言
在Java中,Map是一个用于存储键值对(key-valuepairs)的集合,不允许重复的键,每个键映射到一个值。Map接口有几个常用的实现类。以下是Map接口的主要知识点:1.主要方法put(Kkey,Vvalue):将指定的键key和值value添加到映射中。如果键已存在,更新其对应的值。get(Objectkey):返回指定键key对应的值。remove(Objectkey):移除指定键k
Android12 添加设置控制导航栏显示和状态栏下拉
framework-coder
Android12 系统修改与定制 panelbar navigationbar
添加key值位置:frameworks/base/core/java/android/provider/Settings.java/***Controlnavigationbarenabled*/@Readable@SuppressLint("NoSettingsProvider")publicstaticfinalStringNAVIGATIONBAR_ENABLED="navigationba
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交互,它允许用户