JDBC AO春のデータを読む( Oh : POSS SLS VEL REDUZIR C DEC DIGOか?)


H . An Tempos que venho querendo escrever este postMais Applamente , Desde Quando Comentei sobre o tema deste artigo numa
Bem、finalmente sau:D
いいえVは、deo、cio que o春のデータを意味します.
Isoso MeフェズLembrar como criは、vamos nossosですDAOs いいえパス.Eアコque valeは、ペナFalar umです.ディヴァルタムSE !;

王王、時代O JDBC


Javaデータベースの接続性foo o primeiro mecanismo que conheci para conectar com um Banco de Dados e enviar Instruinsert , select , など).
マリスは、Isoをします、UMA API que NOS permiteコンコールコム・スカーカーBancoデDados、Bastando que tenhamos apenas oドライバーは、Banco EM M Are Oをします.
デモナスVantagensElaas , O Fato de Podermos usarとしてのメソクラス/インターフェースパラシュートをとってください.
Bem , Isoso N - Vo o nosso c - di dio era simples , muito menos de f la cil manuten laplement o o , como podemos ver na na classe abaixoオペラとしてのEa Representa um dao de usuは、rios、com todasとして、オペラです.
@Repository
public class RepositorioUsuariosJdbc implements RepositorioUsuarios {

    @Value("${spring.datasource.url}")
    private String url;

    @Value("${spring.datasource.username}")
    private String usuario;

    @Value("${spring.datasource.password}")
    private String senha;

    private Connection conexao;

