项目依赖:
<dependency>
<groupId>io.jboot</groupId>
<artifactId>jboot</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.20</version>
</dependency>
配置参考:
#type default undertow (support:undertow)
jboot.server.type=undertow
jboot.server.host=0.0.0.0
jboot.server.port=8091
jboot.server.contextPath=/
jboot.datasource.type = mysql
jboot.datasource.url = jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8&useSSL=true
jboot.datasource.user = root
jboot.datasource.password = 123456
jboot.swagger.path = /swaggerui
jboot.swagger.title = Jboot API \u6D4B\u8BD5
jboot.swagger.description = \u914D\u7F6E\u8BF4\u660E
jboot.swagger.version = 1.0
jboot.swagger.termsOfService = http://jboot.io
jboot.swagger.contact = \u8054\u7CFB\u65B9\u5F0F...
jboot.swagger.host = 127.0.0.1:80
jboot Controller 代码参考:
@RequestMapping("/test")
@Api(description = "Jboot测试Controller", basePath = "/test", tags = "test")
public class TestController extends JbootController {
public void testDB() {//sum(cash_amount)
Record result = Db.findFirst("select id,sum_balance,cash_amount "
+ "from t_buyer_user as a left join "
+ "(select cash_user_id,sum(cash_amount) as cash_amount "
+ "from t_balance_cash where cash_pay_status = 0 group by cash_user_id ) as b "
+ "on a.id = b.cash_user_id where a.id = ? ", 794L);
renderJson(result);
}
public void subject() {
Subject subject = SecurityUtils.getSubject();
renderJson(subject.getPrincipal());
}
public void login() {
UsernamePasswordToken token = new UsernamePasswordToken(getPara("username"), getPara("password"));
try {
Subject subject = SecurityUtils.getSubject();
subject.login(token);
if (subject.isAuthenticated()) {
renderJson("login");
return;
}
} catch (UnknownAccountException une) {
renderJson("用户名不存在");
} catch (LockedAccountException lae) {
renderJson("用户被锁定");
} catch (IncorrectCredentialsException ine) {
renderJson("用户名或密码不正确");
} catch (ExcessiveAttemptsException exe) {
renderJson("账户密码错误次数过多,账户已被限制登录1小时");
} catch (Exception e) {
e.printStackTrace();
renderJson("登录失败!未知错误,请稍后重试");
} finally {
}
}
public void session() {
setSessionAttr("s1", "okkpp");
getSessionAttr("s1");
HttpSession session = getSession();
session.getAttribute("s1");
renderJson();
}
/**
* 多次调用导致结果被覆盖
* 记得使用return提前结束
*/
public void rendertest() {
boolean result = true;
if(result) {
renderJson("result 1");
return;
}
renderJson("result 2");
}
/**
* getBean getModel
* 默认类名.属性
* 或者使用 "" 代替 不使用类名 但是不在属性范围内的参数 会引起异常
* getModel专门用来获取Model类
*/
public void bean() {
//TBuyerUser user = getBean(TBuyerUser.class, "");
//System.out.println(user.getNickname());
renderJson();
}
public void model() {
//TBuyerUser user = getModel(TBuyerUser.class, "");
//System.out.println(user.getNickname());
renderJson();
}
@ApiOperation(value = "参数测试", httpMethod = "GET", notes = "注释")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "用户id", paramType = "query", dataType = "String", required = false),
@ApiImplicitParam(name = "okkpp", value = "字段名", paramType = "query", dataType = "String", required = false), })
public void paramap(@Para("id") int id) {
// 通过形参获取的参数 依然会出现在getParaMap()中
System.out.println(getPara("okkpp"));
Map<String, String[]> paraMap = getParaMap();
for (String key : paraMap.keySet()) {
System.out.println(key + ":" + paraMap.get(key).toString());
}
renderJson();
}
/**
* 入参为基本类型 @Para 必须标记value
* @param id
* @param num
*/
public void para2(int id, @Para("num")int num, @Para("str")String str) {
System.out.println(id+"-"+num+str);
renderJson(id+"-"+num+str);
}
public void para(@Para("model") Model model, @Para("") Model other) {
// 入参形式应为 model.id @Para("")说明不需要带前缀直接id
System.out.println("默认方法");
System.out.println(model.getMap().toString());
renderJson();
}
public void test() {
Map<String, Object> params = new HashMap<String, Object>(16);
params.put("model", new Model(1, "mark"));
params.put("model2", new Model(2, "okkpp"));
params.put("model.id", 3);
params.put("model.mark", "duck");
params.putAll(getParaMap());
Jboot.httpPost("http://127.0.0.1:8080/test/para", params);
renderJson();
}
// @Inject
// private TBuyerUser dao = new TBuyerUser().dao();
public void db2() {
// TBuyerUser user = dao.findFirst("select * from t_buyer_user where id = ?", getPara("id"));
// if(null!=user) {
// renderJson(user);
// }else {
// renderJson("not find");
// }
}
public void db() {
//find方法把查询的结果集都收集到map里 存到Record的map
List<Record> records = Db.find("select now()");
renderJson(records);
}
public static void main(String[] args) {
Jboot.run(args);
}
}
jboot 源码生成器示例:
public class CodeGenerator {
public static void main(String args[]){
//依赖model的包名
String modelPackage = "okkpp.model";
//生成service 的包名
String basePackage = "okkpp.service";
//生成model dao层
//JbootModelGenerator.run(modelPackage);
String baseModelPackage = modelPackage + ".base";
String modelDir = PathKit.getWebRootPath() + "/src/main/java/" + modelPackage.replace(".", "/");
String baseModelDir = PathKit.getWebRootPath() + "/src/main/java/" + baseModelPackage.replace(".", "/");
System.out.println("start generate...");
System.out.println("generate dir:" + modelDir);
//去掉表前缀
MetaBuilder metaBuilder = CodeGenHelpler.createMetaBuilder();
metaBuilder.setRemovedTableNamePrefixes("t_");
List<TableMeta> tableMetaList = metaBuilder.build();
CodeGenHelpler.excludeTables(tableMetaList, null);
new JbootBaseModelGenerator(baseModelPackage, baseModelDir).generate(tableMetaList);
new JbootModelnfoGenerator(modelPackage, baseModelPackage, modelDir).generate(tableMetaList);
//生成service
//JbootServiceGenerator.run(basePackage, modelPackage);
System.out.println("start generate...");
new JbootServiceInterfaceGenerator(basePackage, modelPackage).generate(tableMetaList);
new JbootServiceImplGenerator(basePackage , modelPackage).generate(tableMetaList);
}
}