BaseServer-Shooter轻量级Java Tomcat接口服务器框架

BaseServer-Shooter 轻量级服务器开发框架。该框架需要tomcat运行,使用该框架可以节省大部分不必要的重复代码。其中还封装了SQL数据库框架。这里就不说明怎么搭建和使用了,不懂可以去百度。

接口创建:

假设我们想要创建一个   服务器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

然后附上 码云地址



此基于springmvc框架,是服务器之间的交互框架. 分服务端和客户端. 没有什么背景,就是自己按自己想法随心写的一个...也没经过大量的测试,可以供小白参考参考.欢迎各位提出点改进意见... 使用: 1.引入此maven项目 2.服务端mvc增加配置 <bean class="com.osc.controller.OscMainController"></bean> 3.客户端mvc增加配置 <bean class="com.osc.processor.KingBeanScannerConfigurer"> // 这是接口存放的包..所有的接口都放此包下面 <property name="basePackage" value="com.eat.conInter"></property> <property name="urlMap"> <map> // 这里是配置服务端的地址.多个地址以次写下去...此处是示范啊.. <entry key="url1" value="http://192.168.3.113:8081/eat-app" /> <entry key="url2" value="PersonBean" /> </map> </property> </bean> 4.基本引入完毕..使用规则: 1.新建接口 [示范] ps:此接口要放入上面配置的包 com.eat.conInter 包下面 @Service("IExample") @IsConn(url=url1) //当有多个服务器的地址时此处须配置url=url1 就是上面配置的名字 ,默认是第一个地址.. public interface IExample { public Stu getName(String a,int b,Stu su); } 2 服务端实现接口 @Service("IExampleImpl") // 实现接口的类名 接口名+Impl @Invoke //ps:此注解是标识..无此注解将不能调用的类 public class IExampleImpl implements IExample{ public Stu getName(String a, int b, Stu su) { System.out.println("这是Impl.getName"); return new Stu(); } } 5.客户端调用 使用springmvc的注解注入 @Autowired private @Qualifier("IExample")IExample iExample; 然后可直接在方法里面调用 iExample.getName("",4,new Stu()); 编译执行,可以看到控制台打印这是 Impl.getName
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值