接口创建:
假设我们想要创建一个 服务器ip/call/temp/hello_word 地址的接口 例子如下
import com.alibaba.fastjson.JSONObject;
import com.shooter.note.Action;
import com.shooter.server.BaseHttpServlet;
import com.shooter.server.ServletDispose;
import javax.servlet.annotation.WebServlet;
@WebServlet("/call/temp/*")
public class TempServlet extends BaseHttpServlet {
@Action()
public void hello_word(JSONObject json, ServletDispose dispose) {
}
}
@WebServlet("/call/temp/*") 对应连接路径
hello_word方法对应 接口名。
本地访问全称 http://localhost:8080/call/temp/hello_word
获取客户端传给的参数:
注意方法名上需要加上 @Action()的注解 该接口才能生效读取传至参数可在dispose种去读
dispose.getValue("name");
该方法不会返回null。如果没有参数则会返回空字符。
如果对方使用application/json协议传值可先使用方法初始化之后在进行取值
dispose.initApplicationJson();
给客户端返回数据:
如果想给客户端返回参数可使用方法中传过来的json对象,该json在进入方法的时候里面默认已有 code=200的参数值。如果接口顺利执行 则不用手动塞入code =200的操作了。
完整使用案例
@WebServlet("/call/temp/*")
public class TempServlet extends BaseHttpServlet {
@Action()
public void hello_word(JSONObject json, ServletDispose dispose) {
String name = dispose.getValue("name");
json.put("name",name);
}
}
访问结果
接收上传文件:
接收上传文件请在接口进入的时候执行该代码
moreFileValueUpload(dispose,10,"jpg,png");
第一个参数,默认传dispose,第二个为上传单个文件限制大小 单位/M,第三个参数为限制上传的文件类型。
然后以下操作可以获取 上传的文件数据列表,列表中数据中只存在 文件的基本信息,入文件名,上传的表单名,文件存放路径的完整路径,文件只存在临时路径,需要复制到自定的目录下还需自己操作;
ArrayList<UploadFile> uploadFiles = dispose.getUploadFile();
完整代码如下
@Action()
public void hello_word(JSONObject json, ServletDispose dispose) {
moreFileValueUpload(dispose,10,"jpg,png");
ArrayList<UploadFile> uploadFiles = dispose.getUploadFile();
}
数据库配置:
数据库配置文件sql_config.properties
具体配置方法
#sql url地址
jdbc_url=jdbc:mysql://127.0.0.1:3306/app_live?useSSL=false
#JDBC的驱动
driver_class=com.mysql.jdbc.Driver
#连接帐号
db_username=root
#连接密码
db_password=root
#最大连接数
maxPoolSize=1000
#最小连接数
minPoolSize=10
#指定数据库连接池中处于空闲状态的数据库连接的最大数据
maxIdleTime=10
#30秒检查一次连接的空闲
idleConnectionTestPeriod=30
#连接超时设置50000毫秒
checkoutTimeout=5000
#每次增长几个连接
acquireIncrement=10
#批处理的语句上限数量
maxStatements=1000
数据库说明:
假设数据库种有Db_Admin这个数据表,表中有id、username、password等字段,我们需要创建一下改数据模型
public class Db_Admin extends BaseDataDb {
@Id
private String id;
private String username;
private String password;
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Db_Admin必须继承BaseDataDb private String id;必须加上@Id 注解
类中所有对象均使用String类型。请不要使用int、boolean等其他非String类型。
增删改查数据库:
增删改默认已做事物处理。
查询数据库
List<Db_Admin> dbAdmins = DBManager.query(Db_Admin.class,null);
查询单条数据
Db_Admin db_admin = (Db_Admin) DBManager.querySingle(new Db_Admin(),null);
查询数据条数
int count = DBManager.queryCount(Db_Admin.class,null);
执行该代码则查处数据表Db_Admin中所有数据。返回该集合不会为null,size只会等于0;
如果需要增加分页查询或者条件where查询等其他条件查询说明如下:
条件查询均使用使用SQLWhere这个封装类
SQLWhere where = new SQLWhere()
.addWhere("username", "张三") //默认 查询张三的用户
.addWhere("username", "0", ">") //查询username > 0 的用户
.addWhereLike("name", "张") //模糊查询 username有张子的用户
.setPageWhere("1", "10");//分页查询 每页10条 查询第一页
List<Db_Admin> dbAdmins = DBManager.query(Db_Admin.class, where);
链表查询:
SQLWhere where = new SQLWhere().addWhereSql("id",
new Db_Admin().toSelectSql(
new SQLWhere().addWhere("username", "张三")
, "id"
)
);
Db_Admin db_admin = (Db_Admin) DBManager.querySingle(new Db_Admin(), where);
第一个id为sql 查询条件的key,第二个id为链表中查询的单个id
改代码格式化出来的sql如下
SELECT * FROM Db_Admin WHERE id =(SELECT Db_Admin.id FROM Db_Admin WHERE username = '张三')
当然,该链表查询如果链表中存在多条数据则会报错。
可使用 addWhereIn 链表多条查询,使用方式和多条addWhereSql一致
SQLWhere where = new SQLWhere().addWhereIn("id",
new Db_Admin().toSelectSql(
new SQLWhere().addWhere("username", "张三")
, "id"
)
);
Db_Admin db_admin = (Db_Admin) DBManager.querySingle(new Db_Admin(), where);
SELECT * FROM Db_Admin WHERE id in((SELECT Db_Admin.id FROM Db_Admin WHERE username = '张三'))
插入数据:
Db_Admin db_admin = new Db_Admin();
db_admin.setUsername("张三");
db_admin.setPassword("123456");
boolean b = DBManager.insert(db_admin);
删除数据:
删除id为1的数据
Db_Admin db_admin = new Db_Admin();
db_admin.setId("1");
boolean b = DBManager.delete(db_admin,null);
或者
boolean b = DBManager.delete(new Db_Admin(),new SQLWhere().addWhere("id","1"));
更新数据:
Db_Admin db_admin = (Db_Admin) DBManager.querySingle(new Db_Admin(), where);
if (db_admin != null) {
db_admin.setUsername("凤姐");
boolean b = DBManager.update(db_admin, null);
}
批量操作:
ArrayList<BaseDataDb> dataDbs = new ArrayList<>();
for (int i = 0; i < 100; i++) {
Db_Admin dbAdmin = new Db_Admin();
dbAdmin.setUsername("我是" + i);
dataDbs.add(dbAdmin);
}
boolean b = DBManager.insertAll(dataDbs);
结果已做事物,成功则全部成功。失败则全部失败。
删除使用
public static boolean deleteAll(ArrayList<BaseDataDb> dataDbs)
修改使用
public static boolean updateAll(ArrayList<BaseDataDb> dataDbs)
删改,默认对id进行操作。所以集合中所有的数据种id必须存在
混合批量操作:
混合批量操作使用的是批量执行sql语句的方法
public static boolean transactionCommit(ArrayList<String> dataDbs) {
具体使用方式如下
ArrayList<String> dataDbs = new ArrayList<>();
//添加批量执行100条插入操作
for (int i = 0; i < 100; i++) {
Db_Admin dbAdmin = new Db_Admin();
dbAdmin.setUsername("我是" + i);
dataDbs.add(dbAdmin.toInsertSql());
}
//添加 执行删除id 为 1 的数据
Db_Admin dbAdmin1 = new Db_Admin();
dataDbs.add(dbAdmin1.toDeleteSql(new SQLWhere().addWhere("id", "1")));
//添加 执行删除id为 2 的数据
Db_Admin dbAdmin2 = new Db_Admin();
dbAdmin2.setId("2");
dataDbs.add(dbAdmin2.toDeleteSql());
//将id为3的数据 修改username为小白
Db_Admin dbAdmin3 = new Db_Admin();
dbAdmin3.setId("3");
dbAdmin3.setUsername("小白");
dataDbs.add(dbAdmin3.toUpdateSql());
boolean b = DBManager.transactionCommit(dataDbs);
有其他bug疑问的请留言或者留言邮箱 1308715179@qq.com
然后附上 码云地址