番外02:Spring JAVAでMysqlデータベースを操作する(なぜORMを使うのか)SpringでMybatisを統合する前のベース
4924 ワード
前景の概要
08 Spring操作の耐久層(Mybatisを融合させる)で一番簡単に使っています.対外依存度が高く、初心者にはジャンプ性があります.この章を大写しして下敷きをする.
ORMの役割とSpringのデータベースの最適化
今はネット上で流行している各種ORMの枠組みを見て、データベースを操作しています.例えば
元の方法でデータベースを操作します(直接データベース接続池を取得します).
アプリ.javaデータベースドライバをロードする 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文を自分で組み立てるので、間違えやすいです. はオブジェクト指向の方式ではありません.操作するたびに これらの問題を逐次解決します.
問題解決と最適化
データベース接続管理の問題を解決します.
解決策は、
08 Spring操作耐久層(Mybatisを融合させる)の一番簡単な使い方(Mybatis Generatorを使用する)を紹介しました.
解決には常にSQLとオブジェクトマッピングの問題(ORMが発生します)を直接書く必要があります.
オブジェクトマップ
今はデータベースから取り出したデータがそのまま対象になると思います.それはいいですねは、データテーブルに対応するオブジェクトを作成する(データテーブルと同じ) が照会した後、結果をオブジェクトにマッピングする(つまり、クエリが完了したら、直接オブジェクトに戻る) . SQL文を直接組み立てる必要がない こんなにいい利器があるのに、なぜ使わないですか?詳細は08 Springを参照してください.耐久層を操作します.一番簡単に使用します.(Mybatis Generatorを使用します.)
08 Spring操作の耐久層(Mybatisを融合させる)で一番簡単に使っています.対外依存度が高く、初心者にはジャンプ性があります.この章を大写しして下敷きをする.
ORMの役割とSpringのデータベースの最適化
今はネット上で流行している各種ORMの枠組みを見て、データベースを操作しています.例えば
Mybatis
とhibernate
など、いったいなぜ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();
}
}
ステップ詳細:ResultSet rs=conn.createment().executeQuery("select*from account")
この操作方式にはいくつかの弊害があります.
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);
}
public List getAccountsByCreateTime(Long start, Long end) {
AccountExample accountExample = new AccountExample();
accountExample.or().andCreate_timeGreaterThan(start).andCreate_timeLessThanOrEqualTo(end);
return accountMapper.selectByExample(accountExample);
}