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

hibernate-plus: Hibernate 增强工具包 - 只做增强不做改变,更加精简持久层CRUD操作 ...

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

开源软件名称:

hibernate-plus

开源软件地址:

https://gitee.com/baomidou/hibernate-plus

开源软件介绍:

app-hibernate-persist-Logo

为简化开发工作、提高生产率而生

简介 | Intro

Hibernate 增强工具包 - 只做增强不做改变,更加精简持久层CRUD操作

技术讨论 QQ 群 492238239 如满,加群 121472998 (有钱的捧个钱场【点击捐赠】, 没钱的捧个人场)

优点 | Advantages

  • 纯正血统:完全继承原生 Hibernate 的所有特性
  • 最少依赖:仅仅依赖 Hibernate
  • 自动生成代码:简化操作,使其专注于业务
  • 自定义操作:提供大量API,使开发更加顺畅
  • 简化操作:只需专注于业务,数据库操作请交给 Hibernate-Plus
  • 无缝分页:基于Hibernate分页,无需具体实现
  • 数据库友好:基于Hibernate,支持目前大多数主流数据库
  • 避免Sql注入:内置对特殊字符转义,从根本上预防Sql注入攻击
  • 无配置文件:无需编写SQL配置文件(例如:Mybatis的XML),从而简化操作
  • 主从分离:简单配置即可实现主从分离

应用实例 | Demo

Spring-MVCSpring-Boot

下载地址 | Download

点此去下载

	<dependency>	    <groupId>com.baomidou</groupId>	    <artifactId>hibernate-plus</artifactId>	    <version>1.0.0.Final</version>	</dependency>

通用方法 | API

API说明

#优点?

Hibernate-Plus都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法。

让你感觉使用Hibernate感觉跟Mybatis-Plus一样,极大简化开发。

##Hibernate-Plus - Spring集成

 <!-- 配置数据源 --><bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">    <property name="url" value="${master.url}"/>    <property name="driverClassName" value="${master.driverClassName}"/>    <property name="username" value="${master.username}"/>    <property name="password" value="${master.password}"/></bean><!-- 配置hibernate session工厂 master --><bean id="masterSessionFactory" class="com.baomidou.hibernateplus.HibernateSpringSessionFactoryBean">	<!--主从数据库设置 Master主-->    <property name="type" value="master"/>    <property name="dataSource" ref="dataSource"/>    <property name="hibernateProperties">        <props>            <!--<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>-->            <prop key="hibernate.dialect">${hibernate.dialect}</prop>            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>            <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>            <prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>        </props>    </property>    <!-- 自动扫描注解方式配置的hibernate类文件 -->    <property name="packagesToScan">        <list>            <value>com.baomidou.hibernate.model.po</value>        </list>    </property></bean><!-- 配置事务管理器 --><bean name="masterTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">    <property name="sessionFactory" ref="masterSessionFactory"></property></bean><!-- 拦截器方式配置事物 --><tx:advice id="masterTransactionAdvice" transaction-manager="masterTransactionManager">    <tx:attributes>        <tx:method name="save*" propagation="REQUIRED"/>        <tx:method name="update*" propagation="REQUIRED"/>        <tx:method name="delete*" propagation="REQUIRED"/>        <tx:method name="get*" propagation="REQUIRED" read-only="true"/>        <tx:method name="select*" propagation="REQUIRED" read-only="true"/>        <tx:method name="query*" propagation="REQUIRED" read-only="true"/>        <tx:method name="*" propagation="REQUIRED"/>    </tx:attributes></tx:advice><aop:config>    <aop:pointcut id="masterTransactionPointcut"                  expression="execution(* com.baomidou.hibernate.service..*Impl.*(..)) or execution(* com.baomidou.hibernateplus.service..*Impl.*(..))"/>    <aop:advisor pointcut-ref="masterTransactionPointcut" advice-ref="masterTransactionAdvice"/></aop:config><!--如果不需要从数据库以下可以不配置--><!-- slave数据源 --><bean name="slaveDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"      destroy-method="close">    <property name="url" value="${slave.url}"/>    <property name="driverClassName" value="${slave.driverClassName}"/>    <property name="username" value="${slave.username}"/>    <property name="password" value="${slave.password}"/></bean><!-- 配置hibernate session工厂 slave --><bean id="slaveSessionFactory" class="com.baomidou.hibernateplus.HibernateSpringSessionFactoryBean">	<!--主从数据库设置 Slave从-->        	<property name="type" value="slave"/>    <property name="dataSource" ref="slaveDataSource"/>    <property name="hibernateProperties">        <props>            <!--<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>-->            <prop key="hibernate.dialect">${hibernate.dialect}</prop>            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>            <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>            <prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>        </props>    </property>    <!-- 自动扫描注解方式配置的hibernate类文件 -->    <property name="packagesToScan">        <list>            <value>com.baomidou.hibernate.model.po</value>        </list>    </property></bean><!-- 配置事务管理器 --><bean name="slaveTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">    <property name="sessionFactory" ref="slaveSessionFactory"></property></bean><!-- 拦截器方式配置事物 --><tx:advice id="slaveTransactionAdvice" transaction-manager="slaveTransactionManager">    <tx:attributes>        <tx:method name="*" propagation="REQUIRED" read-only="true"/>    </tx:attributes></tx:advice><aop:config>    <aop:pointcut id="slaveTransactionPointcut"                  expression="execution(* com.baomidou.hibernate.service..*Impl.*(..)) or execution(* com.baomidou.hibernateplus.service..*Impl.*(..))"/>    <aop:advisor pointcut-ref="slaveTransactionPointcut" advice-ref="slaveTransactionAdvice"/></aop:config>

