JDBC之DAO,ORM详解(必知必会)

引言

说出来都不好意思,~ ^ ~,JDBC前前后后学了两次,都没认真学,直到最近开始搞项目才意识到它的重要性,尤其时之前以为鸡肋的知识点(ORM,DAO)这俩很重要!

知识点

ORM与DAO都是自己建的Java类,重要的是思想

  • ORM

(个人对ORM,DAO的认识,欢迎指正)
ORM=Object Relationship Database Mapping
把数据库中的一个记录当一个对象来处理。
从程序员的角度来理解,ORM类相当于在编译器中操作数据库。

  • DAO
    DAO=DataAccess Object
    数据访问对象
    在DAO类中封装所有的JDBC代码,其他地方看不到.这在项目实战中很重要(我刚学的时候感觉鸡肋,后来才意识到自己太?^?)
    可以带来我们平时用app的体验,让测试人员无需看冗长的JDBC代码

实例

ORM

先创建一个对象Hero;

package ORMDemo;

public class Hero {
    public int id;
    public String name;
    public String psd;
    public String tell;
    public float money;
    public int pow;
}

再创建ORM类

package ORMDemo;

import java.sql.*;

public class OrmHero {

    public Hero getHero(int id) {
          Hero hero =null;
          //"jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin"
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
          try {
              Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/ordersystem?characterEncoding=UTF-8","root", "admin");
              Statement s=c.createStatement();
              String sql="select * from users where id="+id;
            //  s.execute(sql);
              ResultSet rs=s.executeQuery(sql);
              if(rs.next()){
                  hero =new Hero();
                  hero.name=rs.getString(2);
                  hero.psd=rs.getString(3);
                  hero.tell=rs.getString(4);
                  hero.money =rs.getFloat(5);
                  //int pow=rs.getInt(6);
                  hero.pow=rs.getInt(6);
              }
          }catch (SQLException e){
              e.printStackTrace();
          }
        return hero;
    }
    public static void add(Hero hero){
        try{
            Class.forName("com.mysql.jdbc.Driver");
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }
        try{
            Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/ordersystem?characterEncoding=UTF-8","root", "admin");
            Statement s=c.createStatement();
            
            String sql="insert into users values (?,?,?,?,?,?)";
            PreparedStatement ps=c.prepareStatement(sql);
            ps.setInt(1,hero.id);

            ps.setString(2,hero.name);

            ps.setString(3,hero.psd);

            ps.setString(4,hero.tell);

            ps.setFloat(5,hero.money);
            ps.setInt(6,hero.pow);

            ps.execute();

        }catch (SQLException e){
            e.printStackTrace();
        }
    }
    public static  void main(String[] args){
        OrmHero s=new OrmHero();
        Hero f=s.getHero(1);
        System.out.println(f.money);
        Hero f1=new Hero();
        f1.id=3;
      //  f1.name="小";
        String n="123";
        f1.name=n;
        f1.psd="12345";
        f1.tell="678910";
        f1.money=234.5f;
        f1.pow=0;
        add(f1);
        //添加一条记录,读者可自行实现删,改,查~
    }
}


DAO

创建一个Item对象

package DAO;

public class Item {
    public int id;
    public String name;
    public float money;
public Item(){};
    public Item(String s) {
        this.name=s;
    }


}

再创建DAO类

package DAO;

import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;

import java.sql.*;

public class ItemDao {
    public void ItemDao(){
        try{
            Class.forName("com.mysql.jdbc.Driver");
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }
    }
    public void add(Item f){
        try{
            Connection c= DriverManager.getConnection("jdbc:mysql://localhost/ordersystem?characterEncoding=UTF-8",
                    "root","admin");
            String sql="insert into item values(null,?,?)";
            PreparedStatement s=c.prepareStatement(sql);
                  s.setString(1,f.name);
                  s.setFloat(2,f.money);
                  s.execute();
                  System.out.println("成功插入了一次");
                  //~~~
        }catch (SQLException E){
            E.printStackTrace();
        }
    }
    public void update(Item f){
        try{
            Connection C=DriverManager.getConnection("jdbc:mysql://localhost/ordersystem?characterEncoding=utf-8",
                    "root","admin");
            String sql="update item set name=? where id=? ";
            PreparedStatement s=C.prepareStatement(sql);
            s.setString(1,f.name);
            s.setInt(2,f.id);
            s.execute();
            System.out.println("修改成功");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

再写测试类(运行Main

package DAO;

public class Test {
    public static void main(String[] args){
        ItemDao s1=new ItemDao();
        for(int i=1;i<=10;i++){
            Item f1=new Item();
            f1.name=""+i;
            s1.add(f1);
        }
        Item f2=new Item();
        f2.id=3;
        f2.name="2345";
        System.out.println("我要搞"+f2.id+"的名字为"+f2.name);
        s1.update(f2);
    }

}

ps:item的建表语句

CREATE TABLE item (
  id int(11) AUTO_INCREMENT,
  name varchar(30) ,
  price int,
  PRIMARY KEY (id)
)  DEFAULT CHARSET=utf8;

总结

越来越能理解社会对程序员普遍印象为什么是呆,邋遢的了,因为搞代码真的需要坐在电脑前全身心投入
(hyly)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高冷小伙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值