基于JdbcTemplate的一种通用数据库操作帮助工具

本文介绍了一款基于JdbcTemplate的数据库操作帮助工具,该工具通过使用阿里巴巴的fastjson实现了实体类到JSON字符串的转换及参数解析。文章详细描述了如何创建与数据库表对应的实体类、定义DAO操作类,并提供了在Spring配置文件中的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工具介绍

基于JdbcTemplate的通用操作数据库的帮助工具,借助阿里巴巴的开源工具fastjson实现实体的转json字符串以及params的解析。

用法

1.建立与数据库表相对应的entity对象。

package cn.flyzy2005.sample.entity;

import com.alibaba.fastjson.JSON;

/**
 * Created by Fly on 2017/5/4.
 */
public class Book {
    private int id;
    private String name;
    private String author;
    private String publisher;

    public Book() {
    }

    public Book(int id, String name, String author, String publisher) {
        this.id = id;
        this.name = name;
        this.author = author;
        this.publisher = publisher;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getPublisher() {
        return publisher;
    }

    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }

    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
}
  • 成员变量的命名与数据库列名一致(大小写无所谓),例如列名ID可以对应ID、id、Id、iD。

  • 重写toString()方法,将实体转为json格式的字符串,这里借助阿里巴巴的fastjson来实现这一功能。

2.为每张表建立Dao操作类继承AbstractDao,并设置表名。

package cn.flyzy2005.sample.dao;

import cn.flyzy2005.dao.AbstractDao;
import cn.flyzy2005.sample.entity.Book;
import org.springframework.stereotype.Repository;

/**
 * Created by Fly on 2017/5/4.
 */
@Repository
public class BookDao extends AbstractDao<Book>{
    public BookDao(){
        setTableName("book");
    }
}

AbstracDao实现的数据库操作包括:

public interface IBaseDao<T> {
    /**
     * 根据id进行查询
     * @param id id
     * @return entity实例
     */
    T findById(Object id);

    /**
     *根据条件条件进行查询
     * @param jsonObject 查询条件{"name":"fly"}
     * @return 所有满足条件的entity实例
     */
    List<T> findByParams(JSONObject jsonObject);

    /**
     * 查询表中所有数据
     * @return 所有entity实例
     */
    List<T> findAll();

    /**
     * 根据sql语句进行查询
     * @param sql sql语句
     * @return 满足查询条件的entity实例
     */
    List<T> findBySql(String sql);

    /**
     * 添加一条记录
     * @param model entity实例
     * @param withId 是否需要插入Id
     * @return 是否插入成功
     */
    boolean add(T model, boolean withId);

    /**
     * 添加多条记录
     * @param modelList entity实例的List
     * @param withId 是否需要插入Id
     * @return 是否全部删除成功
     */
    boolean addList(List<T> modelList, boolean withId);

    /**
     * 根据Id删除一条记录
     * @param model entity实例
     * @return 是否删除成功
     */
    boolean delete(T model);

    /**
     * 根据Id删除一条记录
     * @param id Id
     * @return 是否删除成功
     */
    boolean deleteById(Object id);

    /**
     * 根据条件删除一条记录
     * @param jsonObject 删除条件
     * @return 是否删除成功
     */
    boolean deleteByParams(JSONObject jsonObject);

    /**
     * 修改一条记录,会根据传入的entity的Id进行匹配修改
     * @param model 修改的entity实例
     * @return 是否修改成功
     */
    boolean modify(T model);

    /**
     * 根据条件修改一条记录
     * @param model 修改的entity实例
     * @param jsonObject 条件
     * @return 是否修改成功
     */
    boolean modifyByParams(T model, JSONObject jsonObject);

    /**
     * 根据sql修改一条数据
     * @param sql sql语句
     * @return 是否修改成功
     */
    boolean modifyBySql(String sql);
}

3.在spring的配置文件替换JdbcTmplate,使得queryForObject查询结果为0时,返回0而不是抛出异常。(也可以自己处理)

<!--<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">-->
    <!--<property name="dataSource" ref="dataSource"></property>-->
<!--</bean>-->
<bean id="jdbcTemplate" class="cn.flyzy2005.jdbc.DaoUtilJdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

DaoUtilJdbcTemplate:

public class DaoUtilJdbcTemplate extends JdbcTemplate {

    @Override
    public <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args) throws DataAccessException {
        List<T> results = query(sql, args, new RowMapperResultSetExtractor<T>(rowMapper, 1));
        return requiredSingleResult(results);
    }

    private <T> T requiredSingleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException {
        int size = (results != null ? results.size() : 0);
        if (size == 0) {
            return null;
        }
        if (results.size() > 1) {
            throw new IncorrectResultSizeDataAccessException(1, size);
        }
        return results.iterator().next();
    }
}

引用:

<dependency>
    <groupId>cn.flyzy2005</groupId>
    <artifactId>daoutil</artifactId>
    <version>1.0.0</version>
</dependency>

源码及样例程序地址:

github:daoutil

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值