PostgreSQLコマンド覚え書き

普段使うMySQLMariaDBではなくPostgreSQLを使う現場に配属されそう。。。
なので最低限の使い方くらいは知っておこうと思いましたとさ。

psql上での操作

ある程度知ってるMySQLと一致させる形で書こうと思う。

SHOW DATABASES

\l

SHOW TABLES

\d

DESC table_name

\d table_name

CONNECT / USE

データベースへ接続する。

\c database_name

exit

まあquitだろうね

\q

通常のコマンドライン上での操作

CREATE DATABASE

createdb database_name

DROP DATABASE

これやると物理的に削除されるため、不用意に打たない。

dropdb database_name

SQL

MySQLと同じように、CLI上で叩けばいいよ。
(どうせ)方言とかあるので移植する際には気をつける。
基本を押さえてれば怖くない

Spring Beanの記述方法(XML編)

Spring BeanではアノテーションXMLでの記述があります。
私はBean使わずにComponentとか使ってればええやんみたいなスタンスだったので、 公式ドキュメントを読む際に支障をきたしまして。。。
(ほんとはきちんと理解した上で使うべきですが、個人のやることなのでね)
そのため理解するために、勉強したのでまとめようかなぁと。

とりあえず適当なBean

public class HogeBean {
    private String name;
    private int age;

    public HogeBean(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public HogeBean() {}

    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;
    }

    @Override
    public String toString() {
        return "name:" + name + " age:" + age;
    }
}

XMLベースでの記述

<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 1. setterを利用した初期値の代入 -->
    <bean id="hogebean" class="tutorial.Hoge">
        <property name="name" value="hoge"/>
        <property name="age" value="10"/>
    </bean>

    <!--
        以下と同じ
        Hoge h = new Hoge("fugafuga",20);
    -->
    <!-- 2. コンストラクタを利用した初期値の代入-->
    <bean id="hogehoge" class="tutorial.Hoge">
        <constructor-arg type="java.lang.String" name="name" value="hogehoge"/>
        <constructor-arg type="int" name="age" value="20"/>
    </bean>
</beans>

1と同じ意味を持つコードは以下になります。

Hoge h = new Hoge();
h.setName("hoge");
h.setAge(10);

propertyタグname要素に指定したプロパティ名のセッターに対して、valueの値が渡されます。
valueの代わりにrefタグを使用することで、定義された他のBeanを引数に使用できます。

<!-- 例 -->
<bean id="fuga" class="tutorial.Fuga">
    <!-- refには他BeanのIDを指定する -->
    <property name="name" ref="hoge"/>
</bean>

2と同じ意味を持つコードは以下になります。

Hoge h = new Hoge("hogehoge",20);

typeで型を指定。(独自データ型の指定も可能) name属性で代入する引数名の指定。
valueは言わずもがな。
propertyと同様にref属性を利用できる

public class App {
    public static void main( String[] args ) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 1の呼び出し
        Hoge bean = context.getBean("hogebean", Hoge.class);
        System.out.println( bean );

        // 2の呼び出し
        bean = context.getBean("hogehoge", Hoge.class);
        System.out.println(bean);
    }
}

Mainメソッド出力

name:hoge age:10
name:hogehoge age:20

ソースコードからインスタンス生成箇所を消せることがメリットなんですかね。
つまり、変更を修正しやすいんですかね。