Newbie JDBC 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Newbie JDBC 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Newbie JDBC 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 Java
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 SuperShaunChyxion
适用人群 未知
收录时间 2016-04-19

软件简介

几年前写的一个JDBC工具,一直没时间整理出来,断断续续整理了一下,具有特性:

  • 数组SQL参数支持。

  • 分页支持(Oracle,SQLServer,MySQL等),可自定义分页逻辑。

  • 数据库连接共享。

  • 批量数据操作。

  • 轻量,仅依赖slf4j。


为什么要有这玩意,行业内已经有了Spring JDBC,Commons DbUtils等,整体来说实现思路相似,算是重新发明轮子,

但是如果您想尝尝鲜,可以尝试下。

    源代码:
    GitHub https://github.com/chyxion/newbie-jdbc
    GitOSC http://git.oschina.net/chyxion/newbie-jdbc

使用方式:
Maven依赖:

   <dependency>
        <groupId>me.chyxion</groupId>
        <artifactId>newbie-jdbc</artifactId>
        <version>0.0.1-RELEASE</version>
    </dependency>

使用样例:

// init datasource, here use DruidDataSource as demo
DruidDataSource datasource = null;
datasource = new DruidDataSource();
datasource.setUrl("jdbc:mysql://127.0.0.1/demo");
datasource.setUsername("root");
datasource.setPassword("password");
datasource.init();
// create NewbieJdbc object
NewbieJdbc jdbc = new NewbieJdbcSupport(datasource);

Basic Query

// count of users
int count = jdbc.findValue(
    "select count(1) from users");
// find name of user id is 2008110101
String name = jdbc.findValue(
    "select name from users where id = ?", 
    "2008110101");
// find names of user id is 101 or 102
// 0. array as params
List<String> names = jdbc.listValue(
    "select name from users where id in (?)", 
    "101", "102");
// 1. collection as params
names = jdbc.listValue(
    "select name from users where id in (?)", 
    Arrays.asList("101", "102"));
// 2. map as params
Map<String, Object> params = 
    new HashMap<String, Object>();
params.put("id", Arrays.asList("101", "102"));
// or: 
// params.put("id", new String[] {"101", "102"});
names = jdbc.listValue(
    "select name from users where id in (:id)", 
    params);
// find user of id is 101
Map<String, Object> mapUser = jdbc.findMap(
    "select id, name, gender from users where id = ?", "101");
// list users of age is 24
List<Map<String, Object>> listUsers = jdbc.listMap(
    "select id, name, gender from users where age = ?", 24);

Advance Query

// find id and name as a string array
String[] idAndName = jdbc.findOne(new Ro<String[]>() {
        public String[] exec(ResultSet rs) throws SQLException {
            return new String[] {
                rs.getString("id"), 
                rs.getString("name")};
        }
    },
    "select id, name from users where id = ?", 
    "101");
// find names of gender is M
String names = jdbc.list(new Ro<String>() {
        public String exec(ResultSet rs) throws SQLException {
            return rs.getString("name");
        }
    }, 
    "select name from users where gender = ?", 
    "M");
// find name of user id is 101, same as findValue
String name = jdbc.query(new Ro<String>() {
    public String exec(ResultSet rs) throws SQLException {
            return rs.next() ? rs.getString(1) : null;
        }
    }, 
    "select name from users where id = ?", 
    "101");
// list users of gender F offset 10 limit 16
List<Map<String, Object>> users =
    jdbc.listMapPage(
       "select * from users where gender = ?", 
        Arrays.asList(new Order("date_created", Order.DESC)), 
        10, 16, "F");

Insert And Update

// insert one
Map<String, Object> mapUser = new HashMap<String, Object>();
mapUser.put("id", "103");
mapUser.put("name", "Shaun Chyxion");
mapUser.put("gender", "M");
mapUser.put("date_created", new Date());
jdbc.insert("users", mapUser);
// insert batch
Collection<Collection<?>> users = 
    Arrays.<Collection<?>>asList(
        Arrays.<Object>asList("104", "Xuir", "F", new Date()), 
        Arrays.<Object>asList("105", "Sorina Nyco", "F", new Date()), 
        Arrays.<Object>asList("106", "Gemily", "F", new Date()), 
        Arrays.<Object>asList("107", "Luffy", "M", new Date()), 
        Arrays.<Object>asList("108", "Zoro", "M", new Date()), 
        Arrays.<Object>asList("109", "Bruck", "M", new Date()));
jdbc.insert("users", 
    Arrays.asList("id", "name", "gender", "date_created"), 
    args, 3);
// update gender to F of user 102
jdbc.update("update users set gender = ? where id = ?", "F", "102");
Reusble Connection And Transaction
// find user of id is 101 and books uses same connection
Map<String, Object> mapUserWithBooks = 
jdbc.execute(new Co<Map<String, Object>>() {
    @Override
    protected Map<String, Object> run() throws SQLException {
        String userId = "101";
        Map<String, Object> mapRtn = findMap(
            "select * from users where id = ?", userId);
        mapRtn.put("books", 
            listMap("select * from books where user_id = ?", 
                userId));
        return mapRtn;
    }
});
// execute transaction
Map<String, Object> mapUser = 
jdbc.executeTransaction(new Co<Map<String, Object>>() {
    @Override
    protected Map<String, Object> run() throws SQLException {
        update("delete users where id = ?", "104");
        update("update users set age = ? where id = ?", 24, "103");
        return findMap("select * from users where id = ?", 106);
    }
});

