番外02:Spring JAVAでMysqlデータベースを操作する(なぜORMを使うのか)SpringでMybatisを統合する前のベース

4924 ワード

前景の概要
08 Spring操作の耐久層(Mybatisを融合させる)で一番簡単に使っています.対外依存度が高く、初心者にはジャンプ性があります.この章を大写しして下敷きをする.
ORMの役割とSpringのデータベースの最適化
今はネット上で流行している各種ORMの枠組みを見て、データベースを操作しています.例えばMybatishibernateなど、いったいなぜORMの枠組みを使うのですか?最初はORMが存在しませんでした.JAVAを使ってデータベースを操作する手順は以下の通りです.
元の方法でデータベースを操作します(直接データベース接続池を取得します).
アプリ.java
package me.laiyijie.demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class App {

    public static void main(String[] args) throws SQLException, ClassNotFoundException {

        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/myspring", "test", "o34rWayJPPHgudtL");
        ResultSet rs = conn.createStatement().executeQuery("select * from account");

        while (rs.next()) {
            System.out.println("username: " + rs.getString("username") + " password: " + rs.getString("password") + " name: "
                    + rs.getString("name") + " create_time: " + rs.getLong("createtime"));
        }
        conn.close();
    }
}
ステップ詳細:
  • データベースドライバをロードする
  • Class.forName(「comp.mysql.jdbc.Driver」);
  • データベース接続を取得する
  • Connection conn=DriverManager.get Connection("jdbc:mysql://127.0.0.1/myspring「test」、「o 34 rWay JPPHgtL」;
  • は、クエリー文を実行し、結果セット
  • を取得する.
    ResultSet rs=conn.createment().executeQuery("select*from account")
  • 出力結果
  • while(rs.next){System.out.println("username:"+s.get String("username")+"password:"+rs.getsString(")+"name:"+rst.getsString"+"
  • 接続を閉じる
  • conn.close()
    この操作方式にはいくつかの弊害があります.
  • は自分でデータベースの接続を管理しなければなりません.(また開けます.また閉じます.もし閉めないと漏れてしまいます.また、スレッドがないので、効率が心配です.)
  • 毎回SQL文を自分で組み立てるので、間違えやすいです.
  • はオブジェクト指向の方式ではありません.操作するたびにgetStringを通して取得します.データベースに対してよく知っている必要があります.つまり、結合が深いということです.
  • これらの問題を逐次解決します.
    問題解決と最適化
    データベース接続管理の問題を解決します.
    解決策は、 を導入してデータベース接続を管理することである.
    08 Spring操作耐久層(Mybatisを融合させる)の一番簡単な使い方(Mybatis Generatorを使用する)を紹介しました.
    
        commons-dbcp
        commons-dbcp
        1.4
    
    
    この依存性のorg.apache.commons.dbcp.BasicDataSourceはデータベース接続池の1つの実装であり、データベース接続を効果的に管理することができます.このようなデータベース接続リソースをデータソースと呼びます.Springでの構成は以下の通りです.
      
    
    つまり、私達は通過できます.
    @Autowired
    private BasicDataSource basicDataSource;
    
    public void test() throws SQLException {
        Connection conn = basicDataSource.getConnection();
    }  
    
    直接データベース接続を取得します.接続のクローズなどに関心がありません.
    解決には常にSQLとオブジェクトマッピングの問題(ORMが発生します)を直接書く必要があります.
    オブジェクトマップ
    今はデータベースから取り出したデータがそのまま対象になると思います.それはいいですねrs.getString("uesrname")を繰り返して書く必要はない.このようにタイプを知る必要があり、フィールド名を知る必要がある重複文ではなく、そのままAccount.getUsername()を書くことができる.これは本当に素晴らしいです.Mybatisはまさにこのようなことをしてくれました.08 Spring操作耐久層の章では、MybatisGeneratorは次のようなことをしてくれました.
  • は、データテーブルに対応するオブジェクトを作成する(データテーブルと同じ)
      public class Account {
          private String username;
      
          private String password;
      
          private String name;
      
          private Long create_time;
          
      }   
    
  • が照会した後、結果をオブジェクトにマッピングする(つまり、クエリが完了したら、直接オブジェクトに戻る)
      public interface AccountMapper {
          long countByExample(AccountExample example);
      
          int deleteByExample(AccountExample example);
      
          int deleteByPrimaryKey(String username);
      
          int insert(Account record);
      
          int insertSelective(Account record);
      
          List selectByExample(AccountExample example);
      
          Account selectByPrimaryKey(String username);
      
          int updateByExampleSelective(@Param("record") Account record, @Param("example") AccountExample example);
      
          int updateByExample(@Param("record") Account record, @Param("example") AccountExample example);
      
          int updateByPrimaryKeySelective(Account record);
      
          int updateByPrimaryKey(Account record);
      }   
    
  • .
  • SQL文を直接組み立てる必要がない
      public List getAccountsByCreateTime(Long start, Long end) {
          AccountExample accountExample = new AccountExample();
          accountExample.or().andCreate_timeGreaterThan(start).andCreate_timeLessThanOrEqualTo(end);
          return accountMapper.selectByExample(accountExample);
      }   
    
  • こんなにいい利器があるのに、なぜ使わないですか?詳細は08 Springを参照してください.耐久層を操作します.一番簡単に使用します.(Mybatis Generatorを使用します.)