14日目(1)Mybatis入門

1つ、Mybatisの紹介

1. Mybatisとは何ですか?

MyBatisは、Javaに基づく永続化レイヤーフレームワークであるApacheのオープンソースプロジェクトiBatisです。用来写dao

2. Mybatisの特徴は何ですか?

(1)最も簡単なインストールでは2つのjarファイルと複数のSQLマッピングファイルの構成のみが必要です。自带连接池
(2)SQLはxmlで記述されているため、管理と最適化の統合に便利です。
(3)SQLとコードを分離すると保守性が向上します
(4)マッピングタグを提供し、オブジェクトとデータベースのORMフィールド関係マッピングをサポートします
(5)オブジェクト関係マッピングタグを提供し、オブジェクト関係の形成と保守をサポートします
(6)xmlタグを提供し、動的sqlの記述をサポートします

3.Mybatisアーキテクチャ

ここに写真の説明を挿入

2、Mybatis環境構築

1.mybatisをダウンロードします

mybaitsのコードはgithub.comによって管理されています
ダウンロードリンクhttps://github.com/mybatis/mybatis-3/releases

2.jarパッケージをインポートします

テスト関連パッケージ:junit hamcrest
ログ関連パッケージ:log4j-1.2.16 slf4-api slf4j-log4j12
データベース関連jarパッケージ:mysql-connector
Mybatisは最初にjarパッケージを閉じます:mybaits-3.4.5

  • 関連する依存関係をmavenプロジェクトpom.xmlにインポートします
<dependencies>
    <!-- junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <!-- MySql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.32</version>
    </dependency>
    <!-- Mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>
    <!--日志包-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

3.jarパッケージlog4j.propertiesをインポートします

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

第三に、Mybatisの操作手順

1.Mybatis開発プロセス

(1)SqlMapConfig.xml構成ファイルをロードします
(2)SqlSessionFactoryBuilderオブジェクトを作成します
(3)SqlSessionFactoryオブジェクトを作成します
(4)SqlSessionオブジェクトを作成します
(5)削除するSqlSessionオブジェクトを実行します
(6)トランザクションを送信します
(7)リソースを解放します

2. Mybatisエントリケース(IDに従って削除)

(1)コア構成ファイル:SqlMapConfig.xml構成ファイル
src \ main \ resources \ SqlMapConfig.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">
<!--dtd是对xml配置标签与属性的约束-->
<configuration>
    <!--配置mybatis的开发环境,该目录下可以有多个environment,
    	和spring整合后 environments配置将废除-->
    <environments default="mysql"><!--当前默认选择的是mysql环境-->
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务的类型:jdbc事务管理-->
            <transactionManager type="JDBC"/>
            <!--配置连接数据库的信息:用的是数据源(连接池)-->
            <dataSource type="POOLED">
                <!--四大配置信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis01?characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>
    <!--配置多个映射文件,告知mybatis映射配置的位置-->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

(2)マッピングファイル:ユーザーのマッピング構成ファイルで構成し、このマッピングをSqlMapConfig.xmlのmappersタグに追加します。
src \ main \ resources \ UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--mapper的约束文件-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace命名空间,用于隔离sql
    当我们有多个UserMapper.xml时,为了区分不同的文件,则需要指定namespace,这个值必须唯一。
    需要取一个名字来辨别,可以随便取,但一般是用对应的实体类包名-->
<mapper namespace="cn.cyl.bean.User">
    <!--id:Mybatis是将sql语句写在xml文件中,
        以后sqlSession对象根据namespace.id的格式来获取sql语句-->
    <!--parameterType:用于指定传入参数的类-->
    <delete id="deleteById" parameterType="int">
        <!--sql 语句中使用#{}字符:
        	它代表占位符,相当于原来 jdbc 部分所学的 ?,都是用于执行语句时替换实际的数据。    
        	具体的数据是由#{}里面的内容决定的。  
           #{}中内容的写法:   
        	由于数据类型是基本类型,所以此处可以随意写。 -->
        delete from user where id = #{id}
    </delete>