Execute SQL
// create table users

jdbc.execute(
    "create table users (" + 
    "id varchar(36) not null, " + 
    "name varchar(36) not null, " + 
    "primary key (id))");

Customize Newbie JDBC

// create table users
CustomResolver customResolver = new CustomResolver() {
    // set StringBuilder as String
    public void setParam(PreparedStatement ps, 
            int index, Object param)
            throws SQLException {
        if (param instanceof StringBuilder) {
            ps.setString(index, param.toString());
        }
        else {
            ps.setObject(index, param);
        }
    }
    // read CLOB as String
    public Object readValue(ResultSet rs, int index) 
            throws SQLException {
        Object valueRtn = null;
        if (Types.CLOB == rs.getMetaData().getColumnType(index)) {
            valueRtn = rs.getClob(index).toString();
        }
        else {
            valueRtn = rs.getObject(index);
        }
        return valueRtn;
    }
    // use MySQLCompatiblePaginationProcessor to paginate
    public PaginationProcessor getPaginationProcessor(
            Connection conn) {
        return new MySQLCompatiblePaginationProcessor();
    }
};
jdbc = new NewbieJdbcSupport(dataSource, customResolver);

Contacts

chyxion@163.com

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (1)

加载中
Mark
08/08 03:34
回复
举报
更多评论
发表了资讯
2016/04/19 00:00

Newbie JDBC 0.0.1 发布

Newbie JDBC 0.0.1 发布了。几年前写的一个JDBC工具,一直没时间整理出来,断断续续整理了一下,具有特性: 数组SQL参数支持。 分页支持(Oracle,SQLServer,MySQL等),可自定义分页逻辑。 数据库连接共享。 批量数据操作。 轻量,仅依赖slf4j。 下载地址:http://git.oschina.net/chyxion/newbie-jdbc

12
21
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2018/06/20 15:53

java -d . **.java 与 java **.java 的区别

如何在命令行模式下运行带包的java文件 https://blog.csdn.net/lytor/article/details/17048361 javac,使用"-d ."与省略-d的区别 https://blog.csdn.net/ppxxyy1110/article/details/20971271 1.类文件带包(pakage) //文件名:test.java package org.test; public class test{ public static void main(String[] args){ System.out.println("hello world"); } } 一: 编译命令: javac -d . test.java 生成: 执行:java org/te...

0
2
发表了博客
2018/12/15 17:56

java JDBC

JDBC(Java DataBase Connectivity, java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向...

0
1
发表于程序人生专区
2020/02/18 15:01

Java ThreadLocal

点击上方"码之初"关注,···选择"设为星标" 与Java精品技术文章不期而遇 Java ThreadLocal类允许创建只能由同一线程读写的变量。因此,即使两个线程正在执行相同的代码,并且该代码具有对相同ThreadLocal变量的引用,两个线程也无法看到彼此的ThreadLocal变量。因此,Java ThreadLocal类提供了一种使代码线程安全的简单方法。 创建ThreadLocal 你可以像创建其他Java对象一样,通过new运算符创建ThreadLocal实例。代码如下: ...

0
1
发表了博客
2018/01/23 11:41

Java ThreadLocal

Java的ThreadLocal变量用来创建线程本地变量。我们知道,一个对象上的所有线程,都会共享该对象的变量,所以这些共享的变量不是线程安全的。我们可以使用synchronization同步语法来使得线程安全,但如果想避免使用synchronization,那么可以使用线程本地变量(ThreadLocal variables)。 使用了ThreadLocal变量后,每个线程都有它自己的本地变量,可以通过get()、set()方法来获得或设置这些变量的值。ThreadLocal实例通常是类中...

0
1
发表于服务端专区
2014/04/09 14:41

Java JVM

一、Java JVM内存介绍 JVM管理两种类型的内存,堆和非堆。按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如...

0
12
发表了博客
2018/02/06 17:15

Java ThreadLocal

source from http://tutorials.jenkov.com/java-concurrency/threadlocal.html#inheritableThreadLocal Java ThreadLocal Creating a ThreadLocal Accessing a ThreadLocal Generic ThreadLocal Initial ThreadLocal Value Full ThreadLocal Example InheritableThreadLocal The ThreadLocal class in Java enables you to create variables that can only be read and written by the same thread. Thus, even if two threads ...

0
0
发表了博客
2019/08/07 10:34

java ThreadLocal

每次看到这玩意熟悉,就是想不起来什么东西,看了才知道是啥玩意,就写个笔记强化一下记忆。 private ThreadLocal threadLocal = new ThreadLocal(); threadLocal.set(0); (int) threadLocal.get(); 上面三行代码分别是定义、赋值和取值。 介绍: 我们只需要实例化对象一次,并且也不需要知道它是被哪个线程实例化。虽然所有的线程都能访问到这个ThreadLocal实例,但是每个线程却只能访问到自己通过调用ThreadLocal的set()方法设...

0
5
发表了博客
2018/10/11 14:17

java_jdbc

jdbc:数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。    JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,   功能:建立数据库连接;发送操作数据库的语句;处理结果   举例:     Connection con = DriverManager.getConnection("jdbc:odbc:wombat","login","password");     State...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
1 评论
17 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部