将原生JDBC封装实现CRUD的案例

针对“将原生JDBC封装实现CRUD的案例”的完整攻略,我来为您进行详细讲解。

什么是JDBC?

Java 数据库连接(Java Database Connectivity,简称JDBC),是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了一系列的类和接口,使得Java程序可以方便地对各种关系型数据库进行操作。

为什么需要封装JDBC?

JDBC提供的技术过于原始繁琐,长期使用原生JDBC将会带来很多问题,例如代码冗余、维护成本较高、易错等。因此,一些开发者通过封装原生JDBC,将其封装成一个类库、框架,业务开发人员可以直接使用统一且简洁的接口进行数据库操作,从而提高开发效率。

封装JDBC实现CRUD示例

为了展示如何封装原生JDBC实现CRUD,我们提供以下两个示例。

示例一:连接池封装

  1. 首先,需要导入以下依赖:
<!-- 数据库连接池依赖 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.3</version>
</dependency>

<!-- JdbcTemplate依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.3.10.RELEASE</version>
</dependency>
  1. 定义一个连接池,通过连接池类的getDataSource()方法获取JdbcTemplate对象。
import com.alibaba.druid.pool.DruidDataSource;
import javax.sql.DataSource;

/**
 * 数据库连接池
 */
public class DbPool {

    private final DruidDataSource dataSource;

    public DbPool() {
        dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
    }

    public DataSource getDataSource() {
        return dataSource;
    }

}
  1. 封装基于JdbcTemplate的数据库操作类

JdbcTemplate是Spring Framework提供的一个用于简化JDBC操作的工具类。在此基础上,我们可以很方便地进行增删改查操作。

import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.util.List;

/**
 * 封装基于JdbcTemplate的数据库操作类
 */
public class Dao {

    private final JdbcTemplate jdbcTemplate;

    public Dao() {
        DataSource dataSource = new DbPool().getDataSource();
        jdbcTemplate = new JdbcTemplate(dataSource);
    }

    public List<User> queryAll() {
        String sql = "select * from user";
        List<User> userList = jdbcTemplate.query(sql, new UserMapper());
        return userList;
    }

    public int insert(User user) {
        String sql = "insert into user(name, age) values (?, ?)";
        Object[] params = {user.getName(), user.getAge()};
        int rows = jdbcTemplate.update(sql, params);
        return rows;
    }

    public int update(User user) {
        String sql = "update user set name = ?, age = ? where id = ?";
        Object[] params = {user.getName(), user.getAge(), user.getId()};
        int rows = jdbcTemplate.update(sql, params);
        return rows;
    }

    public int delete(Long id) {
        String sql = "delete from user where id = ?";
        Object[] params = {id};
        int rows = jdbcTemplate.update(sql, params);
        return rows;
    }

}

示例二:ORM框架封装

在封装JDBC的过程中,ORM(对象关系映射)框架也是非常常见的一种方式。Hibernate和MyBatis是两个比较流行的ORM框架。

在这里,我们以MyBatis为例,详细演示如何封装原生JDBC。

  1. 步骤一:在pom.xml中导入以下依赖
<!-- MySQL Connector驱动包 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.22</version>
</dependency>

<!-- MyBatis依赖 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
</dependency>

<!-- Spring Framework依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.3.10.RELEASE</version>
</dependency>
  1. 步骤二:在resource目录下定义以下两个文件:

mybatis-config.xml文件,在这个文件中定义了数据库连接信息、映射文件路径、别名等信息。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias alias="User" type="com.example.User"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/UserMapper.xml"/>
    </mappers>
</configuration>

UserMapper.xml文件,这个文件定义了SQL语句和结果映射。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.UserMapper">
    <resultMap id="BaseResultMap" type="User">
        <id column="id" jdbcType="BIGINT" property="id"/>
        <result column="name" jdbcType="VARCHAR" property="name"/>
        <result column="age" jdbcType="INTEGER" property="age"/>
    </resultMap>
    <select id="selectById" resultMap="BaseResultMap">
        select *
        from user
        where id = #{id,jdbcType=BIGINT}
    </select>
    <select id="selectAll" resultMap="BaseResultMap">
        select *
        from user
    </select>
    <insert id="insert" parameterType="User">
        insert into user (name, age)
        values (#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})
    </insert>
    <update id="update" parameterType="User">
        update user
        set
        name = #{name,jdbcType=VARCHAR},
        age = #{age,jdbcType=INTEGER}
        where id = #{id,jdbcType=BIGINT}
    </update>
    <delete id="delete" parameterType="java.lang.Long">
        delete from user
        where id = #{id,jdbcType=BIGINT}
    </delete>
</mapper>
  1. 步骤三:定义相应的User实体类,如下所示:
public class User {

    private Long id;

    private String name;

    private Integer age;

    // setter和getter方法
}
  1. 步骤四:定义UserMapper接口,如下所示:
public interface UserMapper {

    User selectById(Long id);

    List<User> selectAll();

    int insert(User user);

    int update(User user);

    int delete(Long id);

}
  1. 步骤五:定义基于MyBatis的DAO,通过SqlSession连接Mapper接口。
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * 基于MyBatis的DAO
 */
public class UserDao {

    private final SqlSession sqlSession;

    public UserDao() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        sqlSession = sqlSessionFactory.openSession();
    }

    public User selectById(Long id) {
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        return userMapper.selectById(id);
    }

    public List<User> selectAll() {
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        return userMapper.selectAll();
    }

    public int insert(User user) {
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        int rows = userMapper.insert(user);
        sqlSession.commit();
        return rows;
    }

    public int update(User user) {
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        int rows = userMapper.update(user);
        sqlSession.commit();
        return rows;
    }

    public void delete(Long id) {
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.delete(id);
        sqlSession.commit();
    }

}

