simple-jdbc-templete - 基于 Spring jdbcTemplete 的 ORM 工具

GPL
Java
跨平台
2017-09-01
shifeng1983

这是一个简单的ORM工具,基于Spring jdbcTemplete,可以方便的根据对象生成相应的CRUD SQL语句。结合springmvc使用可以大量的减少代码量。

先看例子,比如springmvc接收到了一个User对象,里面包含name,startCreateTime,endCreateTime等查询参数

@Transient//javax.persistence注解,用于标识这个字段没有对应的数据库字段
@Operator(targetColumn="create_time",value=" >= ")//这个用于生成查询条件
public Timestamp getStartCreateTime() {
	return startCreateTime;
}

@Transient
@Operator(targetColumn="create_time",value=" <= ")
public Timestamp getEndCreateTime() {
	return endCreateTime;
}

@OrderBy(value="desc")//javax.persistence注解,用于标识这个字段会被用于生成order by语句
public Timestamp getCreateTime() {
	return createTime;
}

只要执行jtt.list(user, 0, 10);这句,就会生成下面这条语句 [sql=select * from t_user where 1=1 and create_time >= ? and create_time <= ? ORDER BY create_time desc limit 0,10, params=[2017-09-01 12:32:08.842, 2017-09-01 12:32:10.034]]

这样基本上就能做到不写任何查询的代码,80%的情况只需要把springmvc接收的对象直接传给simple-jdbc-templete,就能查询出结果。 更多的例子请看unit test代码

@Test
public void save() throws Exception{
    for (int i = 0; i < 10; i++) {
        User u = new User();
        u.setLogin("user"+i);
        u.setName("user"+i);
        u.setStatus(Byte.parseByte("1"));
        jtt.save(u);
    }

}

@Test
public void saveWithID() throws Exception{
    User maxUser = jtt.get("select max(id) id from t_user", null, User.class);
    for (long i = maxUser.getId()+1; i < maxUser.getId()+10; i++) {
        User u = new User();
        u.setId(i);
        u.setLogin("user"+i);
        u.setName("user"+i);
        u.setStatus(Byte.parseByte("1"));
        jtt.save(u);
    }

}

@Test
public void saveGetId() throws Exception{
    for (int i = 0; i < 10; i++) {
        User u = new User();
        u.setLogin("user"+i);
        u.setName("user"+i);
        u.setStatus(Byte.parseByte("1"));
        jtt.save(u,true);
        logger.debug(String.valueOf(u.getId()));
    }

}

@Test
public void update() throws Exception{
    User u = new User();
    u.setId(3L);
    u.setLogin("ssss");
    jtt.update(u);
}    

@Test
public void delete() throws Exception{
    User u = new User();
    u.setId(3L);
    jtt.delete(u);
}

@Test
public void list() throws Exception{
    User u = new User();
    u.setLogin("user");
    List<User> list = jtt.list(u,10,20,"id","desc",false);
    for (User user : list) {
        logger.debug(String.valueOf(user.getId()));
    }
}

@Test
public void listWithObject() throws Exception{
    User u = new User();
    u.setLogin("admin");
    List<User> list = jtt.list(u);
    jtt.setListFromObject(list);
    for (User user : list) {
        for (Role r : user.getRoles()) {
            logger.debug(r.getName());
        }
    }
}

@Test
public void get() throws Exception{
    User u1 = jtt.get(User.class, 1L);
    logger.debug(u1.getLogin());
    User u2 = jtt.get("select * from t_user where id = ?", new Object[]{2L}, User.class);
    logger.debug(u2.getLogin());
}

@Test
public void count() throws Exception{
    User u = new User();
    u.setLogin("user1");
    logger.debug(String.valueOf(jtt.count(u)));
    long count = jtt.count("select count(1) from t_user where login like ?", new Object[]{"%user1%"});
    logger.debug(String.valueOf(count));
}

