1. 前言
前面文章整合过了ssm的,是相对spring的,不过在现在微服务流行之际,为了往后面的springcloud发展学习,先学习一下springboot,在学习的过程中用spring boot+spring mvc+mybatis进行搭建接口平台。
2. 简介
spring boot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。(来自百度百科)。
2.1 spring boot特点
创建独立的Spring应用程序
嵌入的Tomcat,无需部署WAR文件
开箱即用,提供各种默认配置来简化项目配置
没有冗余代码生成和XML配置的要求
2.2 个人理解
在我看来,spring boot并不是什么新的框架,它只是默认配置了很多框架的使用方式;类似于maven整合了jar,而spring boot整合了很多的框架。从本质上来讲,spring boot就是spring,它做了那些你需要去做的复杂配置。它使用“习惯优于配置”的理念让你的项目快速运行起来。
2.2 回顾一下spring web项目步骤
配置web.xml,加载spring和spring mvc
配置数据库连接、配置spring事务
配置加载配置文件的读取,开启注解
配置日志文件 ...... 配置完成后部署tomcat调试...
2.3 spring boot项目
只需要非常少的几个配置就可以迅速方便的搭建起来一套web项目或者是构建一个微服务!下面就让我们一起来领略spring boot的魅力
3. 项目搭建
整个项目使用maven构建,有关idea集成maven、jdk、tomcat等可翻我上一篇文章。
3.1 在这里使用spring提供的SPRING INITIALIZR工具来产生基础项目。
访问 :http://start.spring.io/
选择构建工具maven、语言java、版本1.5.10(支持jdk1.7)
点击Generate Project下载项目压缩包
解压项目,导入进idea,说一下简要步骤
File -> New -> Project from Existing Sources
选择你解压的项目文件夹
点击OK
选择Import project from external model并选择Maven,点击Next到底为止。
3.2 编译错误
若在项目编译过程中,遇到[Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8] 这个错误,可按照如下更改,这里我统一改为了1.7
1,Project Structure里确认两个地方:Project sdk以及project language level 2,Project Structure->Modules里Sources里的Language level 3,Preferences->java Compiler->Per-module bytecode Version
至此基础项目准备完毕,运行一下项目
看见Spring Boot这个图案证明基础项目搭建成功。
4. 编写代码
4.1 项目结构
系统整个架构为springboot+springmvc+mybatis,restful的接口风格。只是一个示例项目,也没有进行模块分包。整个结构的话还是controller、service、dao的三层结构。在这里面dao层多写了一个接口和实现。对于service层没有写接口,因为我觉得简单的业务没必要写接口(包括这里的dao也是)。 我也一直在思考,对于service和dao层,到底需不需要接口和实现。网上查了一些,有些是瞎扯了一堆“接口和实现分离”、“面向接口编程”、“设计模式”、“解耦”等,但是也没说出个所以然;有些是说没必要分离,或者看系统架构。自己也是经历不多,不知道确切的区别或者说有什么效率上的区别。这个待我日后慢慢积累,有机会咨询长者学习,或者评论区静待大神的解答。
4.2 项目配置
springboot 遵循"习惯优于配置"原则,使用Spirng Boot只需很少的配置,大部分时候可以使用默认配置。 使用INITIALIZR工具创建的springboot项目,默认会在resource目录下创建application.properties文件,另外也可以使用yml类型的配置文件代替properties文件。在这里我是使用的是yml文件。
application.yml
spring:
datasource:
# 驱动配置信息
url: jdbc:mysql://localhost:3306/spring_boot?useUnicode=true&characterEncoding=utf8
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
# 连接池的配置信息
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
这里主要就是配置了阿里的druid连接池信息。上面的就是类型和驱动这些,然后就是mysql数据库的url、用户名和密码,相应改成自己的就行。下面的是druid的参数配置项,这里随便设置了一些,具体可详查Druid。
mybatis-config.xml
这个配置主要就是关于mybatis的配置了,这里就提两点,一个是setting里面的logImpl配置,可以把执行的sql语句打印在控制台,便于排查sql错误;二个是使用typeAliases标签元素来对类型进行别名控制,也就是给具体的实体类一个别名,不用写完整路径。具体使用在后面mapper中会讲到。
以上就是这个项目目前用到的两个配置了,是不是比起spring来说简便多了。
pom.xml
4.0.0
com.bgy
springboot
0.0.1-SNAPSHOT
jar
springboot
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.5.10.RELEASE
UTF-8
UTF-8
1.7
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-web
spring-boot-starter-logging
org.springframework.boot
org.springframework.boot
spring-boot-starter-log4j2
org.springframework.boot
spring-boot-starter-web
1.3.6.RELEASE
com.alibaba
druid
1.0.11
mysql
mysql-connector-java
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.0
org.springframework.boot
spring-boot-starter-redis
1.3.8.RELEASE
com.alibaba
fastjson
1.1.27
com.google.code.gson
gson
org.springframework.boot
spring-boot-starter-aop
net.minidev
json-smart
RELEASE
org.springframework.boot
spring-boot-maven-plugin
这些就是当前项目中用到的一些maven依赖了。
DbDataSource.class
@Configuration
@MapperScan(basePackages = "com.bgy.springboot.dao",sqlSessionTemplateRef = "dbSqlSessionTemplate")
public class DbDataSource {
@Bean(name="dbData")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dbDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dbSqlSessionFactory")
public SqlSessionFactory dbSqlSessionFactory(@Qualifier("dbData") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
sqlSessionFactoryBean.setConfigLocation( new ClassPathResource("mybatis-config.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean(name="dbSqlSessionTemplate")
public SqlSessionTemplate dbSqlSessionTemplate(@Qualifier("dbSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception{
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "dbTransactionManager")
public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("dbData") DataSource dataSource) throws Exception {
return new DataSourceTransactionManager(dataSource);
}
}
SqlSessionTemplate是MyBatis提供的持久层访问模板化的工具,这个类负责管理MyBatis的SqlSession,用于调用MyBatis的SQL方法。因为SqlSessionTemplate是线程安全的,可以被多个DAO所共享使用,所以项目中只建立了一个SqlSessionTemplate。
在这里使用的是mybatis注解需要的配置。mybatis3开始支持java注解,使用java注解可以替代xml配置文件,简化代码。上面的代码中,使用@MapperScan来扫描注册mybatis数据库接口类,其中basePackages属性表明接口类所在的包,sqlSessionTemplateRef表明接口类使用的SqlSessionTemplate。
@Configuration 申明这是一个配置类相当于xml配置文件,@Bean表示这是一个Spring管理的bean。 @ConfigurationProperties用于装载yml的配置信息
这里面其他关于SqlSessionTemplate的用法和细节就不一一讲了,不明白的可百度学习一下SqlSessionTemplate。提一下setMapperLocations是用于加载以xml结尾的mapper配置文件,这里注意路径就行了,根路径是resources。setConfigLocation是加载mybatis的配置文件mybatis-config.xml。
4.3 数据库文件
这个在上篇文章已经介绍过作用,就是方便对sql语句的查阅和修改。
db_ddl.sql
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` VARCHAR (45) NOT NULL ,
`user_name` VARCHAR (100) ,
`nick_name` VARCHAR (100),
`password` CHAR (32),
`email` VARCHAR (50),
`phone` VARCHAR (50),
`sex` ENUM('S_MALE','S_FEMALE','S_BM'),
`status` ENUM('S_OFF','S_NORMAL'),
`avatar` VARCHAR (100),
`remarks` VARCHAR (200),
`add_at` BIGINT,
`update_at` BIGINT,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
这里表名和字段与上一篇文章相比修改了一些,因为看了《阿里巴巴 Java开发手册》中写道:
表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。 说明:MYSQL在Windows下不区分大小写,但在Linux上默认区分大小写。因此,数据库名、表名、字段名都不允许出现任何大写字母,避免节外生枝。
4.4 实体类
建立一个MUser的实体类
MUser.class
public class MUser {
private String id;
private String userName;
private String nickName;
private String password;
private String email;
private String phone;
private String sex;
private String status;
private String avatar;
private String remarks;
private Long addAt;
public MUser(){}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public Long getAddAt() {
return addAt;
}
public void setAddAt(Long addAt) {
this.addAt = addAt;
}
}
4.5 Controller
4.5.1 BaseController
public class BaseController {
private static final long serialVersionUID = 6357869213649815390L;
/**
* @param fastJson
*/
protected JSONObject json = new JSONObject();
/**
* fastjson JSONArray
*/
protected JSONArray jsonArray = new JSONArray();
/**
* fastjson用法
* 对象转json字符串 String json = json.toJSONString(对象);
* 字符串转json对象 json =json.parseObject(jsonStr);
* 字符串转java对象 Object object = JSON.parseObject(jsonStr, Object.class);
* 字符串转list List list = JSON.parseArray(jsonStr, Object.class);
*/
}
在这里抽出了一个BaseController的父类,可放置多个Controller都会用到的一些对象或方法,这个父类被子类Controller继承。目前此项目中的BaseController只放置了fastjson的两个对象,正常项目中肯定会有不少共有的对象或方法都可放置这里面。
4.5.2 UserController
@Controller
@RequestMapping("/user")
public class UserController extends BaseController {
@Resource(name = "userService")
private UserService userService;
/**
* 添加用户
*
* @param mUserJson
* @return
* @throws Exception
*/
@RequestMapping(value = "", method = RequestMethod.POST)
@ResponseBody
public String addUser(@RequestBody String mUserJson) throws Exception {
String resultInfo = "";
try {
resultInfo = userService.addUser(mUserJson);
} catch (Exception e) {
e.printStackTrace();
}
return resultInfo;
}
/**
* 通过用户名称获取用户
*
* @param userName
* @return
* @throws Exception
*/
@RequestMapping(value = "/{userName}", method = RequestMethod.GET)
@ResponseBody
public String getUserByName(@PathVariable String userName) throws Exception {
String resultInfo = "";
try {
resultInfo = userService.getUserByName(userName);
} catch (Exception e) {
e.printStackTrace();
}
return resultInfo;
}
/**
* 修改用户
*
* @param mUserJson
* @return
* @throws Exception
*/
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseBody
public String updateUser(@PathVariable("id") String id, @RequestBody String mUserJson) throws Exception {
String resultInfo = "";
try {
resultInfo = userService.updateUser(id, mUserJson);
} catch (Exception e) {
e.printStackTrace();
}
return resultInfo;
}
/**
* 删除用户
*
* @param id
* @return
* @throws Exception
*/
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseBody
public String deleteUser(@PathVariable("id") String id) throws Exception {
String resultInfo = "";
try {
resultInfo = userService.deleteUser(id);
} catch (Exception e) {
e.printStackTrace();
}
return resultInfo;
}
}
这里使用springmvc 相关注解,集成restful风格的接口,具体注解和含义、及restful风格的理解可翻上一篇文章。 与上一篇略有不同的本项目使用的是@Resource注解注入bean。
关于@Resource和@Autowired:
两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
@Autowired默认按类型装配(这个注解属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)
@Resource默认安装名称进行装配(这个注解属于J2EE的),名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找。
在我个人推荐用@Resource,因为这个注解是属于J2EE的,减少了与spring的耦合,并且代码看起更优雅。若有高见,欢迎指教。
这个示例代码实现了增删改查四个基础功能,前后端完全以JSON字符串进行交互。(这里前后端以JSON字符串交互的方式有待商榷,以前认知是用JSON字符串便于统一风格;不过最近一年以来的学习和工作,现在会直接使用实体类进行接收对象,免去JSON转对象的步骤。)
4.6 Service
4.6.1 BaseService
public class BaseService {
private static final long serialVersionUID = 6357869213649815390L;
/**
* 得到32位的uuid
*
* @return
*/
public String get32UUID() {
String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
return uuid;
}
/**
* @param fastJson
*/
protected JSONObject json = new JSONObject();
/**
* fastjson JSONArray
*/
protected JSONArray jsonArray = new JSONArray();
/**
* fastjson用法
* 对象转json字符串 String json = json.toJSONString(对象);
* 字符串转json对象 json =json.parseObject(jsonStr);
* 字符串转java对象 Object object = JSON.parseObject(jsonStr, Object.class);
* 字符串转list List list = JSON.parseArray(jsonStr, Object.class);
*/
}
也是抽出了一个父类BaseService,放置共用的对象或方法。这里虽然与BashController内容相似,不过没有与BaseController共用,因为想到如果项目复杂的话,Controller与Service层共用的东西会有较大差别。
4.6.2 UserService
@Service("userService")
public class UserService extends BaseService {
@Resource(name = "userDaoImpl")
private IUserDao iUserDao;
/**
* 添加用户
*
* @param mUserJson
* @return
*/
public String addUser(String mUserJson) {
BgyResult br = new BgyResult();
MUser mUser = json.parseObject(mUserJson, MUser.class);
int count = iUserDao.countUserName(mUser);
if (count > 0) {
br.setCode("400");
br.setMsg("用户名已存在");
return json.toJSONString(br);
}
mUser.setId(get32UUID());
boolean result = iUserDao.addUser(mUser);
if (result) {
br.setCode("200");
br.setMsg("注册成功");
br.setData(mUser);
} else {
br.setCode("400");
br.setMsg("注册失败");
}
return json.toJSONString(br);
}
/**
* 通过用户名获取用户
*
* @param userName
* @return
*/
public String getUserByName(String userName) {
BgyResult br = new BgyResult();
MUser mUser = iUserDao.getUserByName(userName);
br.setCode("200");
br.setMsg("Ok");
br.setData(mUser);
return json.toJSONString(br);
}
/**
* 编辑用户
*
* @param mUserJson
* @return
*/
public String updateUser(String id, String mUserJson) {
BgyResult br = new BgyResult();
MUser mUser = json.parseObject(mUserJson, MUser.class);
MUser myMUser = iUserDao.getUserById(id);
if (myMUser == null) {
br.setCode("400");
br.setMsg("用户不存在");
return json.toJSONString(br);
}
boolean result = iUserDao.updateUser(mUser);
if (result) {
br.setCode("200");
br.setMsg("修改成功");
} else {
br.setCode("400");
br.setMsg("修改失败");
}
return json.toJSONString(br);
}
/**
* 删除用户
*
* @param id
* @return
*/
public String deleteUser(String id) {
BgyResult br = new BgyResult();
MUser myMUser = iUserDao.getUserById(id);
if (myMUser == null) {
br.setCode("400");
br.setMsg("用户不存在");
return json.toJSONString(br);
}
boolean result = iUserDao.deleteUser(id);
if (result) {
br.setCode("200");
br.setMsg("删除成功");
} else {
br.setCode("400");
br.setMsg("删除失败");
}
return json.toJSONString(br);
}
}
这一层主要就是处理业务逻辑了,没什么特别的地方,也是使用@Resource注入Bean。 这里用到了BgyResult类作为返回类。
4.7 BgyResult
public class BgyResult implements Serializable {
private static final long serialVersionUID = 4832771715671880043L;
private String code;
private String msg;
private Object data;
public BgyResult(){
this.code = "200";
this.msg = "SUCCESS";
this.data = null;
}
public BgyResult(String msg) {
this.code = "400";
this.msg = msg;
this.data = null;
}
public BgyResult(String code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public String getCode() {
return this.code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return this.msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return this.data;
}
public void setData(Object data) {
this.data = data;
}
}
为了统一与前端的交互,定义了BgyResult类进行标准返回,统一返回格式code、msg、data的json字符串。
4.8 Dao
4.8.1 IUserDao
public interface IUserDao {
int countUserName(MUser mUser);
boolean addUser(MUser mUser);
MUser getUserByName(String userName);
MUser getUserById(String id);
boolean updateUser(MUser mUser);
boolean deleteUser(String id);
}
这里就是dao的接口层,用于访问数据库,实现数据的持久化。这里提一下,《阿里巴巴Java开发手册》中写道:
接口类中的方法和属性不要加任何修饰符号(public也不要加),保持代码的简洁性。
4.8.2 UserDaoImpl
@Repository("userDaoImpl")
public class UserDaoImpl implements IUserDao {
@Resource(name = "dbSqlSessionTemplate")
private SqlSessionTemplate sqlSessionTemplate;
@Override
public int countUserName(MUser mUser) {
return sqlSessionTemplate.selectOne("UserMapper.countUserName", mUser);
}
@Override
public boolean addUser(MUser mUser) {
int num = sqlSessionTemplate.insert("UserMapper.addUser", mUser);
boolean result = false;
if (num > 0) {
result = true;
}
return result;
}
@Override
public MUser getUserByName(String userName) {
MUser mUser = sqlSessionTemplate.selectOne("UserMapper.getUserByName", userName);
return mUser;
}
@Override
public MUser getUserById(String id) {
MUser mUser = sqlSessionTemplate.selectOne("UserMapper.getUserById", id);
return mUser;
}
@Override
public boolean updateUser(MUser mUser) {
int num = sqlSessionTemplate.update("UserMapper.updateUser", mUser);
boolean result = false;
if (num > 0) {
result = true;
}
return result;
}
@Override
public boolean deleteUser(String id){
int num = sqlSessionTemplate.update("UserMapper.deleteUser", id);
boolean result = false;
if (num > 0) {
result = true;
}
return result;
}
}
这个类就是dao接口的具体实现类了,没什么特别的。使用的是前面配置的SqlSessionTemplate模板化工具,与mapper.xml结合实现操作数据库。不过这里把所有返回int的操作做了一下boolean转换,便于service层处理。
4.9 UserMapper.xml
SELECT COUNT(1) FROM `user` WHERE user_name = #{userName}
INSERT INTO `user` (id,user_name,nick_name,password,email,phone,sex,status,avatar,remarks,add_at)
VALUES (#{id},#{userName},#{nickName},#{password},#{email},#{phone},#{sex},#{status},#{avatar},#{remarks},unix_timestamp(now()),unix_timestamp(now()))
SELECT * FROM `user` WHERE user_name = #{userName}
SELECT * FROM `user` WHERE id = #{id}
UPDATE
`user`
SET
nick_name = #{nickName},
password = #{password},
email = #{email},
phone = #{phone},
sex = #{sex},
status = #{status},
avatar = #{avatar},
remarks = #{remarks},
update_at = unix_timestamp(now())
WHERE id = #{id}
DELETE FROM `user` WHERE
id = #{id} AND
1=1
这个是mybatis中sql的映射文件。命名空间即是sqlSessionTemplate.insert("UserMapper.addUser", mUser) 中的UserMapper 。
上面还提到了使用typeAliases标签元素来对类型进行别名控制,也就是给具体的实体类一个别名,不用写完整路径。在这里的type或者parameterType里写的MUser就是我们的实体类,如果不使用typeAliases,这里则应写完整路径,即 com.bgy.springboot.model.MUser
到此,整个项目的代码已经编写完成。实现了最基础的增删改查四个功能。
运行项目,测试一下试试。由于springboot内置了tomcat,所以不用单独放在tomcat中部署。直接运行SpringbootApplication类,即可运行项目。看见这个即表示运行成功:
下面以postman测试接口
添加用户
编辑用户
查询用户
删除用户
至此,基于springboot+springmvc+mybatis框架的项目已经完全整合与测试通过。这个项目结合上一个项目的一些东西,当然也改进了一些东西。项目中涉及到的技术都没有难点,就算对于新手也很容易搞懂,也有完整的代码,已测试编译通过。
编者水平有限,若有错误或者更优的建议欢迎指出。
目前全部文章列表: idea整合restful风格的ssm框架(一) idea整合restful风格的ssm框架(二) idea整合spring boot+spring mvc+mybatis框架 idea整合springboot+redis JVM学习之—Java内存区域 JVM学习之—垃圾回收与内存分配策略 专题整理之—不可变对象与String的不可变 专题整理之—String的字符串常量池
你可能感兴趣的:(idea整合spring boot+spring mvc+mybatis框架)
【微服务】SpringBoot 整合Redis Stack 构建本地向量数据库相似性查询
小码农叔叔
AI大模型实战与应用 springboot 入门到精通 向量数据库 redis stack java使用向量数据库
目录一、前言二、向量数据库介绍2.1什么是向量数据库2.2向量数据库特点2.3向量数据库使用场景三、常用的向量数据库解决方案3.1Milvus3.1.1Milvus是什么3.1.2Milvus主要特点3.2Faiss3.2.1Faiss是什么3.2.2Faiss主要特点3.3Pinecone3.3.1Pinecone是什么3.3.2Pinecone主要特点3.4Weaviate3.4.1Weavi
WPF框架---MvvmLight介绍
白白白白纸呀
WPF知识总结 c# 开发语言 wpf
目录1.MvvmLight框架准备2.MvvmLight中的相关基类3.MvvmLight中的数据绑定与通知a.核心功能b.关键方法与属性c.完整示例d.高级用法4.MvvmLight中的命令对象a.命令对象的作用b.核心接口:ICommandc.MvvmLight中的RelayCommandd.动态更新命令的可执行状态e.高级用法5.Messenger对象使用a.Messenger的核心作用b.
ShardingSphere 和 Spring 的动态数据源切换机制的对比以及原理
龙大.
系统设计 Spring Mysql spring java 数据库
ShardingSphere与Spring动态数据源切换机制的对比及原理一、核心定位对比维度ShardingSphereSpring动态数据源(如AbstractRoutingDataSource)定位分布式数据库中间件轻量级多数据源路由工具核心目标分库分表、读写分离、分布式事务多数据源动态切换适用场景大数据量、高并发、复杂分片需求简单多数据源隔离(如多租户、环境隔离)实现层级JDBC驱动层(拦截
高斯溅射融合之路(一)- webgl渲染3d gaussian splatting
山海鲸可视化
数字孪生 GIS系统 webgl 数字孪生 GIS 高斯泼溅 AI重构
大家好,我是山海鲸的技术负责人。之前已经写了一个GIS融合系列。其实CesiumJS的整合有相当的难度,同时也有很多方面的工作,很难在几篇文章内写完,整个山海鲸团队也是投入了接近两年的时间,才把周边整套工具链进行了完善,后续有新的内容也会持续分享,隔壁系列传送门:GIS融合之路一坑未平,一坑又起。去年年末,我们的AI合作伙伴突然给山海鲸技术团队丢来了一个新技术-3DGaussianSplattin
【TVM 教程】使用元组输入(Tuple Inputs)进行计算和归约
编译器编程后端人工智能深度学习
ApacheTVM是一个端到端的深度学习编译框架,适用于CPU、GPU和各种机器学习加速芯片。更多TVM中文文档可访问→https://tvm.hyper.ai/作者:ZihengJiang若要在单个循环中计算具有相同shape的多个输出,或执行多个值的归约,例如argmax。这些问题可以通过元组输入来解决。本教程介绍了TVM中元组输入的用法。from__future__importabsolut
Pytest自动化框架搭建
柯有Q
pytest 自动化 python 运维
背景入职了一家小公司,需要从0开始搭建一个自动化测试环境,因为是测试板卡项目,所以需要使用串口连接工具pyserial,测试用例批量化执行工具pytest,测试报告自动生成工具allure,大家根据这三个关键词选择是否需要继续阅读1.技术实现1.1技术说明使用pyserial作为串口连接工具,发送读写命令;使用pytest作为用例批量管理工具;使用allure对测试结果进行可视化处理,自动生成测试
TiDB系列之:TiCDC使用Changefeed完成数据同步任务
快乐骑行^_^
大数据 日常分享专栏 TiDB系列 TiCDC Changefeed 完成数据同步任务
TiDB系列之:TiCDC使用Changefeed完成数据同步任务一、Changefeed二、Changefeed状态流转三、操作Changefeed四、cdccli管理同步任务1.创建同步任务2.查询同步任务列表3.查询特定同步任务4.停止同步任务5.恢复同步任务6.删除同步任务7.更新同步任务配置8.管理同步子任务处理单元(processor)9.同步启用了TiDB新的Collation框架的
老榕树的Java专题:如何连接达梦数据库到idea
程序员_老榕树
树哥java专题:从0到1 java 数据库 intellij-idea
安装达梦数据库JDBC驱动下载驱动:首先需要从达梦官方网站下载适用于Java的JDBC驱动程序(一般是一个JAR文件,文件名类似dm-jdbc-driver.jar),确保下载的版本与你要连接的DM数据库版本相匹配。添加驱动到项目:在IDEA中,可以通过以下几种方式添加驱动到项目依赖中:项目结构配置:点击“File”->“ProjectStructure”->“Libraries”,在“Libra
从 React 看前端 UI 代码范式革命
哔哩哔哩技术
前端 react.js ui
前言本来打算写的主题是“我为什么讨厌ReactHooksAPI“,展开聊聊“小甜甜”是如何变成“牛夫人”的,没想到越写越严肃:)React是两次前端范式革命的引领者,至今仍有繁荣的社区和旺盛的创造力;React多次天才又激进的创新,一些想法被借鉴改良、一些引发广泛质疑,大部分是被认同和接受的;可以说React以一个框架之力,推动了整个前端领域的发展。范式是一种公认的模型或模式。本文从React出发
海量数据融合互通丨TiDB 在安徽省住房公积金监管服务平台的应用实践
TiDB_PingCAP
tidb htap 分布式
导读安徽省住房公积金监管服务平台通过整合全省17家公积金中心的数据,致力于实现数据共享、规范化管理与高效数据分析。为了应对海量数据处理需求,安徽省选择TiDB作为底层数据库,利用其分布式架构和HTAP能力,实现了快速的数据分析与治理。TiDB的高效性能提升了平台的数据处理能力和查询效率,为全省公积金数据的统一管理与共享提供了有力支持。本文将详细介绍TiDB在平台中的应用与实际效果,以及TiDB如何
基于 skynet 的 MMO 服务器设计
嘎嘎嘎498451
服务器
最近,我们的合作方陌陌带了他们的一个CP到我们公司咨询一下skynet做mmo游戏项目中遇到的一些问题。因为他们即将上线一款MMO,在压力测试环节暴露了许多问题。虽然经过我们的分析,有很多问题出在他们的压力测试程序本身编写的bug,但同时也暴露出服务器的设计问题。核心问题是,他们在实现mmo服务器时,虽然使用了skynet框架,但却把所有的业务逻辑都放在了同一个lua服务中,也就是一切都运行在一个
实际springboot项目中如何注意jvm调优
种豆走天下
spring boot jvm 后端
在SpringBoot项目中进行JVM调优是一个重要的任务,可以帮助提高应用程序的性能和稳定性。JVM调优可以涵盖内存管理、垃圾回收、线程管理以及其他JVM配置等多个方面。以下是一些常见的JVM调优策略,适用于SpringBoot应用:1.内存配置JVM的内存管理是影响SpringBoot应用性能的关键因素之一。你可以通过调整堆内存和非堆内存的大小来优化应用的性能。a.堆内存大小(-Xms和-Xm
springmvc 国际化实例
卿乌
java java struts spring
springmvc国际化实例springMVC.xml配置文件设置首先在配置文件中声明我们的国际化的配置文件,从那个文件中取只mvc:interceptors>然后配置我们的拦截器请求jsp页面关键内容用到我们的jstl来取值然后就可以用显示相关内容了,language.cn与前面资源文件定义的内容相对应然后直接点击跳转页面
SpringMVC 国际化
呢喃北上
Spring SpringMVC SpringMVC 国际化
SpringMVC的国际化是建立在Java国际化的基础上的,其一样是通过提供不同国家的语言环境的消息资源。通过ResourceBundle加载Locale对应的资源文件。再取得该资源文件中指定Key对应的消息。步骤:1.给系统加载国际化资源1.在页面上输出国际化消息。需要使用SpringMVC的标签库。2.输出国际化。SpringMVC输出国际化消息有两种方式。2.在Controller的处理方法
Spring提供的拓展点
小胖子许愿
Spring spring python java
Bean生命周期提供的拓展点BeanFactoryPostProcessor-处理所有Bean前,对BeanFactory预处理,也可以注册自定义BeanBeanDefinitionRegistryPostProcessor-注册自定义BeanBeanPostProcessor-Bean初始化前后,对Bean进行加工InitializingBean-所有Bean创建完成所有属性注入完成之后执行Di
Json工具(一)- Jackson
小胖子许愿
Json json java spring
1、Jackson简介Jackson是常用的高效安全的Json序列化和反序列化框架。SpringMVC默认的json解析器是Jackson。Jackson有三个核心模块。jackson-core:提供Jackson处理JSON数据的核心功能,如流式解析和生成JSON,提供基本的API。jackson-annotations:提供注解编程相关的核心注解。jackson-databind:提供数据绑定
开源游戏服务器框架NFShmServer 简介(一)
gaoyi445
游戏 C++游戏服务器 共享内存游戏服务器 lua游戏服务器 插件游戏服务器
一、NFShmServer是什么?NFShmServer是一个使用C++开发的轻量级,敏捷型,弹性的,分布式的共享内存(C++热更)/多进程lua(lua热更)的插件开发框架,让你更快更简单的开发服务端应用.部分思路来自UE4和Ogre.(当前主要用在游戏领域).实现了一款unity3d捕鱼demo游戏和一个MMO(目前还在完善中)游戏,有兴趣的可以加群762414765学习二、特征可以做到分布式
大白话聊聊:DevOps
程序员-洋哥
devops 运维
有小伙伴后台私信我聊下DevOps,网上文章很多,今天我结合软件开发周期聊一下DevOps的流程。DevOps并不是什么神秘的黑科技,而是一种理念和方法论,通过优化流程、提升自动化水平,让开发和运维团队能够更紧密地合作,共同推动项目的成功。首先,我们要明确DevOps的核心目标:快速、可靠地交付高质量的软件。为了实现这个目标,我们需要关注整个软件开发生命周期中的各个环节,并对其进行优化和整合。一、
hadoop框架与核心组件刨析(三)YARN
小刘爱喇石( ˝ᗢ̈˝ )
hadoop 大数据 分布式
一、负载均衡的概念负载均衡(LoadBalancing)是一种将工作负载(如网络流量、计算任务或数据请求)分配到多个资源(如服务器、计算节点或存储设备)的技术,目的是优化资源使用、最大化吞吐量、最小化响应时间,并避免单个资源过载。负载均衡广泛应用于计算机网络、分布式系统、云计算等领域。负载均衡的核心目标提高性能:通过将负载分配到多个资源,避免单个资源成为瓶颈,从而提高系统的整体性能。提高可用性:如
SpringMVC的国际化
小胖子许愿
Spring spring
SpringMVC的国际化WebMVC的核心LocaleResolver,MessageSource。WebMvcAutoConfiguration是SpringBoot中的Web方面的自动配置类。在MVC的配置类里面,如果没有自定义的LocaleResolver,那么就会使用默认的。并且自定义的名称是“localeResolver”,才不会加载默认的。默认使用的是AcceptHeaderLoca
Spring Web MVC(1)
我爱Jack
spring mvc 后端 java
一、SpringMVC是什么?核心角色:SpringMVC是⼀套基于Servlet规范的Web开发框架,像餐厅的标准化管理流程,规定了每个环节的职责。用户发起请求(点餐)时,SpringMVC协调各组件处理并响应结果(上菜)。二、MVC模式深度解析类比餐厅模型:角色职责对应Spring组件顾客(用户)发起请求(点菜)浏览器用户服务员(View)展示菜单并上菜(显示结果)JSP/Thymeleaf模
帆软认证BI工程师(FCBA)部分考试题目及答案
隼丶
帆软 FineBi
判断题1.安装32位系统的FineBI,最多只能支持2G内存。正确2.FineBI产品目前不支持vertical大数据平台。错误3.FineBI可以和FineReport两款产品进行整合使用。正确4.同一个仪表板中,可以同时使用实时和抽取数据进行分析。正确5.血缘分析可以让用户查看该表的来源表和子孙表/模板,当前用户创建的子孙表或模板不会灰化,但是非当前用户创建的子孙表或模板会灰化显示。正确6.F
算力网驱动数字经济多场景融合创新
智能计算研究中心
其他
内容概要算力网作为数字经济的核心基础设施,正通过技术融合与架构创新重塑多行业应用场景。其核心架构整合了异构计算、分布式存储和智能调度系统,形成覆盖云端、边缘端及终端的协同网络。从技术要素看,光子芯片将计算密度提升3-5个数量级,而量子计算在密码学、分子模拟等领域的突破性进展,为算力网的演进提供了全新可能性。技术要素应用场景关键指标提升异构计算架构工业互联网任务响应速度提升40%边缘云协同智能安防系
跨领域算法安全优化与实践路径
智能计算研究中心
其他
内容概要在算法技术加速渗透金融、医疗、自动驾驶等关键领域的背景下,跨领域算法的安全性与可落地性成为核心挑战。本书从联邦学习的隐私保护架构切入,探讨如何通过可解释性算法增强模型透明度,并引入量子计算与边缘计算的协同优化框架,构建兼顾效率与安全的技术范式。值得注意的是,医疗影像分析中的对抗攻击防御机制与生成对抗网络驱动的推荐系统创新,揭示了算法动态演进中的风险控制逻辑。技术整合不应局限于单一场景优化,
Django 中的算法应用与实现
岱宗夫up
教学 sqlite 数据库 python django opencv
Django中的算法应用与实现在Django开发中,算法的应用可以极大地扩展Web应用的功能和性能。从简单的数据处理到复杂的机器学习模型,Django都可以作为一个强大的后端框架来支持这些算法的实现。本文将介绍几种常见的算法及其在Django中的使用方法。1\.协同过滤算法1.1算法简介协同过滤是一种常用的推荐系统算法,通过分析用户的行为数据(如评分、浏览历史等),为用户推荐他们可能感兴趣的内容。
Java集合框架:组织对象的利器
t0_54program
java python 开发语言 个人开发
在Java编程中,集合框架是一个强大的工具,它为组织和管理对象提供了丰富的接口和类。这些接口和类主要位于java.util和java.util.concurrent包中。集合框架的核心思想是通过抽象数据类型(AbstractDataType)来组织对象的集合,而具体的实现则依赖于不同的数据结构和算法。今天,我们就来深入探讨Java集合框架的魅力所在,并通过实例来展示它的强大功能。一、集合框架的基本
Reactor框架下的Flux和Mono转换技巧
t0_54program
android 个人开发
在Reactor框架中,Flux和Mono是两种非常重要的响应式数据类型,它们分别用于处理多个数据流和单个数据流。在实际开发中,我们常常需要对这些数据流进行转换,以满足不同的业务需求。今天,我们就来深入探讨一下如何通过transform()方法来实现Flux和Mono的转换。Flux的transform()方法Flux的transform()方法可以将一个Flux转换为另一个Flux。它的方法签名
PyTorch 深度学习快速入门教程
有人给我介绍对象吗
AI论文写作 深度学习 pytorch 人工智能
PyTorch深度学习快速入门教程PyTorch是一个灵活且易用的深度学习框架,支持动态图计算,广泛用于学术研究和工业应用。本教程将带你快速掌握PyTorch的基本用法,涵盖张量(Tensor)操作、自动求导(Autograd)、构建神经网络以及模型训练。1.安装PyTorch在终端或命令行中运行以下命令安装PyTorch:pipinstalltorchtorchvisiontorchaudio安
Spring Boot整合Spring Security与JWT实现无状态认证:实战指南
老哥不老
笔记 spring spring boot 数据库
SpringBoot整合SpringSecurity与JWT实现无状态认证:实战指南一、JWT认证原理简介JSONWebToken(JWT)是一种开放标准(RFC7519),由三部分组成:Header(头部):声明令牌类型和签名算法Payload(负载):携带用户身份信息Signature(签名):防篡改验证认证流程:客户端提交登录凭证服务端验证通过后生成JWT客户端后续请求携带JWT服务端验证J
关于SpringCloud整合RabbitMQ的应用详解(ack,限流,幂等)
何须低眉
java rabbitmq
安装RabbitMQ安装Eralng与RabbitMQ导包org.springframework.cloudspring-cloud-starter-stream-rabbit生产者配置关于spring.rabbitmq.template.mandatory与spring.rabbitmq.publisher-returnsspring.rabbitmq.template.mandatory属性的
Enum用法
不懂事的小屁孩
enum
以前的时候知道enum,但是真心不怎么用,在实际开发中,经常会用到以下代码:
protected final static String XJ = "XJ";
protected final static String YHK = "YHK";
protected final static String PQ = "PQ";
【Spark九十七】RDD API之aggregateByKey
bit1129
spark
1. aggregateByKey的运行机制
/**
* Aggregate the values of each key, using given combine functions and a neutral "zero value".
* This function can return a different result type
hive创建表是报错: Specified key was too long; max key length is 767 bytes
daizj
hive
今天在hive客户端创建表时报错,具体操作如下
hive> create table test2(id string);
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:javax.jdo.JDODataSto
Map 与 JavaBean之间的转换
周凡杨
java 自省 转换 反射
最近项目里需要一个工具类,它的功能是传入一个Map后可以返回一个JavaBean对象。很喜欢写这样的Java服务,首先我想到的是要通过Java 的反射去实现匿名类的方法调用,这样才可以把Map里的值set 到JavaBean里。其实这里用Java的自省会更方便,下面两个方法就是一个通过反射,一个通过自省来实现本功能。
1:JavaBean类
1 &nb
java连接ftp下载
g21121
java
有的时候需要用到java连接ftp服务器下载,上传一些操作,下面写了一个小例子。
/** ftp服务器地址 */
private String ftpHost;
/** ftp服务器用户名 */
private String ftpName;
/** ftp服务器密码 */
private String ftpPass;
/** ftp根目录 */
private String f
web报表工具FineReport使用中遇到的常见报错及解决办法(二)
老A不折腾
finereport web报表 java报表 总结
抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己。
出现问题先搜一下文档上有没有,再看看度娘有没有,再看看论坛有没有。有报错要看日志。下面简单罗列下常见的问题,大多文档上都有提到的。
1、没有返回数据集:
在存储过程中的操作语句之前加上set nocount on 或者在数据集exec调用存储过程的前面加上这句。当S
linux 系统cpu 内存等信息查看
墙头上一根草
cpu 内存 liunx
1 查看CPU
1.1 查看CPU个数
# cat /proc/cpuinfo | grep "physical id" | uniq | wc -l
2
**uniq命令:删除重复行;wc –l命令:统计行数**
1.2 查看CPU核数
# cat /proc/cpuinfo | grep "cpu cores" | u
Spring中的AOP
aijuans
spring AOP
Spring中的AOP
Written by Tony Jiang @ 2012-1-18 (转)何为AOP
AOP,面向切面编程。
在不改动代码的前提下,灵活的在现有代码的执行顺序前后,添加进新规机能。
来一个简单的Sample:
目标类:
[java]
view plain
copy
print
?
package&nb
placeholder(HTML 5) IE 兼容插件
alxw4616
JavaScript jquery jQuery插件
placeholder 这个属性被越来越频繁的使用.
但为做HTML 5 特性IE没能实现这东西.
以下的jQuery插件就是用来在IE上实现该属性的.
/**
* [placeholder(HTML 5) IE 实现.IE9以下通过测试.]
* v 1.0 by oTwo 2014年7月31日 11:45:29
*/
$.fn.placeholder = function
Object类,值域,泛型等总结(适合有基础的人看)
百合不是茶
泛型的继承和通配符 变量的值域 Object类转换
java的作用域在编程的时候经常会遇到,而我经常会搞不清楚这个
问题,所以在家的这几天回忆一下过去不知道的每个小知识点
变量的值域;
package 基础;
/**
* 作用域的范围
*
* @author Administrator
*
*/
public class zuoyongyu {
public static vo
JDK1.5 Condition接口
bijian1013
java thread Condition java多线程
Condition 将 Object 监视器方法(wait、notify和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。
条件(也称为条件队列或条件变量)为线程提供了一
开源中国OSC源创会记录
bijian1013
hadoop spark MemSQL
一.Strata+Hadoop World(SHW)大会
是全世界最大的大数据大会之一。SHW大会为各种技术提供了深度交流的机会,还会看到最领先的大数据技术、最广泛的应用场景、最有趣的用例教学以及最全面的大数据行业和趋势探讨。
二.Hadoop
&nbs
【Java范型七】范型消除
bit1129
java
范型是Java1.5引入的语言特性,它是编译时的一个语法现象,也就是说,对于一个类,不管是范型类还是非范型类,编译得到的字节码是一样的,差别仅在于通过范型这种语法来进行编译时的类型检查,在运行时是没有范型或者类型参数这个说法的。
范型跟反射刚好相反,反射是一种运行时行为,所以编译时不能访问的变量或者方法(比如private),在运行时通过反射是可以访问的,也就是说,可见性也是一种编译时的行为,在
【Spark九十四】spark-sql工具的使用
bit1129
spark
spark-sql是Spark bin目录下的一个可执行脚本,它的目的是通过这个脚本执行Hive的命令,即原来通过
hive>输入的指令可以通过spark-sql>输入的指令来完成。
spark-sql可以使用内置的Hive metadata-store,也可以使用已经独立安装的Hive的metadata store
关于Hive build into Spark
js做的各种倒计时
ronin47
js 倒计时
第一种:精确到秒的javascript倒计时代码
HTML代码:
<form name="form1">
<div align="center" align="middle"
java-37.有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接
bylijinnan
java
public class MaxCatenate {
/*
* Q.37 有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接,
* 问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。
*/
public static void main(String[] args){
mongoDB安装
开窍的石头
mongodb安装 基本操作
mongoDB的安装
1:mongoDB下载 https://www.mongodb.org/downloads
2:下载mongoDB下载后解压
[开源项目]引擎的关键意义
comsci
开源项目
一个系统,最核心的东西就是引擎。。。。。
而要设计和制造出引擎,最关键的是要坚持。。。。。。
现在最先进的引擎技术,也是从莱特兄弟那里出现的,但是中间一直没有断过研发的
软件度量的一些方法
cuiyadll
方法
软件度量的一些方法http://cuiyingfeng.blog.51cto.com/43841/6775/在前面我们已介绍了组成软件度量的几个方面。在这里我们将先给出关于这几个方面的一个纲要介绍。在后面我们还会作进一步具体的阐述。当我们不从高层次的概念级来看软件度量及其目标的时候,我们很容易把这些活动看成是不同而且毫不相干的。我们现在希望表明他们是怎样恰如其分地嵌入我们的框架的。也就是我们度量的
XSD中的targetNameSpace解释
darrenzhu
xml namespace xsd targetnamespace
参考链接:
http://blog.csdn.net/colin1014/article/details/357694
xsd文件中定义了一个targetNameSpace后,其内部定义的元素,属性,类型等都属于该targetNameSpace,其自身或外部xsd文件使用这些元素,属性等都必须从定义的targetNameSpace中找:
例如:以下xsd文件,就出现了该错误,即便是在一
什么是RAID0、RAID1、RAID0+1、RAID5,等磁盘阵列模式?
dcj3sjt126com
raid
RAID 1又称为Mirror或Mirroring,它的宗旨是最大限度的保证用户数据的可用性和可修复性。 RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。由于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID 1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而,Mirror的磁盘空间利用率低,存储成本高。
Mir
yii2 restful web服务快速入门
dcj3sjt126com
PHP yii2
快速入门
Yii 提供了一整套用来简化实现 RESTful 风格的 Web Service 服务的 API。 特别是,Yii 支持以下关于 RESTful 风格的 API:
支持 Active Record 类的通用API的快速原型
涉及的响应格式(在默认情况下支持 JSON 和 XML)
支持可选输出字段的定制对象序列化
适当的格式的数据采集和验证错误
MongoDB查询(3)——内嵌文档查询(七)
eksliang
MongoDB查询内嵌文档 MongoDB查询内嵌数组
MongoDB查询内嵌文档
转载请出自出处:http://eksliang.iteye.com/blog/2177301 一、概述
有两种方法可以查询内嵌文档:查询整个文档;针对键值对进行查询。这两种方式是不同的,下面我通过例子进行分别说明。
二、查询整个文档
例如:有如下文档
db.emp.insert({
&qu
android4.4从系统图库无法加载图片的问题
gundumw100
android
典型的使用场景就是要设置一个头像,头像需要从系统图库或者拍照获得,在android4.4之前,我用的代码没问题,但是今天使用android4.4的时候突然发现不灵了。baidu了一圈,终于解决了。
下面是解决方案:
private String[] items = new String[] { "图库","拍照" };
/* 头像名称 */
网页特效大全 jQuery等
ini
JavaScript jquery css html5 ini
HTML5和CSS3知识和特效
asp.net ajax jquery实例
分享一个下雪的特效
jQuery倾斜的动画导航菜单
选美大赛示例 你会选谁
jQuery实现HTML5时钟
功能强大的滚动播放插件JQ-Slide
万圣节快乐!!!
向上弹出菜单jQuery插件
htm5视差动画
jquery将列表倒转顺序
推荐一个jQuery分页插件
jquery animate
swift objc_setAssociatedObject block(version1.2 xcode6.4)
啸笑天
version
import UIKit
class LSObjectWrapper: NSObject {
let value: ((barButton: UIButton?) -> Void)?
init(value: (barButton: UIButton?) -> Void) {
self.value = value
Aegis 默认的 Xfire 绑定方式,将 XML 映射为 POJO
MagicMa_007
java POJO xml Aegis xfire
Aegis 是一个默认的 Xfire 绑定方式,它将 XML 映射为 POJO, 支持代码先行的开发.你开发服 务类与 POJO,它为你生成 XML schema/wsdl
XML 和 注解映射概览
默认情况下,你的 POJO 类被是基于他们的名字与命名空间被序列化。如果
js get max value in (json) Array
qiaolevip
每天进步一点点 学习永无止境 max 纵观千象
// Max value in Array
var arr = [1,2,3,5,3,2];Math.max.apply(null, arr); // 5
// Max value in Jaon Array
var arr = [{"x":"8/11/2009","y":0.026572007},{"x"
XMLhttpRequest 请求 XML,JSON ,POJO 数据
Luob.
POJO json Ajax xml XMLhttpREquest
在使用XMlhttpRequest对象发送请求和响应之前,必须首先使用javaScript对象创建一个XMLHttpRquest对象。
var xmlhttp;
function getXMLHttpRequest(){
if(window.ActiveXObject){
xmlhttp:new ActiveXObject("Microsoft.XMLHTTP
jquery
wuai
jquery
以下防止文档在完全加载之前运行Jquery代码,否则会出现试图隐藏一个不存在的元素、获得未完全加载的图像的大小 等等
$(document).ready(function(){
jquery代码;
});
<script type="text/javascript" src="c:/scripts/jquery-1.4.2.min.js&quo