Hibernate逍遥游记
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 访问关系数据库的途径

悟空把MONKEYS表创建好以后,就急于把花果山的一个聪明伶俐的小猴的信息存入表中。该小猴的信息如下:

    名字:智多星
    年龄:1岁
    性别:公(Male)

如图1-2 所示,悟空看着运行中的MySQL数据库服务器,幽默地用猴语对服务器大喊:“嗨,哥们,帮我把这小猴崽的信息记下来。”可惜服务器无动于衷,它哪里懂得猴语啊。悟空宽宏大量地对服务器笑笑,经过西天取经的磨练,悟空已经改了动不动就亮出金箍棒唬人的毛病。他明白,要与对方交流,就首先要熟悉对方的语言。假如双方不得不各自使用不同的语言,就得找个合适的翻译员。

图1-2 悟空试图用猴语和数据库交流

数据库服务器只懂得SQL语言,因此悟空必须想办法把自己的请求用SQL语言表达出来,然后通过特定的客户程序把SQL语句传给服务器,服务器才会执行这些SQL语句。

1.2.1 通过数据库的自带客户程序与数据库服务器交互

悟空打开了MySQL服务器的自带客户程序(对应MySQL安装目录的bin子目录下的mysql.exe程序),然后在电脑键盘上霹雳啪啦一阵敲打,他向MySQL自带客户程序输入了一些SQL语句,参见图1-3。

图1-3 MySQL自带客户程序(mysql.exe)的命令行界面

在图1-3中,悟空输入的SQL语句为:

    insert into MONKEYS(ID,NAME,AGE,GENDER)
    values(1,'智多星',1,'M');

MySQL自带客户程序接收到悟空输入的SQL语句后,就会把它如实转交给MySQL服务器,这正是MySQL服务器所能理解的语言,这一回,服务器乖乖地听从悟空的吩咐,把小猴崽的信息保存到MONKEYS表中,参见图1-4。

图1-4 用户通过MySQL自带客户程序与MySQL服务器通信

1.2.2 通过Java程序与数据库服务器交互

尽管直接通过MySQL的自带客户程序来访问MySQL数据库服务器也是可行的,但是实际操作起来却很麻烦。悟空打算让刚参加了电脑扫盲班的小不点来管理猴子信息。小不点不太懂SQL语言,要让他直接操纵MySQL自带客户程序,有很大风险,万一他不小心输错了SQL语句,可能会误删除或误修改数据库中的重要数据。所以必须给小不点定制专门的客户程序,最好有更加直观的界面,让小不点容易操作,而且不觉得枯燥。

悟空刚刚学会了Java编程语言,何不用Java程序来编写一个访问数据库的客户程序呢,参见图1-5。

图1-5 用户通过Java程序与MySQL服务器通信

悟空先编写了一个代表猴子信息的Monkey类,参见例程1-1。

例程1-1 Monkey.java

    package mypack;

    public class Monkey{
      private Long id;
      private String name;
      private int age;
      private char gender;

      public Monkey(){}

      public Long getId(){
        return id;
      }

      private void setId(Long id){
        this.id = id;
      }

      public String getName(){
        return name;
      }

      public void setName(String name){
        this.name=name;
      }

      public int getAge(){
        return age;
      }

      public void setAge(int age){
        this.age =age ;
      }

      public char getGender(){
        return gender;
      }

      public void setGender(char gender){
      this.gender =gender ;
    }
  }

以上Monkey类包含一些属性,以及与之对应的getXXX()和setXXX()方法。按照这种风格编写出来的Java类也叫做JavaBean。

悟空接着利用Java Swing组件,编写了一个用于保存猴子信息的界面程序MonkeyGui类。运行MonkeyGui类,就会出现一个很直观而且容易操作的界面,参见图1-6。

图1-6 MonkeyGui类的界面

尽管界面程序很快编出来了,悟空还是在最关键的一步上卡住了。当小不点按下界面上的【保存】按钮时,到底如何把小不点输入的猴子信息保存到数据库中呢?悟空暂且虚晃一枪,定义了一个BusinessService类,拟定由BusinessService类的saveMonkey()方法来完成这个重任。MonkeyGui界面上的【保存】按钮的ActionListener监听器监听到小不点按下按钮的事件后,就会在它的actionPerformed()方法中调用BusinessService类的saveMonkey()方法:

    public void actionPerformed(ActionEvent event){
      try{
        Monkey monkey=new Monkey();
        //根据用户界面上输入的数据来设置Monkey对象的信息
        monkey.setName(nameTf.getText().trim());
        monkey.setAge(Integer.parseInt(ageTf.getText().trim()));
        monkey.setGender(genderTf.getText().trim().charAt(0));

        //保存Monkey对象
        businessService.saveMonkey(monkey);
        logLb.setText("猴子信息已经保存成功。");
      }catch(Exception e){
        logLb.setText("猴子信息保存失败。");
        e.printStackTrace();
      }
    }

至于到底如何实现BusinessService类的saveMonkey()方法,悟空暂且还没谱,还得先翻阅一些Java资料,再现学现用呢。在下面的1.3节,将介绍悟空学以致用,解决图1-5中Java程序与关系数据库通信的问题。