</mapper>

(3)テスト
src \ test \ java \ cn \ cyl \ pack01 \ Test01Mybatis.javaをテストクラスに追加します

public class Test01Mybatis {
    
    
    @Test
    public void test01(){
    
    
        //1.使用类加载器 读取SqlMapConfig.xml配置文件
        InputStream inputStream = Test01Mybatis.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
        //2.创建构建者对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //3.创建SqlSessionFactory工厂对象; 加载核心配置文件,参1:输入流
        SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        //4.创建SqlSession对象
        SqlSession sqlSession = sessionFactory.openSession();
        //5.执行SqlSession对象执行删除
        //sql语句:delete from user where id = ?
        //执行删除 参1:namespace.id的格式    参2:参数值
        sqlSession.delete("cn.cyl.bean.User.deleteById",24);
        //6.提交事务
        //mybatis的sqlSession不会自动提交,需要手动提交,不然不会执行sql语句
        //只有增删改需要提交,查询不需要(因为查询只有读操作,没有写操作)
        sqlSession.commit();
        //7.释放资源
        sqlSession.close();
    }
}

3.MySessionUtilをカプセル化します

(1)SqlSessionツールクラス
src \ main \ java \ cn \ cyl \ util \ MySessionUtils.java

public class MySessionUtils {
    
    
    //定义为成员变量
    private static SqlSessionFactory sessionFactory;

    //static 静态代码,在类加载的时候执行一次,且只执行一次
    static {
    
    
        //1.使用类加载器 读取SqlMapConfig.xml配置文件
        InputStream inputStream = MySessionUtils.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
        //2.创建构建者对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //3.创建SqlSessionFactory工厂对象
        sessionFactory = sqlSessionFactoryBuilder.build(inputStream);//加载核心配置文件,参1:输入流
    }

    public static SqlSession getSession(){
    
    
        //4.创建SqlSession对象
        SqlSession sqlSession = sessionFactory.openSession();
        return sqlSession;
    }
}

(2)テストタイプtest
src \ test \ java \ cn \ cyl \ pack01 \ Test02Mybatis.java`

public class Test02Mybatis {
    
    
    @Test
    public void test01(){
    
    
        //4.创建SqlSession对象
        SqlSession sqlSession = MySessionUtils.getSession();
        //5.执行SqlSession对象执行删除
        //sql语句:delete from user where id = ?
        sqlSession.delete("cn.cyl.bean.User.deleteById",24);//执行删除 参1:namespace.id的格式    参2:参数值
        //6.提交事务
        //只有增删改需要提交,查询不需要(因为查询只有读操作,没有写操作)
        //mybatis的sqlSession不会自动提交,需要手动提交,不然不会执行sql语句
        sqlSession.commit();
        //7.释放资源
        sqlSession.close();
    }
}

4、主要なカテゴリー分析


  1. SqlSessionの使用範囲SqlSessionは、クエリ、挿入、更新、削除など、データベースに対する操作をカプセル化します。
    SqlSessionは、SqlSessionFactoryによって作成されます。
    SqlSessionFactoryは、SqlSessionFactoryBuilderを介して作成されます。
  2. SqlSessionFactoryBuilder
    SqlSessionFactoryBuilderは、SqlSessionFacotyの作成に使用されます。SqlSessionFacotyが作成されると、SqlSessionはSqlSessionFactoryを介して作成されるため、SqlSessionFactoryBuilderは必要ありません。したがって、SqlSessionFactoryBuilderをツールクラスとして使用できます。最適な使用範囲は、メソッドスコープ、つまりメソッド本体のローカル変数です。
  3. SqlSessionFactory
    SqlSessionFactoryは、openSessionのさまざまなオーバーロードメソッドを定義するインターフェイスです。SqlSessionFactoryの最適な使用範囲は、アプリケーションの実行時間全体です。作成すると、再利用できます。SqlSessionFactoryは、通常、シングルトンモードで管理されます。

おすすめ

転載: blog.csdn.net/qq_43639081/article/details/108812439