📜  Servlet-数据库访问(1)

📅  最后修改于: 2023-12-03 15:20:06.516000             🧑  作者: Mango

Servlet-数据库访问

Servlet 是 Java Web 应用开发的重要组件之一,它可以帮助我们处理 HTTP 请求和响应。经常情况下,我们需要从数据库中获取信息显示给用户,或者把用户输入的信息保存到数据库中。那么在 Servlet 中如何访问数据库呢?这里我们介绍几种常用的方式。

在介绍这些方法之前,我们需要先了解 JDBC(Java Database Connectivity)。

JDBC

JDBC 是一种 Java 数据库连接的标准,它定义了一组 Java 类库和接口以便访问各种关系数据库。JDBC 可以使用纯 Java 的方式进行数据库操作,不依赖于特定的数据库管理系统。

常用的 JDBC API

JDBC 包含多个 API,其中一些常用的如下:

  • DriverManager:管理 JDBC 驱动程序的基本服务。
  • Driver:提供连接 JNDI 数据库的类。
  • Connection:连接数据库时使用的对象,用于打开和关闭连接、提交和回滚事务等。
  • Statement:执行静态 SQL 语句并返回它所生成结果的对象。
  • PreparedStatement:表示一个预编译的 SQL 语句对象。
  • ResultSet:封装执行 SQL 语句后返回的结果。
使用 JDBC 连接数据库

使用 JDBC 连接数据库的步骤如下:

  1. 导入 JDBC 驱动程序
  2. 注册 JDBC 驱动程序
  3. 打开数据库连接
  4. 执行 SQL 语句
  5. 处理结果集
  6. 清理环境

接下来我们分别介绍使用 JDBC 访问数据库的三种方法。

方法一:使用原生 JDBC

原生 JDBC 是最基础的访问数据库的方法。下面是一段使用原生 JDBC 的示例代码:

// 加载 JDBC 驱动程序
Class.forName("com.mysql.jdbc.Driver");

// 建立数据库连接
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);

// 创建 PreparedStatement 对象
PreparedStatement ps = conn.prepareStatement("SELECT name, age FROM users WHERE id = ?");
ps.setInt(1, 1);

// 执行查询语句并处理结果集
ResultSet rs = ps.executeQuery();
while (rs.next()) {
    String name = rs.getString("name");
    int age = rs.getInt("age");
    System.out.println("name: " + name + ", age: " + age);
}

// 清理环境
rs.close();
ps.close();
conn.close();
方法二:使用 JdbcTemplate

JdbcTemplate 是 Spring 框架中的一个模块,它简化了 JDBC 的开发,使得我们可以更加方便地访问数据库。下面是一段使用 JdbcTemplate 的示例代码:

// 创建 JdbcTemplate 对象
DataSource dataSource = getDataSource();
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

// 执行查询语句并处理结果集
String sql = "SELECT name, age FROM users WHERE id = ?";
Object[] args = { 1 };
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, args);
for (Map<String, Object> map : list) {
    String name = (String) map.get("name");
    int age = (int) map.get("age");
    System.out.println("name: " + name + ", age: " + age);
}
方法三:使用 MyBatis

MyBatis 是一种优秀的持久层框架,它可以把 SQL 语句和 Java 代码分离,从而使得代码更加易读、易维护。下面是一段使用 MyBatis 的示例代码:

<!-- 配置 MyBatis -->
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC" />
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <property name="username" value="root" />
        <property name="password" value="123456" />
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="UserMapper.xml" />
  </mappers>
</configuration>

<!-- 创建 UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
  <select id="selectUserById" resultType="User">
    SELECT id,name,age FROM users WHERE id = #{id}
  </select>
</mapper>

// 创建 SqlSession 对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sessionFactory.openSession();

// 获取 UserMapper 接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

// 执行查询语句并处理结果集
User user = userMapper.selectUserById(1);
System.out.println("name: " + user.getName() + ", age: " + user.getAge());

// 清理环境
sqlSession.close();

通过使用 MyBatis,我们可以把 SQL 语句和 Java 代码分离,从而使得代码更加易读、易维护。

结论

通过使用原生 JDBC、JdbcTemplate 和 MyBatis,我们可以方便地访问和操作数据库。如果你需要在 Servlet 中访问数据库,那么你可以按照以上的方式进行。