程序员的知识教程库

网站首页 > 教程分享 正文

JdbcPlus简介(基于JdbcTemplate增强工具)

henian88 2024-10-14 10:03:28 教程分享 3 ℃ 0 评论

Java领域,针对数据的操作最原始的是JDBC,但因JDBC每次都需要连接和释放资源;后来有Spring提供的JdbcTemplate、Hibernate、MyBatis、MyBatis Plus等等;这以后给软件开发人员减轻了很大的工作量和重复工作。

相对JdbcTemplate,其它几种都是ORM的实现,进行一定配置后、就可以用面向对象的方式实现数据库的增删改查,让不会SQL的人员都会使用(不会sql还能做java web开发吗?)。

数据库只是个数据仓库,特别是现在互联网的数据,很多表的数据越来越大,而且可能关联查询多张表很正常,又可能业务表的关联在初期也在变化,ORM在关联查询时,需要掌握和处理的技术点比较多,弄不好对性能造成比较大的影响;出现问题时需要DBA参与时,可DBA可能不会ORM,DBA对原生的SQL了然于心,导致有点被动;如果使用JdbcTemplate来进行操作,一些性能问题,DBA参与时更加容易;

在项目中只使用JdbcTemplate,确实依赖很少,数据源配置也很方便,特别是现在系统经常可能面对多个数据库进行操作,特别主备分离时,至少需要访问2个数据库;只需配置2个数据源、对应2个JdbcTemplate就可以;相对其它ORM,配置起来还是简单多了。

基于目前的实际情况,对ORM和JdbcTemplate的一点总结

JdbcTemplate

1、Spring 框架自带的,现在还有谁不用Spring,基本属于0依赖,如果使用Spring Boot ,拿来就用

2、增删改查,全部都有,但基本都是面向sql的,特别是增加和修改,没有面向对象的方法不方便,不过实际项目中,使用jdbc时都要进行简单封装

3、零配置、根据不同类型数据库写sql,可能在改变数据库时,个别语句需要调整(很少有几个需要换数据库,退一步来说,数据库的sql都是标准,个别特殊函数、过程才有区别)

ORM

1、Spring 框架已经进行集成,配置起来也很方便、不过需要对每种ORM进行学习

2、MyBatis相对Hibernate对原生的SQL操作起来更灵活点

3、面对多数据源访问需要,需要进行一定的配置,每个ORM配置都不样

4、基本针对每个实体对象,都要进行DAO接口定义,和自定义Sql配置(MyBatis)

5、另外,现在Spring 都自带JPA,这也是ORM,也是面向对象访问的,需要对每个实体进行DAO接口定义

实际在项目中,个人经常使用JPA和JdbcTemplate结合使用;JPA做增加、修改、删除、以及单表的查询(每个实体对应一张表,不进行什么一对多,多对多的关联,总感觉有点麻烦和性能风险);关联查询一定要用JdbcTemplate,结合原生SQL写起来特别顺手,所见即所得。当然在使用JdbcTemplate还是进行了一些封装;如:分页、动态查询等。

本人是在前段时间看到MyBatis出了个Plus(没有用过MyBatis,关注少),突然有了想法,是否JdbcTemplate也来个Plus,把我在实践中封装的整理下,给大家参考。

JdbcPlus的目标是完全依赖JdbcTemplate,只需对每张表进行一个POJO配置即可,对外通过JdbcPlus暴露方法,目前主要针对Mysql进行测试

Maven配置

<dependency>
<groupId>com.kukababy</groupId>
<artifactId>jdbc-plus</artifactId>
<version>0.0.6</version>
</dependency>

版本地址:https://search.maven.org/search?q=jdbc-plus

Spring Boot注解配置

@Bean
public JdbcPlus jdbcPlus(JdbcTemplate jt) {
JdbcPlus jdbcPlus = new JdbcPlus();
PlusParam plusParam = new PlusParam();
plusParam.setJdbcTemplate(jt);
jdbcPlus.setPlusParam(plusParam);
return jdbcPlus;
}

Spring Xml配置

<bean id="plusParam" class="com.kukababy.plus.pojo.PlusParam">
 <property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="jdbcPlus" class="com.kukababy.plus.dao.JdbcPlus">
 <property name="plusParam" ref="plusParam"></property>
</bean>

PO映射表配置

@Table(name="tbl_employee")
public class EmpPO extends PlusPO{
@Id
private int id;
@Column(name="name")
private String name;
...get/set
}

使用Demo

EmpPO emp= jdbcPlus.get(EmpPO .class, 1);

JdbcPlus接口列表

void insert(PlusPO entity);

int insertBatch(List<PlusPO> entitys);

int delete(Class<? extends PlusPO> entityClass, Serializable id);

int deleteBy(Class<? extends PlusPO> entityClass, Param... whereColVals);

int deleteBy(String sql, Param... whereColVals);

int update(PlusPO entity);

int update(Class<? extends PlusPO> entityClass, PlusMap plusMap);

int updateBatch(List<PlusPO> entitys);

<T extends PlusPO> T get(Class<T> entityClass, Serializable id);

<T extends PlusPO> List<T> getAll(Class<T> entityClass);

<T extends PlusPO> List<T> select(Class<T> entityClass, Param... whereColVals);

<T extends PlusPO> T selectOne(Class<T> entityClass, Param... whereColVals);

Map<String, Object> selectOne(String sql, Param... whereColVals);

Map<String, Object> selectOne(boolean wherePre, String sql, Param... whereColVals);

List<Map<String, Object>> select(String sql, Param... whereColVals);

List<Map<String, Object>> select(boolean wherePre, String sql, Param... whereColVals);

int getTotal(Class<? extends PlusPO> entityClass);

int getTotal(Class<? extends PlusPO> entityClass, Param... whereColVals);

int getTotal(String sql, SqlFilter sqlFilter);

<T extends PlusPO> Page<T> select(String sql, Pager pager, Class<T> entityClass);

<T extends PlusPO> List<T> select(String sql, SqlFilter sqlFilter, Class<T>

entityClass);

Page<Map<String, Object>> select(String sql, Pager pager);

List<Map<String, Object>> select(String sql, SqlFilter sqlFilter);

Page<Map<String, Object>> selectCamel(String sql, Pager pager);

List<Map<String, Object>> selectCamel(String sql, SqlFilter sqlFilter);

后期将分3-5篇进行接口的说明,感兴趣可以先Maven下,接口都有简要介绍,使用起来很容易。

感谢阅读,

下一篇:JdbcPlus对象和表映射(ORM)介绍

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表