春ブーツJPAは、データベースにアクセスするには

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/weixin_45614509/article/details/101051420

簡単な紹介

JPAは、Hibernateとの違いで春データJPAの外観を使用する前に、春データJPA 3

JPA(Javaの永続性API)はJPA自体が、それは本質的にJavaオブジェクトの永続データのORM(オブジェクトリレーショナルマッピング)仕様で指定され、データベース内の管理テーブルを読み出します。

Hibernateは JPA仕様の実装を追跡するために属しているが、JPA仕様は従うことにHibernateの一つであり、その他の仕様は実装を休止状態があります。関係インターフェースと実装クラスに似ています

春データJPAが実現リポジトリJPA仕様に基づいて層を提供するために、再カプセル化は、ORMの実装としてHibernateをJPAのデフォルトの使用に見ることができます

春データJPAの使用について学ぶために基本的な状況を学習した後

統合されました

私は春のブーツは、ポンポンファイルに追加された環境を使用しました

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

それとも、春のブートSQL→JPAプロジェクトを作成するときに確認してください

使用

レディ

データベース接続の構成

#通用数据源配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=FALSE&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
# JPA 相关配置
# 自动建表时切换默认存储引擎 当前切换为InnoDB
#spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#配置在日志中打印出执行的 SQL 语句信息
spring.jpa.show-sql=true
# 每次运行项目删除重建表
#spring.jpa.hibernate.ddl-auto=create
# hibernate懒加载相关,配置之后单元测试读取数据时不会报错
spring.jpa.open-in-view=true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

クラスを作成します

@Data                //lombok
@Entity              //必选注解
@Table(name = "user")//可选注解 如果不写name那么表明和类名一致
public class User {

    @Id                 //声明实体唯一标识的属性
    @GeneratedValue(strategy = GenerationType.IDENTITY) //sql自动生成主键
    private Long id;
    @Column(length = 50)//声明是一个字段, length声明字段长度
    private String name;
    @Column(length = 50)
    private String account;
    @Column(length = 50)
    private String password;

}
//JpaRepository是Repository的子接口 两个泛型分别为表的实体和主键
@Repository
public interface UserDao extends JpaRepository<User, Long> {

}

私たちは、限り、あなたは作成UserDao後のデータベースにアクセスできるようエンティティクラスを作成したとき、最初の時間は、私は非常に使いやすい感じ

開始

ここでは、単純なCRUDの使用であります

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UserTest {

    @Autowired
    private UserDao userDao;

    /**
     * 新增
     */
    @Test
    public void addUser() {
        User user = new User();
        user.setName("王二");
        user.setAccount("123");
        user.setPassword("1234256");
        userDao.save(user);
    }

    /**
     * 删除
     */
    @Test
    public void delete() {
        userDao.deleteById(3L);
    }

    /**
     * 修改
     * 修改使用的也是save,jpa判断是新增还是更新的方式主要是判断主键
     * 如果主键被赋值就会去数据库中查询是否有这条数据,如果存在就是更新,不存在就是创建
     * 更新时是全部字段的更新,如果有字段没有设置将会被赋值为null
     */
    @Test
    public void update() {
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        user.setPassword("1221");
        userDao.save(user);
    }

    /**
     * 查询
     */
    @Test
    public void select() {
        User firstUser = userDao.getOne(1L);
        System.out.println(firstUser);
            
        Optional<User> s = userDao.findById(1L);
        s.ifPresent(System.out::println);


        User user = new User();
        user.setAccount("123"); //相当于查询 account 为123 的所有数据
        Example<User> userExample = Example.of(user);
        userDao.findAll(userExample);

        //排序按照id 倒序排序
        List<User> list = userDao.findAll(new Sort(Sort.Direction.DESC, "id"));
        for (User u : list) {
            System.out.println(u);
        }
    }

}

これらのシステムは、実際には、我々はまた、UserDaoのメソッドで定義されたルールに従うことができますされている上記の方法を提供します

@Repository
public interface UserDao extends JpaRepository<User, Long> {

    List<User> findByAccountEquals(String account);

}

我々はルールに従うようなJPAが実装されます
画像

アイデアエディタは、適切な方法を求めるメッセージが表示されます

カスタムSQLステートメント

    /**
     * nativeQuery默认是false,nativeQuery为false是使用不知道是JPQL还是HQL (+﹏+)~晕
     * nativeQuery为true时是使用原生的sql语句,根据数据库的不同,sql语句可能有所区别
     */
    @Query(nativeQuery = true, value = "select  * from user where id in  :idList")
    List<User> findIdIn(@Param("idList") List<Long> idList);

    /**
     * 如果是删除或者是更新操作需要加上@Modifying注解以通知这是一个delete或update操作
     */
    @Modifying
    @Query(nativeQuery = true, value = "delete   from user where id =:id")
    void deleteById(@Param("id") Long id);

    /**
     * 执行insert 需要加上@Transactional和@Modifying两个注解
     */
    @Transactional
    @Modifying
    @Query(nativeQuery = true, value = "insert into jpa.user (name) values (:name)")
    void insert(@Param("name") String name);

おすすめ

転載: blog.csdn.net/weixin_45614509/article/details/101051420