至此,我们已经学会了如何利用MyBatis框架,将原生JDBC封装实现CRUD的案例。

希望本文的讲解能够对您有所帮助,谢谢!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:将原生JDBC封装实现CRUD的案例 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 详解Struts2动态方法调用

    下面我就为您详细讲解“详解Struts2动态方法调用”的完整攻略。 1. 什么是Struts2动态方法调用? Struts2动态方法调用是指利用struts2框架自带功能,通过请求参数的传递,实现动态调用Action类中的方法。 在Struts2框架中,每个请求都会对应着一个Action类的实例,Action类中一般都会定义多个方法,而动态方法调用就是指对这…

    Java 2023年5月20日
    00
  • springboot2.0和springcloud Finchley版项目搭建(包含eureka,gateWay,Freign,Hystrix)

    下面是详细的“springboot2.0和springcloud Finchley版项目搭建(包含eureka,gateWay,Feign,Hystrix)”攻略。 准备环境 首先,需要准备以下环境: JDK 1.8及以上版本 Maven 3.5及以上版本 IntelliJ IDEA或者eclipse等IDE 创建Spring Boot项目 打开Intell…

    Java 2023年5月19日
    00
  • Java中两个字符串进行大小比较的方法

    Java中比较两个字符串大小的方法很多,以下是几种常见的方法: 方法一:使用compareTo()方法 Java中的String类有一个compareTo()方法,可以用于比较两个字符串的大小。其返回值为int类型,表示比较结果: 如果前者小于后者,则返回一个负数 如果前者等于后者,则返回0 如果前者大于后者,则返回一个正数 下面是一个实例代码: Strin…

    Java 2023年5月27日
    00
  • jsp利用application统计在线人数的方法

    当使用JSP构建Web应用程序时,使用application对象统计在线用户可以是一项非常有用的功能。application对象是一个全局Java对象,生命周期与Web应用程序相同。因此,它可以在整个Web应用程序范围内使用,使其成为监控在线用户统计的良好的机制。 以下是使用JSP利用application对象统计在线人数的攻略: 1.记录用户会话 为了跟踪…

    Java 2023年6月15日
    00
  • Spring 4 支持的 Java 8 特性

    Spring 4 支持的 Java 8 特性是在 Spring Framework 4.0 版本中引入的,它充分利用了 Java 8 的新特性,如 Lambda、Stream API、Optional、Date and Time API 等,以提高应用程序的性能和可读性。本文将为您讲解 Spring 4 支持的 Java 8 特性的完整攻略。 支持的新特性 …

    Java 2023年5月31日
    00
  • 深入浅析drools中Fact的equality modes

    深入浅析drools中Fact的equality modes 在drools中,我们经常会使用Fact来表示我们的规则中所需要的对象或者数据。在使用Fact的时候,我们需要考虑到Fact的Equality Modes(等值模式)问题。Equality Modes决定了如何比较两个Fact是否相等,进而对整个规则的执行结果产生影响。下面我们详细介绍一下droo…

    Java 2023年5月20日
    00
  • es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    下面我来详细讲解”es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解”的完整攻略。 概述 在实现微服务架构中,往往需要采用分布式搜索引擎来实现高可用和高性能的搜索功能,而ES(Elasticsearch)是分布式搜索引擎中最常用的一种。Spring Boot是一种快速开发框架,Spring Cloud是为实现微服…

    Java 2023年5月19日
    00
  • Java中获取当前路径的几种方法总结

    Java中获取当前路径的几种方法总结 有时候需要获取Java应用程序所在的路径或者当前工作目录的路径,在Java中有多种方法可以实现这个功能。本文将总结Java中获取当前路径的几种方法,以供参考。 方法一:使用System.getProperty() 可以使用System类提供的getProperty()方法获取当前工作目录的路径。具体代码如下: Strin…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部