将原生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日

相关文章

  • java Hibernate 一对多自身关联问题

    下面是“java Hibernate 一对多自身关联问题”的完整攻略。 一对多自身关联问题解析 一对多自身关联指的是一个实体类与自身的关联,且一个实体类可以关联多个相同类型的实体类对象。 这种关联关系很常见,例如“部门-员工”,一个部门下可以有多个员工,而一个员工也归属于某个部门。 Hibernate中实现一对多自身关联通常有两种方式:双向关联和单向关联。 …

    Java 2023年5月19日
    00
  • JSP模板应用指南(上)

    JSP模板应用指南(上)完整攻略 什么是JSP模板 JSP模板即Java Server Pages的模板,是一种基于Java技术的Web开发技术。JSP模板将HTML文档和Java代码结合起来,通过JSP引擎最终生成一个可执行的Servlet程序。 JSP模板的特点 便于开发和维护 不需要额外学习其他的模板语言 实现数据和功能的封装 支持高级特性 JSP模板…

    Java 2023年6月15日
    00
  • Web服务器识别技术揭秘

    Web服务器识别技术揭秘 什么是Web服务器识别技术? Web服务器识别技术是指通过检测HTTP请求中的特定标识,以确定正在运行的Web服务器软件类型和版本的过程。Web服务器指向内部资源并与客户端通信,因此了解服务器是非常重要的。许多黑客使用Web服务器识别来收集有关特定网站的有用信息,这些信息可以用于攻击。 Web服务器识别的原理 Web服务器识别的方法…

    Java 2023年6月16日
    00
  • 浅谈Spring5 响应式编程

    下面就给你详细讲解“浅谈Spring5 响应式编程”的完整攻略。 什么是响应式编程 响应式编程(Reactive Programming)是一种数据流处理的编程范式,主要用于处理异步数据流。响应式编程有两个关键概念:Observable和观察者(Observer)。Observable表示数据流,观察者用来监听数据流并进行相应的处理。当Observable发…

    Java 2023年5月19日
    00
  • Springboot使用Logback实现日志配置与异常记录

    Spring Boot使用Logback实现日志配置与异常记录 介绍 Spring Boot是一款轻量级的应用框架,它提供了很多有用的功能来简化应用开发流程,其中包括了日志记录功能。Logback是一个优秀的日志框架,它可以取代Java标准库的日志框架,并支持通过XML文件配置日志。在这篇教程中,我们将看到如何在Spring Boot应用中使用Logback…

    Java 2023年5月25日
    00
  • java根据图片中绿色像素点的多少进行排序

    这里是Java根据图片中绿色像素点的多少进行排序的完整攻略: 第一步:读取图片并获取像素信息 Java中可以使用ImageIO类读取文件,并使用BufferedImage类获取图片中每个像素点的颜色信息。在我们的例子中,我们需要获取每个像素点绿色的颜色值。 // 读取图片 File file = new File("example.png&quot…

    Java 2023年5月23日
    00
  • Spring如何集成ibatis项目并实现dao层基类封装

    下面就是详细讲解“Spring如何集成ibatis项目并实现dao层基类封装”的完整攻略。 目录 Spring和iBatis的集成 示例一:使用iBatis进行单表操作 示例二:使用iBatis进行多表操作 Dao层基类封装 Spring和iBatis的集成 Spring和iBatis的集成需要以下几个步骤: 引入Spring和iBatis相关的jar包 配…

    Java 2023年5月20日
    00
  • java 使用简单的demo实例告诉你优化算法的强大

    Java 使用简单的Demo实例告诉你优化算法的强大 什么是优化算法? 优化算法又称为最优化算法,是指在满足约束条件的前提下,使某个指标达到最佳(最大或最小)的方法和思想。通常应用于数据分析、机器学习、网络优化、工程设计、金融分析等领域。 在软件开发中,通过优化算法,可以显著提高程序的效率和性能。而Java作为当前广泛应用的高级编程语言,提供了丰富的工具和库…

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