Spring Boot データ アクセスと JDBC の簡単な実装に関する基本的な知識

目次

Spring Boot データアクセスの基本

春のデータ

 ORM

JDBC

JPA

JDBCのシンプルな実装

ステップ 1: 新しい Maven プロジェクトを作成し、依存関係を追加する

ステップ 2: データ ソースを構成する - プログラムからアクセスできるようにする 

ステップ 3: データ ソースを構成する - IDEA にアクセスできるようにする

ステップ 4: データベースとテーブルを追加する

ステップ 5: 各レベルのフレームワークを確立し、対応するコードを作成する

ステップ 6: 各インターフェイス メソッドをテストする

要約する


Spring Boot データアクセスの基本

春のデータ

        Spring Data プロジェクトは Spring のサブプロジェクトであり、非リレーショナル データベース、Map-Reduce フレームワーク、クラウド データ サービスなどを含む Spring フレームワーク アプリケーションに基づいてデータ アクセス カウントの構築を簡素化することを目的としています。リレーショナル データベースのサポートにアクセスします。
        Spring Data は、データベース アクセスを簡素化し、クラウド サービスをサポートするためのオープン ソース フレームワークです。その主な目標は、データベース アクセスを便利かつ高速にすることであり、マップ リデュース フレームワークとクラウド コンピューティング データ サービスをサポートします。さらに、Oracle RAC などのリレーショナル データベースに基づくデータ サービスもサポートします。大量のデータを含むプロジェクトの場合、Spring Data を使用するとプロジェクト開発を簡素化できます。Spring Framework による JDBCORM のサポートと同様に、Spring Data によりデータ アクセスがより便利になります。

 ORM

        オブジェクト リレーショナル マッピング (略して ORM)、オブジェクト指向開発手法は、今日のエンタープライズ レベルのアプリケーション開発環境における主流の開発手法であり、リレーショナル データベースは、エンタープライズ レベルのアプリケーションにデータを永続的に保存するための主流のデータ ストレージ システムです。環境。オブジェクトとリレーショナル データはビジネス エンティティの 2 つの表現であり、ビジネス エンティティはメモリ内ではオブジェクトとして表され、データベース内ではリレーショナル データとして表されます。メモリ内のオブジェクト間には関連付けや継承関係がありますが、データベースではリレーショナル データは多対多の関連付けや継承関係を直接表現できません。したがって、オブジェクトリレーショナルマッピング(ORM)システムは一般にミドルウェアの形で存在し、主にプログラムオブジェクトからリレーショナルデータベースデータへのマッピングを実現します。
ORM フレームワークとその利点と欠点

JDBC

        idbc (Java DataBase Connectivitv) は、iava がデータベース操作に接続するためのネイティブ インターフェイスです。JDBC は Java プログラマー向けの APl であり、データベースとの接続を実装するサービス プロバイダー向けのインターフェイス モデルです。JDB は API としてプログラム開発用の標準インターフェイスを提供し、さまざまなデータベース ベンダーやサードパーティのミドルウェア ベンダーがデータベースとの接続を実現するための標準的な方法を提供します。一文の要約: jdbc は、データベースを操作するすべてのフレームワークに必須であり、データベース メーカーによって提供されます。しかし、Java プログラマがさまざまなデータベースを呼び出すのを容易にするために、各データベース メーカーは idbc インターフェイスを実装する必要があります。
Spring ブートの依存関係では、JDBC の使用により JDBCAPI が選択されます。
Spring-data-jdbc は普通の jdbc ではありません。メソッド名や基本的な CRUD などに基づいて SQL を推定する機能など、jpa に似た機能がいくつかあり、ネイティブ SQL を作成する機能もあります。最も重要なことは、非常に爽快で、hibernte や jpa に依存する必要がないことです。

JPA

        jpa (Java Persistence API) は Java 永続化仕様であり、主流の rm フレームワークによって実装される orm フレームワークの標準です。Sun は 2 つの理由で新しい JPAORM 仕様を導入しました: 1 つは既存の Java EE および Java SE アプリケーション開発作業を簡素化するためで、2 つ目は ORM テクノロジを統合して世界の統一を実現したいと考えているためです。ORM はアイデアであり、アプリケーション プログラムと JDBC API の間に挿入される中間層です。JDBC はオブジェクト指向プログラミングをあまりサポートしていません。ORM はこの問題を解決し、 JDBC を通じてフィールドをオブジェクトに効率的にマップします。具体的な実装には、hibernate、spring data jpa、open jpa が含まれます。