    @PostConstruct
    void posConstrutor(){
        try {
            conexao = DriverManager.getConnection(url, usuario, senha);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void save(Usuario umUsuario) {
        if(!existe(umUsuario)) salvar(umUsuario);
        else atualizar(umUsuario);
    }

    private boolean existe(Usuario umUsuario) {
        return umUsuario.getId() != null;
    }

    private void atualizar(Usuario usuario) {
        try(var statement = conexao.prepareStatement("update usuarios set nome = ? where id = ?")){
            statement.setString(1, usuario.getNome());
            statement.setLong(2, usuario.getId());
            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void deleteById(Long id) {
        try(var statement = conexao.prepareStatement("delete from usuarios where id = ?")){
            statement.setLong(1, id);
            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public List<Usuario> findAll() {
        var usuarios = new ArrayList<Usuario>();
        try(var statement = conexao.prepareStatement("select * from usuarios");
        var resultset = statement.executeQuery()){
            while(resultset.next()){
                var id = resultset.getLong("id");
                var nome = resultset.getString("nome");
                var dataNascimento = resultset.getObject("data_nascimento", LocalDate.class);
                var usuario = new Usuario(nome, dataNascimento);
                usuario.setId(id);
                usuarios.add(usuario);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return usuarios;
    }

    @Override
    public void close() {
        try {
            conexao.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private boolean idEhNulo(Usuario umUsuario) {
        return umUsuario.getId() == null;
    }

    private void salvar(Usuario usuario){
        var sql = "insert into usuarios (nome, data_nascimento) values (?, ?)";
        try(var statement = conexao.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)){
            statement.setString(1, usuario.getNome());
            statement.setObject(2, usuario.getDataNascimento());
            statement.executeUpdate();

            try(var ids = statement.getGeneratedKeys()){
                ids.next();
                usuario.setId(ids.getLong(1));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
EscreviエステCは、dio - num pequeno projeto、クリアードapenasは、エステArtigoです.エレポールゼaqui . E、パラプロヴァールqueエッセcは、digo(e os demais que veremos a seguir)Funciona、hは、自動titito .
アウトローオブザーバ
  • <武井>
  • ポア・クァード・ホモ・オークの『カダード・ホー』についてtry-with-resources . ent o o、podeターcertezaデque o dao acima poderia ser muito maor.
  • Penocupm n o a Preocupa Method - de - Controlar a Conex Suru O Como O Banco de Dados ( Haje , Uusos )connection pools Exce - Mesory . esとしてのnem de capturar corretamente .
    sobre o dao acima ...ビエ,アコque n n o .t ' n nhamos que nos preocupar com o objeto de conex no o o o o banco , mas mais que isso : haviam tamb are m os objetosResultSetPreparedStatement (ou Statement , quando est est vamosはusar o jdbcに追加します.エーモス・オスの問題点Statement , エーモス・パラオPreparedStatement ). オズジェートスエラムCriados、E Tinham que ser Fechados quando nは、o eramマリスUSADOSです.
    Tamb - m m a a a a a u u d u d o d o de a query era trabalhosa、e altamente propensa a erros.o que tade acontecer quando adicionamos um parは、メトロa maisなしですinsert cはdigo acima、porの例示を行うか.
    Isso SEM Contacarは、繰り返します.
    Mas Eent Astro o o Veio o Hibernate , E Nossa vida Melhorou ( Bastante , eu Diria )

    Tabelas e objetos s exo O(Quase)a a a a a a a a a a ma ma a Isa


    ディゼムque o o gavinキングは、馬鹿Pessoa muito parecida com o Linus Torwaldsエムtermosデsimpatia eカリスマです.
    se issoは、verdade、nを得ます.Ma Posso Afirmar SEM Medo de Ererer que El Fai O Criador de uma das Ferramentas mais重要な点はMundo JavaをするEla foi criada em 2001 E hoe Ejamos ELA(ImplementAmtribution o o de National CIA NCIAは、春のデータUSA Hibernate Por Baixo Dos Panos)をします.
    El ententu que , de certa forma , pod podエーモスfafaum um pareltos de objetos e registers em tabelas , com o conjunto de atributos de um objeto sendo compare to a uma linha de uma tabelaPode - ser - que - seja algo - meio - de bvio hoje em dia , mas n ' no o o sese se 2001 isso era t o o o claro assim ( algunde de n ' s s nem eram nascidos em 2001 : d )
    Hibernate , Nisso C . digo ficaについて
    @Repository
    public class RepositorioUsuariosHibernate implements RepositorioUsuarios {
    
        @PersistenceContext
        private EntityManager em;
    
        private Session sessao;
    
        @PostConstruct
        void posConstrutor(){
            sessao = em.unwrap(Session.class);
        }
    
        @Override
        public void save(Usuario umUsuario) {
            sessao.save(umUsuario);
        }
    
        @Override
        public void deleteById(Long id) {
            var usuario = sessao
                    .createQuery("from Usuario where id = %d".formatted(id))
                    .uniqueResult();
            sessao.delete(usuario);
        }
    
        @Override
        public List<Usuario> findAll() {
            return sessao.createQuery("from Usuario").getResultList();
        }
    
        @Override
        public void close() {
            sessao.close();
        }
    }
    
    n o o o temo mais o objetoConnection ネムmesmo os objetosPreparedStatement 王央ResultSet , マス・クリスマスSession . エラ時代comoFaçade パラOバンコ.タダVez que Preisは、vamos fazer algoネール、時代sSession .
    OBS :パラSession , ウセイEntityManager キューVEIO COM O JPA .ファラレソブレレエレマリスタルデ.
    パラオモスSession Hibernate、時代Necessは、rio umポーco maisデc dio digoをします.コモo Hibernateインベンザo JDBC、Tambのmプレイサバda URLデConexは、o、Usuは、リオ、Senha e o Dialeto Banco que se USariaのSisemaをします.エステSession Configura Sexeo - Oプログラムを通してのPodia ser obtidahibernate.cfg.xml ). マナ・ボアを参照してくださいaqui .
    ISSO Resolveu Boa Parte Das Nossos問題アントルータン、O Hibernate時代馬鹿soluは、oを使います.<研究ノート>『ボウス・クオ・オウトロプス』における「啓蒙論」の試みEclipseLink ).
    ペーエッセE outrasrazões フォリ・クリダAエッセンシャルA .

    Orefica - de de diversus ferramentas de orm : Java Persistence API


    CIAのAは、O JA、Ferramentas como o Eclipselink e o Hibernate Passaramを比較します.
    Na . classe que se pretendia persifloraの挿入についてabaixo、クラスUsuario <研究ノート>
    @Entity
    @Table(name = "usuarios")
    @DynamicUpdate
    @NoArgsConstructor(access = AccessLevel.PRIVATE)
    @EqualsAndHashCode(of = {"nome", "dataNascimento"})
    @Getter
    public class Usuario {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Setter
        private Long id;
    
        private String nome;
    
        private LocalDate dataNascimento;
    
        public Usuario(String nome, LocalDate dataNascimento) {
            this.nome = nome;
            this.dataNascimento = dataNascimento;
        }
    
        public void atualizarNome(String novoNome) {
            this.nome = novoNome;
        }
    }
    
    OBS :エサ・クラッセエストは、sendo usada em todos os daos deste artigoです.ロゴ、ポッドヘーバーCディアーdigo necessは、rio para um dao e deswessについてリオのOUTRO(porの例示、os getters e setters s
    Abaixo , Podemos ver o o mo moo dao ,作成者usando o hibernate segundo a a a a a a a a a a a a a a a exo o jpa :
    @Repository
    class RepositorioUsuariosJpa implements RepositorioUsuarios {
    
        @PersistenceContext
        private EntityManager em;
    
        @Override
        public void save(Usuario umUsuario){
            em.persist(umUsuario);
            em.flush();
        }
    
        @Override
        public void deleteById(Long id){
            Usuario usuario = em.find(Usuario.class, id);
            em.remove(usuario);
        }
    
        @Override
        public List<Usuario> findAll(){
            return em.createQuery("from Usuario").getResultList();
        }
    
        @Override
        public void close() {
            em.close();
        }
    }
    
    アオウラ・ウズマス・エッセス・デ・デ・デ・デ・フエフについてEntityManager ノールガーSession . デFato、Olhando somente o cは、digo、PUCAコサMudouです.
    O EntityManager NOS Ajudou AライダのCOM Aは、nnciaデforma padronizada、pois veio com a especifica傷のo jpaを主張します.パラ・マリス・デルーフaqui .
    デQualker forma、アイダtは、nhamos que lidar com馬鹿Certa QuantidadeデCデdido繰り返しです.<研究ノート>ペイ・エック・オース・デイオス・プロイナヴァーヴ・フォー・フォーア・インジェータナオEntityManager , E - Manpuulは-ローem todos OSのdaos.
    isso nはo o oの時代um壮大な問題点(pra quem jを与えます.Maは、Veio o Pessoal da VMware dizer pra gente que dava pra fazer melhor aindaです.E、Normalmente、ELES ESTは、certosです.

    Estado da Arte -スプリングデータ


    春のデータ( MAIS特別号)Spring Data JPA , <論文>エボラ・トドス・ダ・ファム・ラ・リゲ・セゲエムのメソ王妃・ピオス)アルゼンチンダオパラエレFuncionar.
    Veja como fica nosso dao com a利用可能な部分を表示します.
    @Repository
    public interface RepositorioUsuariosSpringDataJpa extends JpaRepository<Usuario, Long> {
    }
    
    アペナス・オーマ・インターフェースframework シュプリントテ.ナダ・マリス!
    OK、TEM TambはMとしてMUsuario , MAS vocは、ententuを使います.
    パラキムエストは、安東アゴラcom Programama Solaris . o Java、SE N n o oペガーNenhum Sistema Legadoパラシュートで降下する人Dar Manontenを得ます.Talvez nは、veja o que ela trazデbom e suas vantagensを占拠します.エントは、o、se um diaのvocをemergeします.フォア・ベーム・ピアー
    Pedal ter certeza que resumi bastante toda a Hist de Riahは、muitos outros detalhes que valeriamペナシタールです.Ma ProcureiフォーサーのCは、digo、e o Quanto Elフォイreduzindo com o o o o o o o o o o o o o o o o d o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o
    Perceberam O - Quanto - EvoluはMos - Na Escrita de nossos Daos?ATUALMENTTE , Quase Nを用いた前処理E Dos Jは、クラスqueとしてフォーラムC .
    閉じるこの動画はお気に入りから削除されています.Premiaremos Um mais escrever Essa Interface ?Anotaとしてのesなしc c dio bastarは?
    E vocは?アイダ・アカの『詩歌』についての一考察
    アブラは、o!