[1] Mybatisの使用開始、追加、削除、変更、確認

Mybatis

基盤が必要:

  • JDBC
  • Mysql
  • Javaの基本
  • Maven
  • JUnit

1はじめに

1.1Mybatisとは

  • MyBatisは、カスタムSQL、ストアドプロシージャ、および高度なマッピングをサポートする優れた永続性レイヤーフレームワークです。
  • MyBatisは、ほとんどすべてのJDBCコードと、パラメーターの設定および結果セットの取得の作業を排除します。
  • MyBatisは、プリミティブ型、インターフェイス、およびJava POJO(Plain Old Java Objects)を、単純なXMLまたはアノテーションを介してデータベース内のレコードとして構成およびマップできます。
  • MyBatisは元々ApacheのオープンソースプロジェクトiBatisでした。2010年に、このプロジェクトはapacheソフトウェアファウンデーションから[google code](https://baike.baidu.com/item/google code / 2346604)に移行され、MyBatisに名前が変更されました。 。
  • 2013年11月にGithubに移行しました

1.2、Mybatisの入手方法

  • Github:

1.3、持久化

データの永続性

  • 永続性は、プログラムデータを永続状態と一時状態に変換するプロセスです。
  • メモリ:電源を切ると失われます
  • データベース(jdbc)、ioファイルの永続性。
  • 生活の中で:冷蔵、缶詰、写真

なぜ永続性が必要なのですか?

  • 彼を手放すことができないいくつかのオブジェクトがあります。

  • メモリが高すぎる

1.4、永続層

Daoレイヤー、サービスレイヤー、コントローラーレイヤー

  • 永続化作業を完了するためのコードブロック
  • 境界は非常に明確でした

1.5なぜMybatisが必要なのですか

  • 利便性

  • 従来のjdbcコードは複雑すぎます。単純化するために、フレームワーク、自動化があります

  • プログラムがデータベースにデータを保存するのを手伝ってください

  • mybatisは必要ありません。始めるのは簡単です。

  • 利点:

    • シンプルで習得が容易:それ自体は小さくてシンプルです。サードパーティの依存関係がない場合、最も簡単なインストールは、2つのjarファイルといくつかのSQLマッピングファイルの構成だけです。習得と使用が簡単です。ドキュメントとソースコードを通じて、その設計アイデアと実装を完全に把握できます。
    • 柔軟性:Mybatisは、アプリケーションまたはデータベースの既存の設計に影響を与えません。sqlはxmlで記述されており、統合された管理と最適化に便利です。データベースを操作するためのすべての要件は、sqlステートメントを介して満たすことができます。
    • SQLとプログラムコードの分離:DAOレイヤーを提供することにより、ビジネスロジックとデータアクセスロジックが分離され、システム設計がより明確になり、保守が容易になり、単体テストが容易になります。SQLとコードを分離すると、保守性が向上します。
    • マッピングタグを提供し、オブジェクトとデータベースormフィールド間のマッピングをサポートします。
    • オブジェクトリレーショナルマッピングタグを提供し、オブジェクトリレーショナルの確立と維持をサポートします。
    • xmlタグを提供し、動的SQLの記述をサポートします。

2.最初のMybatisプログラム

アイデア:環境を構築する-> Mybatisをインポートする->コードを書く->テストする

3、CRUD

1、名前空間

名前空間のパッケージ名は、Dao / mapperインターフェースのパッケージ名と一致している必要があります。

2、選択

選択、クエリステートメント:

  • id:対応する名前空間のメソッド名
  • resultType:SQLステートメント実行の戻り値
  • parameterType:抽象メソッドの入力パラメータータイプ

実装プロセス:次の手順は、挿入、変更、および削除について同じです。

  1. インターフェイスの抽象メソッドを書く
List<User> getUserInfo();
  1. 対応するSQLステートメントをmapper.xmlに記述します
<mapper namespace="com.kuber.dao.UserMapper">
    <select id="getUserInfo" resultType="com.kuber.pojo.User">
        select * from users
    </select>
</mapper>
  1. テスト
@Test
    public void getUserInfo(){
    
    
        /*获取SqlSession*/
        SqlSession sqlSession;
        try {
    
    
            /*获取SqlSession*/
            sqlSession = MybatisUtils.getSqlSession();

            /*执行sql*/
            /*相当于 UserMapper mapper = new UserMapperImpl();*/
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> users = mapper.getUserInfo();
            for (User user : users) {
    
    
                System.out.println(user);
            }
            sqlSession.close();
        }finally {
    
    
            MybatisUtils.closeSqlSession();
        }
    }

[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-rfdhL4xD-1604566530913)(img \ execution result1.png)]

