1.0MyBatisオブジェクト分析
(1)Resourcesクラス
Resourcesクラスは、その名前が示すように、リソースファイルを読み取るために使用されるリソースです。リソースファイルをロードして解析することにより、さまざまなタイプのIOストリームオブジェクトを返す方法はたくさんあります。
(2)SqlSessionFactoryBuilderクラスのSqlSessionFactoryを
作成するには、SqlSessionFactoryBuilderオブジェクトのbuild()メソッドを使用する必要があります。SqlSessionFactoryBuilderオブジェクトは、ファクトリオブジェクトの作成後に履歴ミッションを完了したため、破棄できます。したがって、SqlSessionFactoryBuilderオブジェクトは通常、メソッド内のローカルオブジェクトとして作成され、メソッドは終了し、オブジェクトは破棄されます。
(3)SqlSessionFactoryインターフェイス
SqlSessionFactoryインターフェイスオブジェクトは、スレッドセーフなヘビーウェイトオブジェクト(システムオーバーヘッドの高いオブジェクト)であるため、アプリケーションに必要なのはこのオブジェクトの1つだけです。SqlSessionを作成するには、SqlSessionFactoryインターフェイスのopenSession()メソッドを使用する必要があります。
➢openSession(true):自動送信機能を使用してSqlSessionを作成します
➢openSession(false):自動送信機能を使用せずにSqlSessionを作成します。手動で送信する必要があります
➢openSession():openSession(false)と同じ
(4)SqlSessionインターフェイス
SqlSessionインターフェイスオブジェクトは、永続化操作を実行するために使用されます。SqlSessionは、データベースセッションに対応します。セッションは、SqlSessionオブジェクトの作成で始まり、SqlSessionオブジェクトの終了で終わります。
SqlSessionインターフェイスは、selectOne()、selectList()、insert()、update()、delete()、commit()、rollback()などのデータを操作するメソッドを定義します
。SqlSessionインターフェイスオブジェクトはスレッドセーフではないため、すべてのデータベースセッション終了する前に、close()メソッドをすぐに呼び出して閉じる必要があります。セッションが再度必要になります。再度作成してください。SqlSessionはメソッド内に作成され、使用後に閉じられます。
1.1コードを単純化するためのツールクラスを作成する
(1)MyBatisUtilsクラスを
作成するzepフォルダーの下に新しいutilsフォルダーを作成し、utilsフォルダーの下にMyBatisUtilsツールクラスを作成します。
package com.zep.utils;
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 java.io.IOException;
import java.io.InputStream;
public class MybatisUtils {
private static SqlSessionFactory factory = null;
/*静态代码块:执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁*/
//使用 静态块 创建一次 SqlSessionFactory
static {
String config = "mybatis.xml"; //需要和你的项目中的文件名一样
try {
//读取配置文件
InputStream in = Resources.getResourceAsStream(config);
//创建SqlSessionFactory对象,使用SqlSessionFactoryBuilder
factory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取SqlSession对象的方法
public static SqlSession getSqlSession() {
SqlSession sqlSession = null;
if (factory != null) {
sqlSession = factory.openSession(); // 非自动提交事务
}
return sqlSession;
}
}
(2)MyBatisUtilクラス
を使用して、 MybatisUtils.getSqlSession()を介してsqlSessionオブジェクトを直接取得します。
SqlSession sqlSession = MybatisUtils.getSqlSession()
package com.zep;
import com.zep.domain.Student;
import com.zep.utils.MybatisUtils;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyApp2 {
public static void main(String[] args) throws IOException {
// 5.【重要】获取SqlSession对象,从SqlSessionFactory中获取SqlSession
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 6.【重要】指定要执行的sql语句的标识。sql映射文件中的namespace + “.” + 标签的id值
String sqlId = "com.zep.dao.StudentDao"+ "." +"selectStudents";
// 7.执行sql语句,通过sqlId找到语句
List<Student> studentList = sqlSession.selectList(sqlId);
// 8.输出结果
// studentList.forEach(student -> System.out.println(student));
for (Student student : studentList) {
System.out.println("查询到的学生=" + student);
}
// 9.关闭SqlSession对象
sqlSession.close();
}
}
操作の結果は次のとおりです。