Spring DataJPA は、JPA 仕様の再カプセル化と抽象化として理解でき、最下層は依然として Hibernate の JPA テクノロジーを使用して実装されています。


JDBCのシンプルな実装

        Spring Boot では、データ ソースを通じてデータベース接続を取得し、ネイティブ JDBC ステートメントを使用してデータベースを操作できます。Spring 自体も、ネイティブ JDBC 用の軽量パッケージ、つまり dbcTemplate を作成します。DBC の依存関係を構成した後、Spring Boot は JdbcTemplat を構成してコンテナーに配置します。プログラマはそれを自分で注入するだけで使用できます。以下は簡単な CRUD の例です。

        ステップ 1: 新しい Maven プロジェクトを作成し、依存関係を追加する

 

        ステップ 2:データ ソースを構成する-プログラムからアクセスできるようにする 

注: プロジェクトを作成した後、独自のローカル ウェアハウスを設定する必要があります。前回の記事でその設定方法について説明しました。

依存関係のダウンロードが完了するのを待って、次の構成情報を書き込みます。ドライバー、データ ソース アドレス、データ ソース アクセス ユーザー名およびパスワードを含む

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

         ステップ 3:データ ソースを構成する- IDEA にアクセスできるようにする

図に示すように、  右側のデータベース または  データベースをクリックして  、画像メニューをポップアップ表示します。

ドライバーをダウンロードした後、テスト リンクは成功します。「OK」をクリックして確認します

         ステップ 4: データベースとテーブルを追加する

 コードはdata.sql、Schema.sql、user.sqlです。

INSERT INTO `article` VALUES ('1','2101','SpringBoot 核心注解',
                              '核心注解的主要作用','00000008976','2023-01-16 12:11:12','2023-01-16 12:19:19');

INSERT INTO `article` VALUES ('2','356752','JVM 调优',
                              'HotSpot 虚拟机详解','00000000026','2023-06-16 12:15:27','2023-06-16 18:15:30');

INSERT INTO `article` VALUES ('3','454','JVM核心思想',
                              '编程的各种难题','0000000008','2023-08-5 12:15:27','2023-08-5 19:15:30');
DROP DATABASE IF EXISTS `Blog`;
create  database Blog;

Use Blog;

