从零开始搭建JDBC+servlet管理系统(2)——建立java bean和DAO类

首先我们要建立一个类用来存放数据。之后数据库中存放的也就是这个类的成员。像这种只有一组成员变量和它们的setter/getter的类称所bean。你可以简单地理解成C里的结构体。我们以一个Hero类为例:

package bean;

public class Hero {

    private int id;
    private String name;
    private float hp;
    private int damage;

    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 float getHp() {
        return hp;
    }

    public void setHp(float hp) {
        this.hp = hp;
    }

    public int getDamage() {
        return damage;
    }

    public void setDamage(int damage) {
        this.damage = damage;
    }
}

之后我们要建立一个DAO层。DAO就是数据交互的意思,顾名思义,DAO对象控制一个bean对象和数据库的信息传递。我们可以使用上篇文章提到的JDBC控制语句来构建一个DAO类。

package dao;

import bean.Hero;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class HeroDAO {

    public HeroDAO() {

        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public Connection getConnection() throws SQLException {

        return DriverManager.getConnection("jdbc:mysql://localhost:3306/students_info?characterEncoding=UTF8",
                "root", "moshouniqi419");
    }

    public int getTotal() {

        int total = 0;

        try (Connection c=getConnection(); Statement s=c.createStatement()) {

            String sql = "SELECT COUNT(*) FROM hero";

            ResultSet rs = s.executeQuery(sql);
            if (rs.next()) {

                total = rs.getInt(1);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }

        return total;
    }

    public void add(Hero hero) {

        String sql = "INSERT INTO hero values(null, ?, ?, ?)";
        try (Connection c=getConnection(); PreparedStatement ps=c.prepareStatement(sql)) {

            ps.setString(1, hero.getName());
            ps.setFloat(2, hero.getHp());
            ps.setInt(3, hero.getDamage());

            ps.execute();

            ResultSet rs = ps.getGeneratedKeys();
            if (rs.next()) {

                hero.setId(rs.getInt(1));
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    public void update(Hero hero) {

        String sql = "UPDATE hero SET name = ?, hp = ?, damage = ? WHERE id = ?";
        try (Connection c=getConnection(); PreparedStatement ps=c.prepareStatement(sql)) {

            ps.setString(1, hero.getName());
            ps.setFloat(2, hero.getHp());
            ps.setInt(3, hero.getDamage());
            ps.setInt(4, hero.getId());

            ps.execute();

        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    public void delete(int id) {

        try (Connection c=getConnection(); Statement s=c.createStatement()) {

            String sql = "DELETE FROM hero WHERE id = " + id;

            s.execute(sql);

        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    public Hero get(int id) {

        Hero hero = null;
        try (Connection c=getConnection(); Statement s=c.createStatement()) {

            String sql = "SELECT * FROM hero WHERE id = " + id;

            ResultSet rs = s.executeQuery(sql);
            if (rs.next()) {

                hero = new Hero();
                String name = rs.getString(2);
                float hp = rs.getFloat(3);
                int damage = rs.getInt(4);

                hero.setName(name);
                hero.setHp(hp);
                hero.setDamage(damage);
                hero.setId(id);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }

        return hero;
    }

    public List<Hero> list() {

        return list(0, Short.MAX_VALUE);
    }

    public List<Hero> list(int start, int count) {

        List<Hero> heros = new ArrayList<Hero>();

        String sql = "SELECT * FROM hero ORDER BY id ASC LIMIT ?, ?";

        try (Connection c=getConnection(); PreparedStatement ps = c.prepareStatement(sql)) {

            ps.setInt(1, start);
            ps.setInt(2, count);

            ResultSet rs = ps.executeQuery();

            while (rs.next()) {

                Hero hero = new Hero();
                hero.setId(rs.getInt(1));
                hero.setName(rs.getString(2));
                hero.setHp(rs.getFloat(3));
                hero.setDamage(rs.getInt(4));

                heros.add(hero);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }

        return heros;
    }
}

这个类实现了最基本的增删改查操作。至此,JDBC部分就结束了。之后我们将进入servlet开发的部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值