用liferay实现的增删改查例子-book管理系统
liferay 这个框架是一个开源的项目,大家可以修改源代码,来实现自己的需求。但是关于liferay的开发资料中文的很少关于liferay的基础知识,大家可以百度学习一下,再来看下边的例子
首先需要搭建环境,搭建环境百度一大堆,在这里不废话,直接上代码,
开发的步骤1:首先配置需要的配置的文件
<?xml version="1.0"?>
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display 6.1.0//EN" "http://www.liferay.com/dtd/liferay-display_6_1_0.dtd">
<display>
<category name="category.ebizwindow.book">//在这个地方大家需要修改一下名字,不然的话在liferay的界面上不会显示出来你写的项目
<portlet id="BookSystem" />
</category>
</display>
2个配置的文件是
<?xml version="1.0"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">
<portlet>
<portlet-name>BookSystem</portlet-name>
<display-name>BookSystem</display-name>
<portlet-class>com.ebizwindow.exceed.portlet.BookPortlet</portlet-class>//在这地方修改你要写的portlet的名字,默认生成的是JSPPortlet
<init-param>
<name>view-jsp</name>
<value>/jsp/book/mybook-list.jsp</value>//这个页面是你要访问的第一个页面,在这个页面是通过doView方法找到的页面。
</init-param>
<init-param>
<name>edit-jsp</name>
<value>/jsp/edit.jsp</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
</supports>
<supported-locale>en</supported-locale>
<supported-locale>zh_CN</supported-locale>
<resource-bundle>content.Language-ext</resource-bundle>
<portlet-info>
<title>BookSystem</title>
<short-title>BookSystem</short-title>
<keywords>BookSystem</keywords>
</portlet-info>
<security-role-ref>
<role-name>administrator</role-name>
</security-role-ref>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power-user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
</portlet-app>
3.是service.xml的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 5.2.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_5_2_0.dtd">
<service-builder package-path="com.ebizwindow.exceed">
<namespace>BookSystem</namespace>
<entity name="Book" local-service="true" remote-service="false">//remote-service="false"这个设置为false的就是自动生成的时候不是生成一些方法, local-service="true"这个设置为true就会在项目中生成一些程序员要调用的方法。
<!-- company 公司的id -->
<column name="companyId" type="long" />//这个companyId就是自动有的这个不需要修改,就是公司的id
<!-- PK fields -->
<column name="bookId" type="long" primary="true" />//这个就是你的实体的id
<!-- Other fields 实体的属性-->
<column name="bookName" type="String" />
<column name="bookAuthor" type="String" />
<column name="bookAddress" type="String" />
<column name="bookPrice" type="double" />
<column name="bookDate" type="Date" />
<!-- Order 检索出来的数据按照name排序-->
<order by="asc">
<order-column name="bookName" />
</order>
<!-- Finder methods -->
<finder name="companyId" return-type="Collection">//对应自动生成的方法是getCompanyId(long companyId)。顾名思义就是按照公司的id检索所有的数据
<finder-column name="companyId" />
</finder>
<!-- 这个是根据用户的名字返回图书 -->
<finder return-type="Collection" name="bookName">//对应生成的方法是getBookName(String bookName)
<finder-column name="bookName" />
</finder>
<!-- 根据作者来查看图书 -->
<finder return-type="Collection" name="bookAuthor">//对应生成的方法是getBookAuthor(String bookAuthor)
<finder-column name="bookAuthor" />
</finder>
</entity>
</service-builder>
需要注意:根据实体的主键来检索一条数据,这个方法是不需要配置,默认会生成.
好吧,罗嗦了一大会,配置文件就搞定了,点击builder.xml,点击builder-service就会自动生成方法和实体,程序员只需要写自己的逻辑的代码就行了。
下面开始写portlet,这个portlet跟大家学的servlet有很大相似,但是也有不同,自己百度查查就知道。
package com.ebizwindow.exceed.portlet; import com.ebizwindow.exceed.model.Book;
import com.ebizwindow.exceed.service.BookLocalServiceUtil;
import com.liferay.compat.portal.util.PortalUtil;
import com.liferay.counter.service.CounterLocalServiceUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portlet.PortletURLFactoryUtil; import java.io.IOException; import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletMode;
import javax.portlet.PortletModeException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.PortletResponse;
import javax.portlet.PortletURL;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.WindowStateException; public class BookPortlet extends GenericPortlet { private final static String FORWARD = "forward"; private final static String OPERATION = "operation"; public void init() throws PortletException {
editJSP = getInitParameter("edit-jsp");
helpJSP = getInitParameter("help-jsp");
viewJSP = getInitParameter("view-jsp");
} public void doList(PortletRequest portletRequest){ long companyId = PortalUtil.getCompanyId(portletRequest); _log.info(companyId+"ggggggggg$$$$$$$$$$$$$$$$$$$$");
try {
//得到数据库中所有的书籍
List<Book> books = BookLocalServiceUtil.searchByCompanyId(companyId); _log.info(StringUtil.merge(books)+"abcdef============================="); //然后把书发送给jsp.首先把图书存到响应中
portletRequest.setAttribute("books", books); } catch (SystemException e) {
e.printStackTrace();
} } public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException { String jspPage = renderRequest.getParameter(FORWARD);
if (jspPage == null) {
this.doList(renderRequest);
}
jspPage = jspPage == null ? this.viewJSP : jspPage;
include(jspPage, renderRequest, renderResponse); } public void doEdit(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException { if (renderRequest.getPreferences() == null) {
super.doEdit(renderRequest, renderResponse);
} else {
include(editJSP, renderRequest, renderResponse);
}
} public void doHelp(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException { include(helpJSP, renderRequest, renderResponse);
} public static PortletURL getPortletURL(ActionRequest actionRequest) throws PortalException, SystemException {
long groupId = PortalUtil.getScopeGroupId(actionRequest);
String portletId = PortalUtil.getPortletId(actionRequest);
long plid = PortalUtil.getPlidFromPortletId(groupId, portletId);
PortletURL redirectURL = PortletURLFactoryUtil.create(PortalUtil.getHttpServletRequest(actionRequest),
portletId, plid, PortletRequest.ACTION_PHASE);
try {
redirectURL.setPortletMode(actionRequest.getPortletMode());
redirectURL.setWindowState(actionRequest.getWindowState());
} catch (PortletModeException e) {
_log.error(e);
} catch (WindowStateException e) {
_log.error(e);
}
return redirectURL;
} public void processAction(ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException { //得到操作的名称
String actionName = ParamUtil.getString(actionRequest, OPERATION); if (actionName != null) {
String forward = null;
_log.info(ActionRequest.ACTION_NAME + " = " + actionName); if (actionName.equals("list")) {
//首先执行这个请求的时候,就找到数据要去的页面
//1:首先从数据库中选出来所有的数据,根据公司的id就行了
//首先获取id
this.doList(actionRequest); forward = "/jsp/book/mybook-list.jsp";
} else if(actionName.equals("details")) {
// 查看书的详细的信息1:首先获得前台界面传过来的id
long bookId = ParamUtil.getLong(actionRequest, "bookId",0L); //在调用本地方法的实现的类
Book book = null;
try {
book = BookLocalServiceUtil.getBook(bookId);
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //把这本书发送给界面就可以
actionRequest.setAttribute("book", book); forward = "/jsp/book/mybook-details.jsp";
} else if (actionName.equals("load")) {
//如果的到的参数load的话就是要跳转的页面 _log.info("----------------------------------------------"+actionName+"-------success");
forward = "/jsp/book/mybook-add.jsp"; } else if(actionName.equals("add")) {
_log.info("@@@@@@@@@@@@@@@@@@@@@@@");
//首先获取信息页面传过来的信息
String bookName = ParamUtil.getString(actionRequest, "bookName",StringPool.BLANK);
String bookAuthor =ParamUtil.getString(actionRequest, "bookAuthor",StringPool.BLANK);
String bookAddress = ParamUtil.getString(actionRequest, "bookAddress",StringPool.BLANK);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date bookDate = (Date) ParamUtil.getDate(actionRequest, "bookDate", dateFormat);
double bookPrice = ParamUtil.getDouble(actionRequest, "bookPrice",0.0); long companyId = PortalUtil.getCompanyId(actionRequest);
_log.info(bookName+"--"+bookAuthor+"--"+bookAddress+"--"+bookPrice+"--"+bookDate);
//添加图书,添加图书的时候你需要考虑id
long bookId = 0L;
try {
bookId = CounterLocalServiceUtil.increment(Book.class.getName());
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //创建一个book的引用
Book book = BookLocalServiceUtil.createBook(bookId); book.setBookAddress(bookAddress);
book.setBookAuthor(bookAuthor);
book.setBookDate(bookDate);
book.setBookName(bookName);
book.setBookPrice(bookPrice);
book.setCompanyId(companyId);
//调用添加的方法添加到数据库
try {
BookLocalServiceUtil.addBook(book);
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} this.doList(actionRequest);
//数据添加到数据库中之后就到list的界面上 //重定向
PortletURL redirect = null;
try {
redirect = getPortletURL(actionRequest);
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
redirect.setPortletMode(PortletMode.VIEW);
actionResponse.sendRedirect(redirect.toString()); }else if (actionName.equals("edit")){
//首先获取用户要修改的id,然后根据id找到信息
long bookId = ParamUtil.getLong(actionRequest, "bookId",0L); Book book = null;
try {
book = BookLocalServiceUtil.getBook(bookId);
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //把这本书发送给界面就可以
actionRequest.setAttribute("book", book); forward = "/jsp/book/mybook-edit.jsp";
} else if(actionName.equals("editTrue")) {//得到的方法是修改
//首先获得要编辑图书的id
long bookId = ParamUtil.getLong(actionRequest, "bookId",0L);
//根据id找到图书
Book book = null;
try {
book= BookLocalServiceUtil.getBook(bookId);
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //获得提交修改后的数据的参数
String bookName = ParamUtil.getString(actionRequest, "bookName",StringPool.BLANK);
String bookAuthor =ParamUtil.getString(actionRequest, "bookAuthor",StringPool.BLANK);
String bookAddress = ParamUtil.getString(actionRequest, "bookAddress",StringPool.BLANK);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date bookDate = (Date) ParamUtil.getDate(actionRequest, "bookDate", dateFormat);
double bookPrice = ParamUtil.getDouble(actionRequest, "bookPrice",0.0);
book.setBookAddress(bookAddress);
book.setBookAuthor(bookAuthor);
book.setBookDate(bookDate);
book.setBookName(bookName);
book.setBookPrice(bookPrice);
//调用数据库中修改的方法
try {
BookLocalServiceUtil.updateBook(book);
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} PortletURL redirect = null;
try {
redirect = getPortletURL(actionRequest);
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
redirect.setPortletMode(PortletMode.VIEW);
actionResponse.sendRedirect(redirect.toString()); } else if (actionName.equals("delete")){
//删除的方法.首先获得要删除的数据的id
long bookId = ParamUtil.getLong(actionRequest, "bookId",0L);
//调用数据库删除的方法
try {
BookLocalServiceUtil.deleteBook(bookId);
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} PortletURL redirect = null;
try {
redirect = getPortletURL(actionRequest);
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
redirect.setPortletMode(PortletMode.VIEW);
actionResponse.sendRedirect(redirect.toString()); }else{
forward = this.helpJSP;
} _log.info(FORWARD + " = " + forward); if(forward != null){
actionResponse.setRenderParameter(FORWARD, forward);
} }
} public void doDispatch(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException { String jspPage = renderRequest.getParameter(FORWARD); if (jspPage != null) {
include(jspPage, renderRequest, renderResponse);
} else {
super.doDispatch(renderRequest, renderResponse);
}
} protected void include(String path, RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException { PortletRequestDispatcher portletRequestDispatcher =
getPortletContext().getRequestDispatcher(path); if (portletRequestDispatcher == null) {
_log.error(path + " is not a valid include");
} else {
portletRequestDispatcher.include(renderRequest, renderResponse);
}
} protected String editJSP;
protected String helpJSP;
protected String viewJSP; private static Log _log = LogFactoryUtil.getLog(BookPortlet.class); }
界面代码:
mybook-list.jsp界面
<%@ page language="java" import="java.util.*" pageEncoding="Utf-8"%>
<%@page import="javax.portlet.PortletPreferences"%>
<!-- 引入init.jsp -->
<%@ include file="/init.jsp"%>
<!-- 使用portlet标签 来设计页面-->
<!-- 首先定义portlet提交的路径
<portlet:actionURL var="searchURL">
<portlet:param name="operation" value="example.list" />
</portlet:actionURL>
-->
<portlet:actionURL var="listURL"> <portlet:param name="operation" value="list" /> </portlet:actionURL> <!-- form表单的内容 -->
<form action="<%=listURL %>" method="post"> <fieldset> <table>
<tr>
<legend>图书列表</legend>
<th>图书名称</th>
<th>图书作者</th>
<th>图书出版社</th>
<th>图书出版日期</th>
<th>图书价格</th>
</tr> <%
//首先获取后台发过来的数据List<Orenge> results = (List<Orenge>)renderRequest.getAttribute("results");
List<Book> books = (List<Book>)renderRequest.getAttribute("books"); if (books.size()>0 || books != null) {
for (Book book:books) {%> <td>
<portlet:actionURL var="detailBookURL" windowState="<%=LiferayWindowState.EXCLUSIVE.toString() %>">
<portlet:param name="operation" value="details" />
<portlet:param name="bookId" value='<%=String.valueOf(book.getBookId())%>' />
</portlet:actionURL>
<a href="javascript:showOrenge('<%=detailBookURL %>', 'book')"><%=book.getBookName() %></a>
</td> <td>
<%=book.getBookAuthor() %> </td> <td>
<%=book.getBookAddress() %> </td> <td>
<%=book.getBookDate() %> </td> <td>
<%=book.getBookPrice() %> </td> <td>
<liferay-ui:icon-menu>
<portlet:actionURL var="editBookURL">
<portlet:param name="operation" value="edit" />
<portlet:param name="bookId" value='<%=String.valueOf(book.getBookId())%>' />
</portlet:actionURL>
<liferay-ui:icon image="edit" url="<%=editBookURL %>" message="edit"/> <portlet:actionURL var="deleteBookURL">
<portlet:param name="operation" value="delete"/>
<portlet:param name="action" value="delete"/>
<portlet:param name="bookId" value='<%=String.valueOf(book.getBookId())%>' />
</portlet:actionURL>
<liferay-ui:icon-delete url="<%=deleteBookURL %>" />
</liferay-ui:icon-menu>
</td> <% } } %> </table> </fieldset> <div>
<portlet:actionURL var="addBookURL">
<!-- 找到添加的页面 -->
<portlet:param name="operation" value="load" /> </portlet:actionURL>
<input type="button" value="添加" onclick="javascript:location.href='<%=addBookURL %>'"> </div> </form>
2.mybook-add.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/init.jsp" %>
<portlet:actionURL var="addBookURL">
<!-- 执行add的操作 -->
<portlet:param name="operation" value="add" /> </portlet:actionURL> <form action="<%=addBookURL %>" method="post">
图书名称:<input type="text" name="bookName" /></br>
图书作者:<input type="text" name="bookAuthor"/></br>
出版社:<input type="text" name="bookAddress"/></br>
出版日期:<input type="text" name="bookDate"/></br>
图书价格:<input type="text" name="bookPrice"/></br> <input type="submit" value="提交"/>
<input type="reset" value="重置"/>
</form>
3.mybook-edit.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/init.jsp" %> <%
//得到要修改的图书
Book book = (Book)renderRequest.getAttribute("book"); %> <portlet:actionURL var="editBookURL">
<portlet:param name="operation" value="editTrue" />
<portlet:param name="bookId" value='<%=book != null ? String.valueOf(book.getBookId()) : "0" %>' />
</portlet:actionURL> <form action="<%=editBookURL %>" method="post">
图书名称:<input type="text" name="bookName" value='<%=book != null ? String.valueOf(book.getBookName()):"" %>'/></br>
图书作者:<input type="text" name="bookAuthor" value='<%=book != null ? String.valueOf(book.getBookAuthor()) :"" %>'/></br>
出版社:<input type="text" name="bookAddress" value='<%=book != null ? String.valueOf(book.getBookAddress()):"" %>'/></br>
出版日期:<input type="text" name="bookDate" value='<%=book != null ? String.valueOf(book.getBookDate()):"" %>'/></br>
图书价格:<input type="text" name="bookPrice" value='<%=book != null ? String.valueOf(book.getBookPrice()):"" %>'/></br> <input type="submit" value="提交"/>
<input type="reset" value="重置"/>
</form>
4.mybook-detail.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!-- 引入init.jsp -->
<%@ include file="/init.jsp"%>
<%
Book book = (Book)renderRequest.getAttribute("book");
%> <style>
#bookcontent{ } </style> <div id = "bookcontent">
<table>
<tr>
<td>图书名称</td>
<td>图书作者</td>
<td>出版地址</td>
<td>出版日期</td>
<td>图书价格</td>
</tr> <tr>
<td>
<%=book.getBookName() %>
</td> <td>
<%=book.getBookAuthor() %>
</td> <td>
<%=book.getBookAddress() %>
</td> <td>
<%=book.getBookDate() %>
</td> <td>
<%=book.getBookPrice() %>
</td> </tr> </table>
</div>
终于结束了点击运行服务器,就可以实现了,下面动手试试吧!
用liferay实现的增删改查例子-book管理系统的更多相关文章
- spring boot2+jpa+thymeleaf增删改查例子
参考这遍文章做了一个例子,稍微不同之处,原文是spring boot.mysql,这里改成了spring boot 2.Oracle. 一.pom.xml引入相关模块web.jpa.thymeleaf ...
- 初次尝试PHP——一个简单的对数据库操作的增删改查例子
第一次学习PHP,很多人说PHP是最好的语言,学习了一点点,还不敢说这样的话,不过确实蛮好用的. 做了一个简单的对数据库的增删改查的操作,主要是将四种操作写成了独立的函数,之后直接调用函数.以下是代码 ...
- Java 实现一个 能够 进行简单的增删改查的 超市管理系统
1. 首先编写一个 Fruitltem 的商品类, 描述 商品的基本信息. 代码如下: 保证详细, 运行的起来, 有什么 问题也可以评论留言. /* * 自定义类, 描述商品信息 * * 商品的属性: ...
- DBUtils 增删改查例子
sql CREATE TABLE [dbo].[Person] ( , ) NOT NULL , ) COLLATE Chinese_PRC_CI_AS NULL , [age] [int] NULL ...
- JSP的一个增删改查例子和总结
总结的几点: 1.在jsp中注意<%! %>声明代码块中的变量只会在项目开始的时候第一次运行jsp的时候执行一遍,有点类似于java类中的static代码块,所以如果是会改变的值不应该声明 ...
- MVC增删改查例子
一.显示用户列表1.新建UserInfoController控制器 public ActionResult Index() { DataTable table = SQLHelper.ExecuteR ...
- Redis:五种数据类型的简单增删改查
Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_ke ...
- 一个在ASP.NET中利用服务器控件GridView实现数据增删改查的例子
备注:这是我辅导的一个项目开发组的一个例子,用文章的方式分享出来,给更多的朋友参考.其实我们这几年的项目中,都不怎么使用服务器控件的形式了,而是更多的采用MVC这种开发模式.但是,如果项目的历史背景是 ...
- 前端的CRUD增删改查的小例子
前端的CRUD增删改查的小例子 1.效果演示 2.相关代码: <!DOCTYPE html> <html lang="en"> <head> & ...
随机推荐
- [Sdoi2016]平凡的骰子
描述 这是一枚平凡的骰子.它是一个均质凸多面体,表面有n个端点,有f个面,每一面是一个凸多边形,且任意两面不共面.将这枚骰子抛向空中,骰子落地的时候不会发生二次弹跳(这是一种非常理想的情况).你希望知 ...
- 记住密码, 不需要默认填写的input框中设置 autocomplete="new-password"
- .net C#中页面之间传值传参的六种方法
1.QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能 ...
- 语音AT命令参考
不知道 这AT指令是不是通用的,尝试过的给我个回复 语音命令 命令 描述 +FCLASS=8 进入语音模式.AT+FCLASS=8 将调制解调器置入语音模式.扩音电话和TAM模式包括在通用语音模式中, ...
- WIN7开启wifi热点
1.首先,先确定自己的笔记本网卡支持“启动承载网络”的功能,使用管理员运行cmd命令.启用管理员运行CMD的方法Windows-所有程序-附件-运行(右键,以管理员身份运行)在弹出的CMD窗口里面敲击 ...
- Mongoose学习参考资料
我们学习node操作mongodb数据库时,可能经常要用到MongoDB 数据库的模型工具Mongoose,下面是我整理的一些学习资料: 番外篇之——使用 Mongoose:https://githu ...
- jquery的$.each如何退出循环和退出本次循环
https://api.jquery.com/jQuery.each/ We can break the $.each() loop at a particular iteration by maki ...
- Scala日期处理
计算时间间隔 val d = new java.text.SimpleDateFormat("yyyyMMdd HH:mm:ss").format(new java.util.D ...
- 2017年TOP100summit开幕在即, 15位大咖担任联席主席甄选最值得学习的100个研发案例
从万维网到物联网,从信息传播到人工智能,20年间软件研发行业趋势发生了翻天覆地的变化.大数据.云计算.AI等新兴领域逐渐改变我们的生活方式,Devops.容器.深度学习.敏捷等技术方式和工作理念对软件 ...
- 数据恢复:如何恢复Linux中意外删除的Oracle和MySQL数据库
今天有客户的数据库意外被删除了整个目录中的数据文件,操作系统级别的删除,然而幸运的是这个数据库没有崩溃,仍然处于 open 状态的时候,客户就发现了问题,求助到我们,最终完整地恢复了所有数据文件. 在 ...