mybatis詳細解一:mybatisを使う理由
21466 ワード
一:mybatisとは何ですか?
1.データベースuserテーブルを作成する
①、問題一://データベースドライバクラスをロードする。データベース接続conn=DriverManager.get Connectionを取得します。この2つのコードは私達に頻繁に接続を取得してクローズさせ、データベースの資源の浪費をもたらし、データベースの性能に影響を与えます。
MyBatis apache iBatis, 2010 apache software foundation google code,
MyBatis 。2013 11 Github。
iBATIS “internet” “abatis” , Java 。
iBATIS SQL Maps Data Access Objects(DAO)。
MyBatis SQL , 。
MyBatis JDBC 。
MyBatis XML ,
Java POJOs(Plain Ordinary Java Objects, Java ) 。
二:mybatisを使ってjdbcを置換する理由1.データベースuserテーブルを作成する
CREATE TABLE `user` (
`id` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT ' ',
`birthday` timestamp NULL DEFAULT NULL COMMENT ' ',
`sex` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ' ',
`address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ' ',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
2.jdbcのコードを見てから、jdbcを使わない理由を確認します。package com.mybatis.pojo;
import java.util.Date;
import java.util.List;
public class User {
private String id; // id
private String username;//
private Timestamp birthday;//
private String sex;//
private String address;//
public User() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Timestamp getBirthday() {
return birthday;
}
public void setBirthday(Timestamp birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
package com.mybatis;
import com.mybatis.pojo.User;
import java.sql.*;
/**
* Created by user on 2019/1/24.
*/
public class JdbcUtils {
//MySQL
public static String driverClass = "com.mysql.jdbc.Driver";
//
public static String userName = "root";
//
public static String passWord = "123";
// URL
public static String url = "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8";
//
public static Connection conn = null;
// , PreparedStatement
public static PreparedStatement ps = null;
//
public static ResultSet rs = null;
public static User getUserById(String id){
User user = new User();
try {
//
Class.forName(driverClass);
//
conn = DriverManager.getConnection(url, userName, passWord);
// sql ,?
String sql = "select * from `user` where `id`=?";
// statement
ps = conn.prepareStatement(sql);
// sql , sql ?( 1 ),
ps.setString(1, id);
// sql ,
rs = ps.executeQuery();
while (rs.next()) {
user.setId(rs.getString("id"));
user.setUsername(rs.getString("username"));
user.setAddress(rs.getString("address"));
user.setBirthday(rs.getTimestamp("birthday"));
user.setSex(rs.getString("sex"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return user;
}
public static void main(String[] args) {
System.out.println(JdbcUtils.getUserById("1"));
}
}
三:分析( mybatis , , mybatis , )
上記の例を通して、次のように分析できます。①、問題一://データベースドライバクラスをロードする。データベース接続conn=DriverManager.get Connectionを取得します。この2つのコードは私達に頻繁に接続を取得してクローズさせ、データベースの資源の浪費をもたらし、データベースの性能に影響を与えます。
:
②、問題二:sql文をハードにプログラムに符号化し、sql文が修正されたら、Javaコードを再コンパイルする必要があり、システムのメンテナンスに不利であり、プログラムの拡張開放に対する修正閉鎖の条件を満たさない。 : sql xml , sql , Java ,
③問題3:PreparedSttementにパラメータを設定し、プレースホルダの設定値はいずれもJavaコードにハードエンコードされており、システムの維持に不利です。 : sql xml
④問題四:結果集をresultsetから巡回した場合、表のフィールドにハードコードが存在し、システムの維持に不利です。 : Java
⑤問題5:重複コードが特に多く、頻繁なtry-catch : try-catch
⑥、問題六:キャッシュが悪いので、データ量が大きい場合、この方式の性能は特に低いです。 :
⑦問題7:sqlの移植性が悪いので、データベースを変えたらsql文を書き換えるかもしれません。 : JDBC , sql ,