@Test
public void testAll() throws Exception {
    for (int i = 0; i < 100; i++) {
        jtt.execute("delete from t_user", null);
        jtt.execute("delete from t_user_role", null);
        Date start = new Date();
        for (int j = 0; j < 1000; j++) {
            User u = new User();
            long currDate = new Date().getTime();
            u.setLogin(String.valueOf(currDate));
            u.setName(String.valueOf(currDate));
            u.setCreatedById(1L);
            u.setCreateTime(new Timestamp(currDate));
            u.setStatus(Byte.parseByte("1"));
            jtt.save(u, true);

            UserRole ur1 = new UserRole();
            ur1.setRoleId(1L);
            ur1.setUserId(u.getId());
            jtt.save(ur1);
            UserRole ur2 = new UserRole();
            ur2.setRoleId(2L);
            ur2.setUserId(u.getId());
            jtt.save(ur2);

            User updateUser = jtt.get(User.class, u.getId());
            updateUser.setUpdateTime(new Timestamp(new Date().getTime()));
            updateUser.setModifiedById(2L);
            jtt.update(updateUser);

            User listUser = new User();
            listUser.setStartCreateTime(new Timestamp(currDate - 1000));
            listUser.setEndCreateTime(new Timestamp(new Date().getTime()));
            jtt.list(listUser, 0, 10, true);
            jtt.list(listUser, 0, 10, "create_time", "desc", false);
            jtt.list("select * from t_user where 1=1  and create_time  >=  ?  and create_time  <=  ?  ORDER BY create_time desc limit 0,10",
                    new Object[] { new Timestamp(currDate - 1000), new Timestamp(currDate) }, User.class);

            jtt.count("select count(1) from t_user where create_time  >=  ?  and create_time  <=  ? limit 0,10",
                    new Object[] { new Timestamp(currDate - 1000), new Timestamp(currDate) });
        }

        User maxUser = jtt.get("select max(id) id from t_user", null, User.class);
        jtt.delete(maxUser);
        Date end = new Date();
        System.out.println("use time:" + (end.getTime() - start.getTime()));
    }
    
}
加载中

评论(3)

是谁卑微了虚伪的承诺
是谁卑微了虚伪的承诺
牛逼哄哄
一醉为红尘
一醉为红尘
这个大哥真叼
詹姆斯Lee
大哥牛的一比啊

暂无资讯

暂无讨论

Groovy Scripts and Classes

Classes are defined in Groovy similarly to Java. Methods can be class (static) or instance based and can be public, protected, private and support all the usual Java modifiers l...

2013/07/04 15:26
43
0
A Review of 5 Java JSON Libraries

原文: http://www.rojotek.com/blog/2009/05/07/a-review-of-5-java-json-libraries/#comments json-simple的例子: http://www.mkyong.com/java/json-simple-example-read-and-write-json...

2014/12/09 21:38
13
0
深入理解 String, StringBuffer 与 StringBuilder 的区别

String 字符串常量 StringBuffer字符串变量(线程安全) StringBuilder字符串变量(非线程安全) 简要的说, String 类型和StringBuffer类型的主要性能区别其实在于 String 是不可变的对象,...

2013/01/16 02:35
1K
0
安装java memcached client到maven repository

由于目前java memcached client没有官方的maven repository可供使用,因此使用时需要手动将其安装到本地repository。java memcached client的jar包下载地址:https://github.com/gwhalin/Me...

2015/05/23 21:01
175
0
关于Java ThreadLocal

本文转自别人的一篇关于ThreadLocal的解释以及如何使用,很清晰,值得一看!

2014/08/16 21:04
374
0
Memcache客户端安装和使用

一、memcached客户端安装 Memcached本身是使用C开发的,客户端可以是php、C#、或者java。我是做java的,所以这里只介绍基于java的客户端。 Memcached目前有三种java的客户端 (1)memcached...

2015/08/03 10:56
39
0
Oracle Jdbc Version Compatibility

oracle11.2官方文档:http://docs.oracle.com/cd/E11882_01/java.112/e16548/getsta.htm#JJDBC28049 oracle11.1官方文档: http://docs.oracle.com/cd/B28359_01/java.111/b31224/getsta.htm...

2015/04/28 15:31
21
0
安装java memcached client到maven repository

由于目前java memcached client没有官方的maven repository可供使用,因此使用时需要手动将其安装到本地repository。java memcached client的jar包下载地址:https://github.com/gwhalin/Me...

2014/10/12 11:40
26
0
Apache DBCP Tutorial Example for Oracle,MySQL

JDBC DataSource Example – Oracle, MySQL and Apache DBCP Tutorial

2014/11/25 08:42
10
0
Java 自定义Annotation

很实用几个例子,在Java开发中,灵活运用可以解决很多问题,比如说持久化实现,还可以配合Struts拦截器解决权限问题,可以控制到方法。 Java代码 package cn.annotation; /** * Define Anno...

2014/06/19 01:04
6
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部