• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

x-orm: 基于springboot和jdbc类似JFinal的orm

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

x-orm

开源软件地址:

https://gitee.com/msgcode/x-orm

开源软件介绍:


##Note 2016-07-24 04:08   更新0.0.2-SNAPSHOT
  1. 增加Model关联关系
  2. 优化注册对象结构
  3. Record增加toModel方法 持有Model关联关系

##Note   0.0.1-SNAPSHOT存在严重BUG.根本无法正常使用

##声明

本工具纯粹写来自用, 并没有与别人竞争的意思, 欢迎大神们给我这个渣渣提提建议, 不喜欢本项目的也不要喷我

##前言

我是一个曾纠结springboot还是jfinal的渣渣程序员

jfinal的orm超级爽, 但是controller并不是十分方便而且官方并不支持注解.

jfinal-ext支持注解了但是写起单元测试来十分麻烦. jfinal也不支持restful

oscgit上也有数个基于jfinal的restful框架,但是没有在官方支持下感觉十分奇怪,

比如取PathParam要getAttr(),这样就感觉很奇怪了.

最终我败在了Spring的大生态下, 虽然Spring库有点大了, 但是总是有用的.

SpringBoot的简单配置实在让我非常心动, 加上SpringMVC强大又稳定, 所以我最终选择了SpringBoot

但是SpringBoot自带的JPA写起一些多表查询,动态查询实在会死人, 所以我决定写一个基于JDBC类似JFinal的ORM框架(其实只算是封装好的工具吧)

##x-orm简介

跟JFinal一样有Model和Db+Record两种方式, 不过我在Model上加上了注解,这样配置就更加少了.

在注册Record的时候实在比不上波总的JFinal..小弟才疏学浅.感觉在服务启动的性能上比JFinal差多了

功能还在慢慢完善, 不废话了, 有兴趣的小伙伴来试试顺便给个星

##配置x-orm是基于SpringBoot+Jdbc的 Maven就依赖这几个东西就好了

<parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.3.6.RELEASE</version>  </parent>  <dependencies>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-jdbc</artifactId>    </dependency>

配置上面就非常简单了, 在SpringBoot的服务启动类加上两个注册的语句~如果不需要Record的就不需要填了

@Controller@EnableAutoConfiguration@ComponentScan(basePackages = "com.xdivo")public class SpringBootStarter {    public static void main(String[] args) throws Exception {        SpringApplication.run(SpringBootStarter.class, args);        Register.registerModel("com.xdivo.model"); //扫描的包名        Register.registerRecord("online_class"); //数据库名        Register.initTheadPool(100, 100, 1000); //初始化线程池 0为使用默认值    }}

定义Model

/** * 用户类 * Created by liujunjie on 16-7-19. */@Entity(table = "c_user")public class User extends Model<User> {    @PK    @Column(name = "id_")    private long id;    @Column(name = "mobile_")    private String mobile;    @Column(name = "password_")    private String password;    @Join(refColumn = "id")    @Column(name = "room_id_")    private Room room;    @Join(refColumn = "id_") //关联的refColumn的值为数据库的关联列    @Column(name = "student_id_")    private Student student;    public long getId() {        return id;    }    public User setId(long id) {        this.id = id;        return this;    }    public String getMobile() {        return mobile;    }    public User setMobile(String mobile) {        this.mobile = mobile;        return this;    }    public String getPassword() {        return password;    }    public User setPassword(String password) {        this.password = password;        return this;    }    public Room getRoom() {        return room;    }    public User setRoom(Room room) {        this.room = room;        return this;    }    public Student getStudent() {        return student;    }    public User setStudent(Student student) {        this.student = student;        return this;    }}

在使用的时候就跟JFinal基本一样了

//保存User对象new User().setMobile("abc")      .setPassword("123")      .save();//根据主键查询UserUser user = new User().findById(id);//获取关联对象//异步保存到数据user.asyncSave();//异步更新到数据user.asyncUpdate();
//查询recordRecord record = Db.findById("c_user", 23);//转换到Model(转换到Model后直接使用getter就能获取关联Model)User user = record.toModel(User.class);//保存Record对象Record record = new Record()    .set("mobile_", "abc")    .set("password_", "123");Db.save("c_user", record);
//直接使用JdbcTemplate增加自定义查询 并转换成ModelMap<String, Object> resultMap = jdbcTemplate.queryForMap("SELECT * FROM user WHERE id = ?", 1);User user = new User().mapping(resultMap);List<Map<String, Object>> resultList = jdbcTemplate.queryForList("SELECT * FROM user");List<User> users = new User().mappingList(resultList);
/**     * 瀑布流分页(暂时只支持Number类型的列)     *     * @param orderColName  排序列名     * @param orderColValue 排序列值     * @param direction     方向     * @param params        参数     * @param pageSize      每页数量     * @return ScrollResult     */    public ScrollResult scroll(String orderColName, Number orderColValue, String direction, Map<String, Object> params, int pageSize)    //滚动分页方法    ScrollResult result = user.scroll("id", id, Model.Direction.DESC, null, 2);

像事务那些东西就是基于SpringBoot了.省了一笔功夫

##联系方式###QQ: 41369927###邮箱: [email protected]


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap