2 Star 12 Fork 3

idea / 一款自行编写的orm框架(ibernate)

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Ibernate 框架2.0

在这里插入图片描述

介绍

这是一款完全基于java语言,注解和简单properties配置的一款原生ORM框架,包含部分有:数据库连接池,redis缓存机制,基于注解的数据库crud常用方法,可支持从配置文件读取数据源信息。经过一定的和修复已经对于redis的缓存自动化进行了调整,后期将会引入自动生成接口功能,从而提高sql的使用方便度。希望各位开源大佬们多多给Ibernate一些建议。

常规的hibernate可以自动化生成相应的sql代码,但是对于性能优化方面需要开发人员学习hql语法,特别繁琐。而且Hibernate对于session生命周期管理也太过于复杂,配置也过于繁琐。现今比较流行的mybatis需要开发人员自己手动写sql来进行数据库操作,这种步骤较为灵活,但是对于一些简单的增删改查操作不能自动生成,例如一个插入语句,如果相应的表有1000个字段,那么这段sql语句将会特别冗长,不利于后期的维护。Ibernate结合了Hibernate和Mybatis两者的好处,简单的sql语句可以自动生成,复杂的sql语句可以自己编写。开发时长为1星期,由于6月份需要找实习工作,所以只好最近抽时间来进行相应的优化。

版本更新

在基于之前的版本基础进行了迭代改造,2.0版本对于数据接口部分的编写更为简单,通过声明式接口的方式即可实现,而且自带已定义好的Dao函数,简化了开发者的代码编写工作,希望大家能够喜欢2.0版本的ibernate。

配置环境

jdk版本:1.8 数据源:暂时只支持mysql和redis 开发环境:windows,linux,mac 项目结构类型:maven类型项目

使用说明

导入以下jar包: ibernate-1.4.jar 以及相关应用依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.36</version>
</dependency>

编写MySQL配置文件

ibernate的核心数据源配置: 命名要求:ibn-cfg.properties (一定要一致) 然后在ibn-cfg.properties文件中配置相关的连接数据库信息

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=false&amp;characterEncoding=gb2312
username=root
password=root
initcount=10   #连接池的连接大小数目
step=2    #连接池的扩容因子当连接数不足的时候的递增量
maxcount=50  #连接池的最大连接数

Redis缓存配置文件

命名要求:ibn-redis.properties (一定要一致) 加入缓存的连接配置

cachetype: redis  #缓存的类型切记要一致配置
ip: 127.0.0.1
port: 6379
maxidle: 100   #缓存池的最大连接数
timeout: 1000  #超时时长
password: 1   #redis密码

相应的配置文件需要存放在resource文件夹底下:

在这里插入图片描述

接下来只需要构建好相应的项目结构即可开工:

在这里插入图片描述

入门demo

首先构建一个User类,然后再去构建UserDao User类里面的对象需要和数据库对象做好相应的注解映射配置:

在这里插入图片描述

配置对应的User实体类

package com.sise.model;

import org.lh.ibernate.annotation.Column;
import org.lh.ibernate.annotation.Id;
import org.lh.ibernate.annotation.Table;

@Table(name = "user")
public class User {

    @Id
    @Column(value = "id")
    public int id;

    @Column(value = "username")
    public String username;

    @Column(value = "password")
    public String password;


    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;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public User() {
    }

    public User(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }
}

UserDao里面的编写比较简单: 是的,就是这么简单,只需要继承一个IbernateBaseDao接口,对所需要开发的函数加上注解即可,其他的东西全部都交给框架来处理就好了

package com.sise.dao.interfaces;

import com.sise.model.User;
import org.lh.ibernate.annotation.*;
import org.lh.ibernate.core.invoker.IbernateBaseDao;

import java.util.List;

@Mapper
public interface UserDao extends IbernateBaseDao<User> {

    @Query("select * from user limit ?")
    List<User> findAllByPage(int size);

    @Query("select * from user where id=?")
    User findOne(int id);

    @Query("select * from user where id>? and username like ?")
    List<User> findAllByIdAndUsername(int id,String username);

    @Query("select * from user order by id desc limit 1 ")
    User findNewOne();

    @Query("select * from user group by username")
    List<User> findAllGroupByUsername();

    @Query("select * from user  order by id desc limit ?,?")
    List<User> findAllByPage(int page,int pageSize);

	@QueryCallableStatement(value = "{call userlist()}")
	List<User> callUserList();

}

junit的相关测试

使用junit4框架进行基本的crud测试

import com.sise.dao.UserDao;
import com.sise.model.User;
import org.junit.Before;
import org.junit.Test;
import org.lh.ibernate.interfaces.ISessionUtil;
import org.lh.ibernate.interfaces.impl.SessionUtil;

import java.util.List;

public class UserDaoTest {

		public MapperFactory<User> mf=new MapperFactory<>();
		public UserDao ud;
		
		@Before
		public void setUp() throws ClassNotFoundException {
		         ud= (UserDao) mf.createmapper(UserDao.class);
		}
		
		@Test
		public void testFindOne(){
		    User user=ud.findOne(1);
		    System.out.println(user.toString());
		}
		
		@Test
		public void testfindAll(){
		    List<User> userList=ud.findAllByPage(5);
		    for (User user : userList) {
		        System.out.println(user.toString());
		    }
		}
		
		@Test
		public void testfindAllByIdAndUsername(){
		    List<User> userList=ud.findAllByIdAndUsername(1,"%1%");
		    for (User user : userList) {
		        System.out.println(user.toString());
		    }
		}
		
		@Test
		public void testSaveOne(){
		    User user=new User();
		    user.setUser_name("hhhh");
		    user.setPass_word("pwd");
		    ud.saveOne(user);
		}
		
		
		@Test
		public void testUpdate(){
		    User user=ud.findOne(13);
		    user.setUser_name("new update");
		    ud.updateOne(user);
		}
		
		@Test
		public void testDelete(){
		    User user=ud.findNewOne();
		    System.out.println(user.toString());
		    ud.deleteOne(user);
		}
		
		@Test
		public void testFindNewOne(){
		    List<User>  userList=ud.findAllGroupByUsername();
		    for (User user : userList) {
		        System.out.println(user.toString());
		    }
		}
		
		@Test
		public void testFindAllByPage(){
		    List<User>  userList=ud.findAllByPage(2,4);
		    for (User user : userList) {
		        System.out.println(user.toString());
		    }
		}
}

引用注意要点

1.创建接口dao,需要继承相应的IbernateBaseDao 2.需要通过MapperFactory里面的createmapper创建相应的接口类即可。

	public MapperFactory<User> mf=new MapperFactory<>();
	public UserDao ud;
	
	@Before
	public void setUp() throws ClassNotFoundException {
         ud= (UserDao) mf.createmapper(UserDao.class);
	}

性能比较

在大数据量的情况下比常规的jdbc单一链接查询性能要快10-20倍

空文件

简介

基于java语言编写的一款原生ORM框架,包含部分有:数据库连接池,redis缓存机制,基于注解的数据库crud常用方法,可支持从配置文件读取数据源信息。2.0版本里面可以提供自定义接口,并且自动通过接口创建相应的crud函数。 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/IdeaHome_admin/ibernate.git
git@gitee.com:IdeaHome_admin/ibernate.git
IdeaHome_admin
ibernate
一款自行编写的orm框架(ibernate)
master

搜索帮助