这是一款完全基于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>
ibernate的核心数据源配置: 命名要求:ibn-cfg.properties (一定要一致) 然后在ibn-cfg.properties文件中配置相关的连接数据库信息
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=false&characterEncoding=gb2312
username=root
password=root
initcount=10 #连接池的连接大小数目
step=2 #连接池的扩容因子,当连接数不足的时候的递增量
maxcount=50 #连接池的最大连接数
命名要求:ibn-redis.properties (一定要一致) 加入缓存的连接配置
cachetype: redis #缓存的类型,切记要一致配置
ip: 127.0.0.1
port: 6379
maxidle: 100 #缓存池的最大连接数
timeout: 1000 #超时时长
password: 1 #redis密码
相应的配置文件需要存放在resource文件夹底下:
接下来只需要构建好相应的项目结构即可开工:
首先构建一个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();
}
使用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倍
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。