##Hibernate-Plus - SpringBoot集成

查看Spring-Boot

###DAO层

/*Dao接口类*/public interface DemoDao extends IDao<Tdemo> {}/*Dao接口实现类*/public class DemoDaoImpl extends DaoImpl<Tdemo> implements DemoDao {}

###Service层

/*Service接口类*/public interface DemoService extends IService<Vdemo> {}/*Service接口实现类*/public class DemoServiceImpl extends ServiceImpl<Tdemo, Vdemo> implements DemoService {}

###实体类注解@Entity@Table(name = "demo")@DynamicInsert(true)@DynamicUpdate(true)public class Tdemo extends AutoPrimaryKey {

		private String demo1;		private String demo2;		private String demo3;			@Column(name = "demo1")		public String getDemo1() {			return demo1;		}			public void setDemo1(String demo1) {			this.demo1 = demo1;		}			@Column(name = "demo2")		public String getDemo2() {			return demo2;		}			public void setDemo2(String demo2) {			this.demo2 = demo2;		}			@Column(name = "demo3")		public String getDemo3() {			return demo3;		}			public void setDemo3(String demo3) {			this.demo3 = demo3;		}	}

####注解支持

完全支持 JPA 注解,原生 Hibernate 用法

####强调

不是表中字段的属性需要添加@Transient注解

####示例项目

http://git.oschina.net/baomidou/springmvc-hibernate-plus

##Hibernate-Plus - 简单用法示例

全部针对单表操作,每个实体类都需要继承Convert来PO、TO之间的装换

示例代码:

	List<Vdemo> lists = new ArrayList<Vdemo>();	for (int i = 0; i <= 100; i++) {		Vdemo vdemo = new Vdemo();		vdemo.setDemo1(i + "");		vdemo.setDemo2(i + "");		vdemo.setDemo3(i + "");		lists.add(vdemo);	}	// 批量插入	boolean insertBatch = demoService.insertBatch(lists);	System.out.println(insertBatch);	// Condition 链式查询列表	List<Vdemo> vdemoList = demoService.selectList(SelectWrapper.instance().le("id", 10));	System.out.println(vdemoList);	Map map = new HashMap<>();	map.put("id", 99L);	// 根据Condition 查询单条记录	Vdemo vdemo = demoService.selectOne(SelectWrapper.instance().eq("id", 10));	System.out.println(vdemo);	List<Map<String, Object>> mapList = demoService.selectMaps(SelectWrapper.instance().ge("id", 80));	System.out.println(mapList);	// 根据属性查询单条记录	Vdemo vdemo1 = demoService.get("1");	if (vdemo1 != null) {		vdemo1.setDemo1("999");		vdemo1.setDemo2("999");		vdemo1.setDemo3("999");		// 修改或保存		demoService.saveOrUpdate(vdemo1);	}	Vdemo vdemo2 = demoService.get("1");	if (vdemo2 != null) {		vdemo2.setId(null);		demoService.saveOrUpdate(vdemo2);	}	int selectCount2 = demoService.selectCount(SelectWrapper.instance().ge("id", 80));	System.out.println(selectCount2);	Page page = new Page(1, 20);	page.setOrderByField("id");	page.setAsc(false);	// 查询分页	Page selectPage = demoService.selectPage(SelectWrapper.DEFAULT, page);	System.out.println(selectPage);	// Condition链式查询分页返回Map	Page selectMapPage = demoService.selectMapPage(SelectWrapper.instance().ge("id", 50), page);	System.out.println(selectMapPage);	// Condition链式查询分页返回VO	Page selectPage2 = demoService.selectPage(SelectWrapper.instance().ge("id", 50), page);	System.out.println(selectPage2);	// Condition链式 删除单条记录	demoService.delete(DeleteWrapper.instance().eq("id", 1));	List<Vdemo> vdemos = demoService.selectList(SelectWrapper.instance());	Iterator<Vdemo> iterator = vdemos.iterator();	while (iterator.hasNext()) {		Vdemo vdemo3 = iterator.next();		vdemo3.setDemo1(vdemo3.getDemo1() + "Caratacus Plus 1");		vdemo3.setDemo2(vdemo3.getDemo2() + "Caratacus Plus 2");		vdemo3.setDemo3(vdemo3.getDemo3() + "Caratacus Plus 3");	}	// 批量修改	demoService.updateBatch(vdemos);	// Condition链式 删除所有记录	demoService.delete(DeleteWrapper.DEFAULT);	...

其他 具体请查看

示例 项目1 Spring-MVC示例 项目2 Spring-Boot

其他开源项目 | Other Project

 `如果你喜欢Mybatis,可以尝试使用`

期望 | Futures

欢迎提出更好的意见,帮助完善

捐赠 | Donate

捐赠记录,感谢你们的支持!

捐赠 mybatis-plus

关注我 | About Me

程序员日记


鲜花

握手

雷人

路过

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

请发表评论

全部评论

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

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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