疫情期間に自分を充実させるために(笑、SSM の M について学ぶ
疫情期間に自分を充実させるために(笑、SSM の M について学ぶ
MyBatis の紹介#
Github 上のオープンソースリポジトリの README によると:
MyBatis SQL マッパーフレームワークは、オブジェクト指向アプリケーションでリレーショナルデータベースを使用するのを容易にします。MyBatis は、XML ディスクリプタまたはアノテーションを使用して、オブジェクトをストアドプロシージャまたは SQL ステートメントに結びつけます。シンプルさは、MyBatis データマッパーの最大の利点です。
MyBatis SQL は、オブジェクト指向アプリケーションを書くときにリレーショナルデータベースをより簡単に使用するためのマッピングフレームワークで、MyBatis は XML またはアノテーションを使用してオブジェクトと SQL ステートメントまたはストアドプロシージャを結びつけます。MyBatis はオブジェクト関係マッピングツールに比べて、シンプルさが最大の利点です。
つまり、非常に簡単に言うと、MyBatis はプログラム内でデータベースを便利に使用するためのツールで、私たちの会社が現在使用している自分でラップした DE というものに似ています。どちらも JDBC をラップした ORM 持続層フレームワークで、もう一つのものは Hebernate と呼ばれています。彼らの違いは主に Mybatis がネイティブ SQL を使用するのに対し、Hebernate は独自にラップしたステートメント、HQL と呼ばれるものを使用します。私たちの会社のそれは Hebernata にもっと似ていますが、さらに劣っていて、カスタムクエリステートメントはともかく、余り機能すらありません。前に、ID 番号から年齢と性別を取得するインターフェースを書く必要があり、データベースに保存されているものと一致しないことがありました。この性別の判断は本当に私を困らせました。私は「%」で解決することを要求していません。せめて MOD () のようなものを用意してほしいです。結局、私が decode を使って 0-9 を列挙し、奇数(男)偶数(女)をカスタムすることになりました。私たちの会社のそれはあまりにも。。。なので、このものを理解することはとても良いことです。
Mybatis の初歩#
新しいフレームワークを学ぶには、もちろんフレームワークの構築から始める必要があります。今のところ、接触しているのは Maven を通じてプロジェクトに依存関係を追加するだけで、自動的に jar パッケージがロードされます。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
コードを見せて!#
次は最もワクワクするコーディングの段階です。
まずはシンプルなエンティティ自動車 POJO を作成する必要があります。
package com.MyBatis;
public class Car {
private int id;
private String name;
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;
}
}
次に、マップのインターフェースを追加し、アノテーションを使用してエンティティクラスとデータベースを対応させます。
package com.Mybatis.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.how2java.Mybatis.Car;
public interface CarMapper {
@Insert(" insert into car ( name ) values (#{name}) ")
public int add(Car Car);
@Delete(" delete from car where id= #{id} ")
public void delete(int id);
@Select("select * from car where id= #{id} ")
public Car get(int id);
@Update("update car set name=#{name} where id=#{id} ")
public int update(Car Car);
@Select(" select * from car ")
public List<Car> list();
}
Mybatis の全体設定ファイル mybatis-config.xml を追加します。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package />
</typeAliases>
<environments default="development">
<environment>
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property />
<property />
<property />
<property />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/Mybatis/pojo/Car.xml"/>
<mapper/>
</mappers>
</configuration>
テスト CURD のテストクラスを作成します。
package com.how2java;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.Mybatis.mapper.CarMapper;
import com.how2java.pojo.Car;
public class TestMybatis {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
CarMapper mapper = session.getMapper(CarMapper.class);
// add(mapper);
// delete(mapper);
// get(mapper);
// update(mapper);
listAll(mapper);
session.commit();
session.close();
}
private static void update(CarMapper mapper) {
Car c= mapper.get(8);
c.setName("変更されたCar名");
mapper.update(c);
listAll(mapper);
}
private static void get(CarMapper mapper) {
Car c= mapper.get(8);
System.out.println(c.getName());
}
private static void delete(CarMapper mapper) {
mapper.delete(2);
listAll(mapper);
}
private static void add(CarMapper mapper) {
Car c = new Car();
c.setName("新しく追加されたCar");
mapper.add(c);
listAll(mapper);
}
private static void listAll(CarMapper mapper) {
List<Car> cs = mapper.list();
for (Car c : cs) {
System.out.println(c.getName());
}
}
}
これで基本的な CURD が完成しました。実際にはアノテーションを使用せずに XML の設定ファイルを使ってデータベースとエンティティオブジェクトの中間層を作成することもできますが、非常に面倒です。正式な開発では誰もそれを使用しないと思います。みんなアノテーションを使うはずです。明日、他の友達に聞いてみます。
感謝します how2j の管理者!