3、挿入

  1. インターフェイスメソッドの記述
int addUser(User user);
  1. 対応するSQLステートメントをmapper.xmlに記述します
	<insert id="addUser" parameterType="com.kuber.pojo.User">
        insert into users values(#{uid},#{username},#{password})
    </insert>
  1. テスト
@Test
    public void addUser(){
    
    
        /*增删改必须要提交事务*/
        SqlSession sqlSession;
        try {
    
    
            sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            User user = new User(null,"tonyma","111");
            int num = mapper.addUser(user);
            if(num > 0){
    
    
                System.out.println("插入成功");
            }else {
    
    
                System.out.println("插入失败");
            }
            /*提交事务*/
            sqlSession.commit();
        }finally {
    
    
            MybatisUtils.closeSqlSession();
        }

    }

4、更新

  1. インターフェイスメソッドの記述
    int updateUser(User user);
  1. 対応するSQLステートメントをmapper.xmlに記述します
<update id="updateUser" parameterType="com.kuber.pojo.User">
	update users set username = #{username},password = #{password} where uid = #{uid}
</update>
  1. テスト
    @Test
    public void updateUser(){
    
    
        SqlSession sqlSession;
        try {
    
    
            sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            int num = mapper.updateUser(new User(7,"jackma","123456"));
            if (num > 0){
    
    
                System.out.println("修改成功");
            }else {
    
    
                System.out.println("修改失败");
            }
            sqlSession.commit();
        }finally {
    
    
            MybatisUtils.closeSqlSession();
        }


    }

5、削除

  1. インターフェイスメソッドの記述
    int deleteUser(int id);
  1. 対応するSQLステートメントをmapper.xmlに記述します
    <delete id="deleteUser" parameterType="int">
        delete from users where uid = #{id}
    </delete>
  1. テスト
    @Test
    public void deleteUser(){
    
    
        SqlSession sqlSession;
        try {
    
    
            sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            int num = mapper.deleteUser(9);
            if (num > 0){
    
    
                System.out.println("删除成功");
            }else{
    
    
                System.out.println("删除失败");
            }
            sqlSession.commit();
        }finally {
    
    
            MybatisUtils.closeSqlSession();
        }


    }
  • 追加、削除、変更はトランザクションをコミットする必要があります!

6.エラーが発生しやすいポイント

  • 間違ったタグと一致しないでください

  • リソースバインディングマッパー、パスを使用する必要があります

  • プログラム構成ファイルは仕様に準拠している必要があります

  • Mavenリソースはエクスポートされません

    次のコードブロックをpom.xmlファイルに追加します

        <!--在build中配置resours,来防止我们资源导出失败的问题-->
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>true</filtering>
                </resource>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>
    

7.ユニバーサルマップ

データベース内のエンティティクラス、テーブル、フィールド、またはパラメータが多すぎると仮定すると、Mapを使用できます。

    <insert id="addUser2" parameterType="map">
        insert into users(uid,username,password) values(#{uid},#{uname},#{upwd})
    </insert>
@Test
public void addUser2(){
    
    
    SqlSession sqlSession;
    try {
    
    
        sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("uid",8);
        map.put("uname","jacktony");
        map.put("upwd","22333");
        int counter = mapper.addUser2(map);
        if (counter > 0){
    
    
            System.out.println("插入成功!");
        }else {
    
    
            System.out.println("插入失败!");
        }
        sqlSession.commit();
    }finally {
    
    
        MybatisUtils.closeSqlSession();
    }
}

8.考える

ファジークエリの書き方は?

  1. Javaコードが実行されるとき、ワイルドカード%%を渡します
  2. SQLスプライシングでワイルドカードを使用する(SQLインジェクションを防ぐための注意)
    <select id="getLikeUserInfo" parameterType="string" resultType="com.kuber.pojo.User">
        select  * from users where username like #{value}
    </select>
    @Test
    public void getLikeUserInfo(){
    
    
        SqlSession sqlSession;
        try {
    
    
            sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> users = mapper.getLikeUserInfo("%han%");
            for (User user : users) {
    
    
                System.out.println(user);
            }
        }finally {
    
    
            MybatisUtils.closeSqlSession();
        }

    }

おすすめ

転載: blog.csdn.net/weixin_43215322/article/details/109515732