6. 附录
6.1 常用API
6.1.1 Result
API |
说明 |
Result(boolean success) |
构造结果对象(设置成功标志) |
Result data(Object data) |
构造结果对象(添加返回数据) |
Result error(int error) |
构造结果对象(添加错误代码) |
boolean isSuccess() |
获取成功标记 |
void setSuccess(boolean success) |
设置成功标志 |
int getError() |
获取错误代码 |
void setError(int error) |
设置错误代码 |
Object getData() |
获取返回数据 |
void setData(Object data) |
设置返回数据 |
示例1:返回删除操作的结果
public Result delete(long id) {
boolean success = productService.deleteProduct(id);
return new Result(success);
}
示例2:生成成功标记的对象,设置返回数据“abc”
Result result = new Result(true).data(“abc”);
示例3:生成成功标记的对象,设置返回数据“abc”,并设置错误代码 1
Result result = new Result(true).data(“abc”).error(1);
6.1.2 Page
API |
说明 |
Page(String path) |
构造页面对象(指定显示页面,创建页面数据对象) |
Page data(String key, Object value) |
构造页面对象(设置页面数据) |
boolean isRedirect() |
判断显示页面是否为转发路径 |
String getPath() |
获取显示页面 |
void setPath(String path) |
设置显示页面 |
Map<String, Object> getData() |
获取页面数据 |
void setData(Map<String, Object> data) |
设置页面数据 |
示例1:获取所有产品类型数据作为页面数据,并指定显示页面为"product_create.jsp"
public Page create() {
List<ProductType> productTypeList = productService.getProductTypeList();
return new Page("product_create.jsp").data("productTypeList", productTypeList);
}
6.1.3 Dataset
API |
说明 |
<T> T select( Class<T> cls, String condition, Object... params ) |
按条件查询单条数据,并转为实体对象 |
<T> List<T> selectList( Class<T> cls, String condition, String order, Object... params ) |
查询多条数据,并转为列表对象 |
boolean insert( Class<?> cls, Map<String, Object> fieldMap ) |
插入一条数据 |
boolean update( Class<?> cls, Map<String, Object> fieldMap, String condition, Object... params ) |
按条件更新相关数据 |
boolean delete( Class<?> cls, String condition, Object... params ) |
按条件删除相关数据 |
int selectCount( Class<?> cls, String condition, Object... params ) |
按条件查询数据条数 |
<T> List<T> selectListForPager( int pageNumber, int pageSize, Class<T> cls, String condition, String sort, Object... params ) |
按条件查询多条数据,并转为列表(分页方式) |
<T> Map<Long, T> selectMap( Class<T> cls, String condition, Object... params ) |
按条件查询多条数据,并转为映射对象 |
<T> T selectColumn( Class<T> cls, String column, String condition, Object... Params ) |
按条件、列名查询单条数据,并转为对应的实体对象 |
<T> List<T> selectColumnList( Class<?> cls, String column, String condition, String sort, Object... Params ) |
按条件、列名查询多条数据,并转为对应的列表体对象 |
示例1:查询Id为1的对象
Product product = DataSet.select(Product.class, "id = ?", 1);
示例2:不限条件查询所有产品类型数据
List<ProductType> listProductType = DataSet.selectList(ProductType.class, "", "");
示例3:模糊查询name,查询数据条数
String condition = "name like ?";
Object[] params = {'%' + name + '%'};
long count = DataSet.selectCount(Product.class, condition, params);
示例4:模糊查询name,结果id 倒序排序,获取第一页前10条数据,并转化为对应的列表对象
int pageNumber= 1;
int pageSize = 10;
String condition = "name like ?";
String sort = "id desc";
Object[] params = {'%' + name + '%'};
List<Product> productList = DataSet.selectListForPager(pageNumber, pageSize, Product.class, condition, sort, params);
示例5:创建产品
Map<String, Object> fieldMap = new HashMap<String, Object>();
fieldMap2.put("id",2);
fieldMap2.put("name","Apple");
boolean result = DataSet.insert(Product.class, fieldMap);
示例6:修改id为2的产品
Map<String, Object> fieldMap = new HashMap<String, Object>();
fieldMap2.put("name","Pear");
boolean result = DataSet.update(Product.class, fieldMap, "id = ?", 2);
示例7:删除id为1的产品
boolean result = DataSet.delete(Product.class, "id = ?", 1);
6.1.4 DataContext
类 |
API |
说明 |
DataContext |
void init(HttpServletRequest request, HttpServletResponse response) |
初始化 |
void destroy() |
上下文容器销毁 |
|
DataContext getInstance() |
得到上下文实例 |
|
HttpServletRequest getRequest() |
获取Request对象 |
|
HttpServletResponse getResponse() |
获取Response对象 |
|
HttpSession getSession() |
获取Session对象 |
|
ServletContext getServletContext() |
获取Servlet上下文对象 |
|
Request |
void put(String key, Object value) |
将数据放入 Request 中 |
<T> T get(String key) |
从 Request 中获取数据 |
|
void remove(String key) |
移除 Request 中的数据 |
|
Map<String, Object> getAll() |
从 Request 中获取所有数据 |
|
Response |
void put(String key, Object value) |
将数据放入 Response 中 |
<T> T get(String key) |
从 Response 中获取数据 |
|
Map<String, Object> getAll() |
从 Response 中获取所有数据 |
|
Session |
void put(String key, Object value) |
将数据放入 Session 中 |
<T> T get(String key) |
从 Session 中获取数据 |
|
void remove(String key) |
移除 Session 中的数据 |
|
Map<String, Object> getAll() |
从 Session 中获取所有数据 |
|
removeAll() |
移除 Session 中所有的数据 |
|
Cookie |
void put(String key, Object value) |
将数据放入 Cookie 中 |
<T> T get(String key) |
从 Cookie 中获取数据 |
|
Map<String, Object> getAll() |
从 Cookie 中获取所有数据 |
|
ServletContext |
void put(String key, Object value) |
将数据放入 ServletContext 中 |
<T> T get(String key) |
从 ServletContext 中获取数据 |
|
void remove(String key) |
移除 ServletContext 中的数据 |
|
Map<String, Object> getAll() |
从 ServletContext 中获取所有数据 |
注1:Request,Response,Session,Cookie,ServletContext 为DataContext的内部类
注2:DataContext为线程安全的(线程安全解析请参考“ThreadLocal 那点事儿”)
示例1:获取HTTP请求内a的值
String a = DataContext.Request.get("a");
示例2:设置HTTP响应内a的值
DataContext.Response.put("a","123");
示例3:移除Seesion内的a
DataContext.Session.remove(“a”);
6.1.5 Multipart
API |
说明 |
Multipart(String fileName, String contentType, long fileSize, InputStream inputStream) |
构造媒体对象(参数为名称,类型,大小及字节流) |
String getFileName() |
获取媒体名称 |
String getContentType() |
获取媒体类型 |
long getFileSize() |
获取媒体大小 |
InputStream getInputStream() |
获取媒体输入字节流 |
6.2 代码生成器
6.2.1 安装方法
6.2.1.1 环境准备
操作系统:Windows X
Java:JDK1.6+
Maven: 3.0+
6.2.1.2 下载程序包
访问 http://yun.baidu.com/share/link?shareid=2807669150&uk=117938951 下载“Smart-SDK.rar”和“db.xls”
6.2.1.3 解压程序包
将“Smart-SDK.rar”解压至 “D:\Userlib\smart”,当然也可以是其他目录,但路径中不要有中文
将“db.xls”拷贝至“D:\Userlib\smart”下
6.2.1.4 配置环境变量
在环境变量内,添加SMART_HOME,值为“D:\Userlib\smart\smart-sdk”
同时在Path环境变量后面添加“%SMART_HOME%\bin;”
6.2.1.5 测试安装
打开 cmd 窗口,输入命令:smart
出现以下界面,说明安装成功
如果没有出现,可以输入命令 set,查看环境变量是否生效
6.2.2 使用示例
本示例将使用Smart-SDK进行一个hellosmart项目的创建,创建完成后,可查看到产品和产品类型两个实体的数据。
6.2.2.1 创建HelloSmart项目
打开CMD命令窗口
进入工作空间,我的是“D:\workspaces”
输入命令: smart create-app hellosmart
出现提示,分三步:
1/3 — Name: hellosmart —— 输入应用名称
2/3 — Group: com.smart —— 输入组织名称(即Maven的Group ID)
3/3 — Package: [com.smart.hellosmart] —— 确认应用包名,默认为:应用组名 + 应用名,如:com.smart.hellosmart,若无修改,可直接按回车键。
创建完成后,可直接使用IDEA打开项目(使用IDEA打开pom.xml文件即可打开hellowsmart项目)。
6.2.2.2 创建项目实体
回到CMD窗口,进入项目根目录:cd smarthello
输入命令:smart create-entity product
6.2.2.3 创建项目服务
输入命令:smart create-entity product
6.2.2.4 创建项目行为
输入命令:smart create-action product
6.2.2.5 创建项目页面
输入命令:smart create-page product
6.2.2.6 一步搞定CRUD
6.2.2.2 至 6.2.2.5 实现了项目的MVC(M:实体+服务,V:页面,C:行为)。如果你想一步都做完,并生成带有CRUD的代码,请输入这个神器的命令:smart create-crud customer
6.2.2.7 加载数据字典
数据库去哪里了?Smart提供了贴心的数据字典加载功能,你只要在excel内编辑好数据库内容,就可以帮你一步生成!
输入命令:smart load-dict D:\Userlib\smart\db.xls
(D:\Userlib\smart\db.xls为我的数据字段保存路径,参:6.2.1.3)
下图是由Smart自动生成的数据库语句图,你可以在你的DBMS内直径运行即可生成数据库表(注:数据库需手动创建,数据库名默认为项目名称hellosmart)
Smart load-dict命令实际实现了ORM,将实体文件和数据库语句都生成了,并且两者是一一对应的
6.2.2.8 运行测试
输入命令:smart run-test
注:smart test 默认数据库为hellosmart_test,并非正式库
6.2.2.9 运行运用
在ProductAction.java 页面内将index()方法的函数体改为“return new Result(true).data("hello Smart!");”
输入命令:smart run-app
IE内输入http://localhost:8080/hellosmart访问项目
IE内输入 http://localhost:8080/hellosmart/product
6.2.2.10 打包
输入命令: smart build-app
将项目打成war包
来源:oschina
链接:https://my.oschina.net/u/152468/blog/195385