DROP TABLE IF EXISTS `article`;
CREATE TABLE `article`
(
    `id`          int(11)                   NOT NULL AUTO_INCREMENT COMMENT '主键',
    `user_id`     int(11)                   NOT NULL COMMENT '作者 ID',
    `title`       varchar(100)              NOT NULL COMMENT '文章标题',
    `summary`     varchar(200) DEFAULT NULL COMMENT '文章概要',
    `read_count`  int(11) unsigned zerofill NOT NULL COMMENT '阅读读数',
    `create_time` datetime                  NOT NULL COMMENT '创建时间',
    `update_time` datetime                  NOT NULL COMMENT '最后修改时间',
    PRIMARY KEY (`id`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4;
DROP DATABASE IF EXISTS `testdb`;
create  database testdb;

Use testdb;

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
                        `user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户 ID',
                        `user_name` varchar(255) DEFAULT NULL COMMENT '用户名',
                        `status` varchar(255) DEFAULT NULL COMMENT '用户状态',
                        PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

追加後、ユーザーの左上隅にある三角形のボタンをクリックしてライブラリ テーブルを作成します (他の 2 つの SQL ステートメントは単独で実行できますが、この記事では使用しません)。

         ステップ 5: 各レベルのフレームワークを確立し、対応するコードを作成する

データベースとテーブルを構築したら、プロジェクトをより美しく使いやすくするためにさまざまなコードを保存するすべてのレベルのソフトウェア パッケージを作成する必要があります。フレームワークとコードは次のとおりです。

各ファイルのコードは次のとおりです。ファイル名はコメントに記載されているので、コピーして貼り付けるだけです。

//useDao
public interface UserDao {
    int addUser(User user);
    int update(User user);
    int delete(User user);
    int count(User user);
    List<User> getList(User user);
    User getUser(User user);
    void batchAddUser(List<Object[]> batchArgs);


}



//UserDaoimpl 
@Repository
public class UserDaoimpl implements UserDao {
    @Resource
    private JdbcTemplate jdbcTemplate;
    @Resource
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    @Override
    public int addUser(User user) {
        String sql = "INSERT into `user` (`user`.user_name,`user`.`status`) VALUES(?,?);";
        return jdbcTemplate.update(sql, user.getUserName(), user.getStatus());
    }

    @Override
    public int update(User user) {
        String sql = "UPDATE `user` SET status=? WHERE user_name=?;";
        return jdbcTemplate.update(sql, user.getStatus(), user.getUserName());
    }

    @Override
    public int delete(User user) {
        String sql = "DELETE FROM `user` where user_name=?;";
        return jdbcTemplate.update(sql, user.getUserName());
    }

    @Override
    public int count(User user) {
        String sql = "SELECT COUNT(*) FROM `user` where `status`=?;";
        return jdbcTemplate.queryForObject(sql, Integer.class, user.getStatus());
    }

    @Override
    public List<User> getList(User user) {
        String sql = "SELECT * FROM `user` where `status`=?;";
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class), user.getStatus());
    }

    @Override
    public User getUser(User user) {
        String sql = "SELECT * FROM `user` where `user_id`=?;";
        return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), user.getStatus());
    }

    @Override
    public void batchAddUser(List<Object[]> batchArgs) {
        String sql = "INSERT into `user` (`user`.user_name,`user`.`status`) VALUES(?,?);";
        jdbcTemplate.batchUpdate(sql,batchArgs);
    }
}


//User 
@Data
@AllArgsConstructor
@ToString
@NoArgsConstructor
public class User {

        private Integer userId;
        private String userName;
        private String status;
        
}


//UserService 
public interface UserService {
    public int addUser(User user);
    public int updateUser(User user);
    public int deleteUser(User user);
    public int countUser(User user);
    public List<User> getList(User user);
    public User getUser(User user);
    public void batchAddUser(List<Object[]> batchArgs);
}

//UserServiceimp 
@Service("userService")
public class UserServiceimp implements UserService {
    @Resource
    private UserDao userDao;
    @Override
    public int addUser(User user){
        return userDao.addUser(user);
    }

    @Override
    public int updateUser(User user){
        return userDao.update(user);
    }

    @Override
    public int deleteUser(User user) {
        return userDao.delete(user);
    }

    @Override
    public int countUser(User user) {
        return userDao.count(user);
    }

    @Override
    public List<User> getList(User user) {
        return userDao.getList(user);
    }

    @Override
    public User getUser(User user) {
        return userDao.getUser(user);
    }

    @Override
    public void batchAddUser(List<Object[]> batchArgs) {
        userDao.batchAddUser(batchArgs);

    }
}

ステップ 6: 各インターフェイス メソッドをテストする

 test のテスト クラスの下にテスト メソッドを作成し、作成したインターフェイスを順番にテストできます。文ごとにテストする必要があることに注意してください。そうしないと間違いが発生します。テスト コードにコメントを書きました。

@Resource
    private JdbcTemplate jdbcTemplate;
    @Autowired
    UserService userService;
    @Test
    void taa(){
        User user=new User();
        user.setUserName("阿三");
        user.setStatus("在线");
        // 新增用户
        int i = userService.addUser(user);
        System.out.println("新增用户成功");

        // 修改用户
//        User user1 =new User();
//        user1.setUserName("乌鸦哥");
//        user1.setStatus("在线");
//        int u = userService.updateUser(user1);
//        System.out.println("修改用户成功");

        //批量添加
//        List<Object[]> batchArgs = new ArrayList<>();
//        Object[] a1 = {"}
//        Object[] a2 = {"b","在线"};
//        Object[] a3 = {"c","在线"};
//        Object[] a4 = {"d","在线"};
//        batchArgs.add(a1);
//        batchArgs.add(a2);
//        batchArgs.add(a3);
//        batchArgs.add(a4);
//        userService.batchAddUser(batchArgs);
//        System.out.println("批量增加完毕");

          //查询在线用户数量
//        User user2 = new User();
//        user2.setStatus("在线");
//        int a = userService.countUser(user2);
//        System.out.println("在线用户个数为: "+ a);

         //获取用户列表(user2在线)
//        List<User> userList = userService.getList(user2);
//        System.out.println("在线用户列表查询成功");

          //遍历在线列表
//        for (User user3 : userList){
//            System.out.println("用户ID:"+ user3.getUserId() +",用户名:"+
//                    user3.getUserName() + " ,状态:"+ user3.getStatus()
//            );
//        }


    }

要約する

         以上が今日の内容ですが、この記事ではSpring Bootにおけるデータアクセスの基礎知識と、簡単なデータアクセスのためのJDBCの使い方を中心にお話しします。Spring Boot の自動設定と開発の簡素化により、開発効率が大幅に向上しましたので、皆さんにも何か得をしていただければ幸いです。この記事に不適切な点があれば、コメント欄に「いいね!」を押して転送してください〜

 

おすすめ

転載: blog.csdn.net/qq_51294997/article/details/132131453