Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Spring Data JDBC ÈëÃÅÓëʵ¼ù
 
×÷ÕߣºÀí·«
  3614  次浏览      27
 2020-2-13
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁË Spring Data JDBC µÄÓÉÀ´¡¢»ù±¾Ê¹Óá¢ÓëÏÖÓм¼ÊõµÄÒìͬ£¬ÒÔ¼°Êµ¼ùÖеľ­ÑéµÈÏà¹ØÄÚÈÝ£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ô΢ÐŹ«Öںűà×ß±àÏ룬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼­¡¢ÍƼö¡£

Spring Data ¼Ò×å×î½ü¶àÁËÒ»¸öгÉÔ±£ºSpring Data JDBC£¨Ä¿Ç°×îÐÂÕýʽ°æÊÇ 1.0.9£¬ÏîÄ¿Ö÷Ò³ÊÇ https://spring.io/projects/spring-data-jdbc £©¡£ÒòΪ×î½üʹÓÃÁ˴˼¼Êõ£¬ËùÒÔ±ãÏëдÎÄ¶ÔÆä½éÉÜÒ»¶þ¡£

±¾ÎĵÄÄÚÈÝÖ÷񻃾¼° Spring Data JDBC µÄÓÉÀ´¡¢»ù±¾Ê¹Óá¢ÓëÏÖÓм¼ÊõµÄÒìͬ£¬ÒÔ¼°Êµ¼ùÖеľ­Ñé¡£

Spring Data JDBC£¬¹ËÃû˼Ò壬ÊÇÒ»¸ö»ùÓÚ JDBC µÄÊý¾Ý¿â³Ö¾Ã»¯¿ò¼Ü¡£ÕâÒ»ÁìÓò¼¼Êõ²»ÉÙ£¬³£ÓõÄÓÐ Hibernate¡¢MyBatis£¬»¹ÓлùÓÚ Hibernate/JPA µÄ Spring Data JPA£¬²»Ì«³£ÓõÄÓÐ JOOQ¡¢QueryDSL µÈ¡£ÄÇΪºÎ Spring ÒªÁíÆð¯ÔÔì¸öÐÂÂÖ×ÓÄØ£¿ÔڻشðÕâ¸öÎÊÌâ֮ǰ£¬ÏÈÀ´¼òµ¥½éÉÜһϠSpring Data JDBC µÄÓ÷¨¡£

Ò»¡¢»ù±¾Ê¹ÓÃ

ºÍ Spring Data JPA ¼°ÆäËü Spring Data ¼¼ÊõÀàËÆ£¬Spring Data JDBC µÄ»ù±¾Ê¹ÓÃÖ»ÐèÈý²½£º1. Ôö¼Ó Maven/Gradle ÒÀÀµ£»2. ¶¨ÒåʵÌåÀࣻ3. ¶¨Òå Repository ½Ó¿Ú¡£ÒÀÀµÅäÖÃÌø¹ý²»½éÉÜÁË£¬ÎÒÃÇÖ±½ÓÀ´¿´´úÂ벿·Ö¡£

@Table("t_user")
class User {
@Id
private Long id;
private String username;
private String email;
private UserStatus status;

/** Getter/Setter **/
}

interface UserDao extends CrudRepository<User, Long>, UserRepositoryExtension {
@Query("select * from t_user where username = :username")
Optional<User> findByUsername(String username);
}

´óÌåÉÏ¿´£¬Spring Data JDBC µÄÓ÷¨ºÍ Spring Data JPA ÀàËÆ£¬Í¬ÑùÒ²¿ÉÒÔÁãʵÏÖ»ñµÃ»ù±¾µÄÔöɾ¸Ä²é¹¦ÄÜ¡£²¢ÇÒ£¬Í¬ Spring Data JPA Ò»Ñù£¬insert ºÍ update ÕâÁ½¸ö²Ù×÷¶¼ÄÜͨ¹ýͬ CrudRepository#save ·½·¨ÊµÏÖ¡£Ñ¡Ôñ·½·¨ÊÇ¿´ÊµÌåÖÐÖ÷¼üÊÇ·ñÓÐÖµ¡£Èç¹ûûÓÐÖµ£¬ÄǾÍÊÇ insert£¬ÓУ¬ÔòÊÇ update¡£

ºÍ Spring Data JPA ²»Í¬µØ·½ÔÚÓÚ£º

²»ÐèÒª @Entity ×¢½â£¬ @Table¡¢ @Id Ò²ÊÇ Spring Data ÌṩµÄ£¬¶ø²»ÊÇ JPA µÄ£»

Spring Data JDBC ²»Ö§³ÖÖ±½Óͨ¹ý·½·¨Ãû»ñµÃ»ù±¾µÄ²éѯ¹¦ÄÜ£¬¶øÊDZØÐëͨ¹ýÔÚ @Query Öж¨Òå SQL ʵÏÖ£»

Spring Data JDBC Ö§³Ö×Ô¶¨ÒåÀ©Õ¹£¬Õâ¸öÔÚºóÃæ»áÏêϸ½éÉÜ£»

ÎÒ¸öÈ˾õµÃ£¬²»Ïñ Spring Data JPA ºÍ Mongo ÄÇÑù£¬²»Ö§³Öͨ¹ý·½·¨Ãû»ñµÃ»ù±¾²éѯ¹¦ÄÜÊÇ Spring Data JDBC µÄÒ»Ïîȱµã£¬µ«²»ÑÏÖØ¡£±Ï¾¹£¬¶ÔÓÚ¼òµ¥µÄ²éѯ£¬Ô­Éú SQL дÆðÀ´²»Âé·³¡£´ÓÏîÄ¿³¤ÆÚ·¢Õ¹½Ç¶È¿´£¬Õâµã¹¤×÷Á¿Ëã²»ÁËʲô¡£

ÄdzýÈ¥±íÃæÉϵIJîÒ죬Spring Data JDBC ºÍ Spring Data JPA µÄ²»Í¬Ö®´¦ÓÖÓÐÄÄЩ£¿

¶þ¡¢Óë Spring Data JPA µÄ²»Í¬µã

¼òµ¥

Spring Data JPA »ùÓÚ Hibernate£¬¶ø Hibernate ÊÇÒ»¸öÈÃÈËÓÖ°®Óֺ޵ļ¼Êõ¡£Í¬Ô­Éú JDBC Ïà±È£¬Hibernate ¼«´óµØ¼ò»¯ÁË¿ª·¢¹¤×÷Á¿£»µ«ÁíÒ»·½Ã棬ÒòΪ Dirty Check¡¢ÑÓ³Ù¼ÓÔØ¡¢¸÷ÖÖÈç ManyToOne µÈÓ³É乿Ôò£¬ÓÖÈà Hibernate ³ÉΪÁËÒ»¸ö¸´ÔÓ¼¼Êõ¡£¶øÕâЩ¸´ÔÓÐÔ£¬Æ½Ê±ºÜÉÙÖ±½ÓÓõ½£¬µ«ÊÇÈ´Ôö¼ÓÁË Hibernate µÄ¿ª·¢ºÍµ÷ÊÔÄѶȡ£

Spring Data JDBC µÄÒ»¸öÒâÒå¾ÍÔÚÓÚ£¬Èÿª·¢ÈËÔ±ÏíÊÜÀàËÆÓÚ Hibernate Ëù´øÀ´µÄ±ã½ÝµÄͬʱ£¬±ÜÃâ±» Hibernate ¸ß¼¶ÌØÐԵĹý¶È¸´ÔÓËùÀ§ÈÅ¡£

Óë MyBatis ¼¯³É

Hibernate Óë MyBatis ÕýÏñÊÇÓ²±ÒµÄÁ½Ãæ.Óë Hibernate Ïà±È£¬MyBatis ¼òµ¥¡¢Ò×Óᢿɿ¿£¬µ«ÊÇÄÑÃâÏÔµÃÂÞàÂÁËһЩ¡£ÕâÖÖÂÞàÂÔÚ»ù±¾¹¦ÄܲãÃæÏԵøü¼ÓÃ÷ÏÔ¡£ËäÈ»£¬ÔÚ´óÐÍÏîÄ¿ÖУ¬»ù±¾¹¦ÄÜʵÏÖ²ãÃæµÄÂÞಢ²»ÊÇ´óÎÊÌ⣨ÕâÒ²ÊÇ»¥ÁªÍø¹«Ë¾Ï²»¶Óà MyBatis µÄÔ­Òò£©£¬µ«¸ü¼Ó¼òµ¥×ÔÈ»ÊǺÎÀÖ¶ø²»ÎªÄØ¡£

Spring Data JDBC Óë MyBatis ½áºÏ£¬×ÔÈ»ÊÇÄܹ»½áºÏÁ½ÕßÓе㣬»ù±¾¹¦Äܵõ½Á˼ò»¯£¬¸´ÔÓ¹¦ÄÜÒ²ÄÜÐÅÊÖÄéÀ´¡£

Spring Data JDBC Óë MyBatis ÕûºÏÓÐÁ½ÖÖ·½Ê½£º

¹Ù·½µÄÕûºÏ·½·¨ https://docs.spring.io/spring-data/jdbc/docs/1.1.0.RC1/reference/html/#jdbc.mybatis

»ùÓÚ×Ô¶¨Òå Repository ʵÏÖ

Ïà½Ï¶øÑÔ£¬ÎÒ¸üϲ»¶µÚ¶þÖÖ·½·¨£¬ÒòΪ¹Ù·½ÕûºÏ·½·¨Ö»ÊÇÓà MyBatis ʵÏÖÁË»ù±¾¹¦ÄÜ£¬Õâ·´¶øÊÇ MyBatis Ëù²»Éó¤µÄ£¬¶ø»ùÓÚ×Ô¶¨Òå Repository ʵÏֵķ½Ê½¸üÄÜ·¢»ÓÁ½ÕßµÄÓÅÊÆ¡£ÏÂÃæ¿´Ò»Ï¼òµ¥Ê¾Àý£º

Ê×Ïȶ¨ÒåÀ©Õ¹½Ó¿Ú

interface UserRepositoryExtension {
void update(User user);
}

ʵÏÖÉÏÃæµÄ½Ó¿Ú£¬Óà MyBatis ʵÏÖ¾ßÌ幦ÄÜ¡£ÀàÃüÃû±ØÐëΪ½Ó¿ÚÃû + Impl¡£

@Component
class UserRepositoryExtensionImpl implements UserRepositoryExtension {
private final SqlSession sqlSession;

public void update(User user) {
return sqlSession.update("update", user);
}
}

Ô­ÓнӿÚÀ©Õ¹ÉÏÃæµÄ½Ó¿Ú

interface UserDao extends CrudRepository<User, Long>, UserRepositoryExtension {
}

ÕâÑù¾Í¿ÉÒÔÁË£¬ÊDz»ÊǺܼòµ¥¡£

ÁìÓòÇý¶¯Éè¼Æ

ÔÚ Spring Data JDBC ÎĵµÖУ¬ÓÐÒ»½ÚÌáµ½ÁËÁìÓòÇý¶¯Éè¼Æ https://docs.spring.io/spring-data/jdbc/docs/1.1.0.RC1/reference/html/#jdbc.domain-driven-design ¡£ÎĵµÖÐ˵µ½ Spring Data µÄºÜ¶àÉè¼Æ¶¼ÊÇÊÜÁË DDD µÄÆô·¢£º

In the current implementation, entities referenced from an aggregate root are deleted and recreated by Spring Data JDBC.

¾ßÌå Spring Data JDBC ÊÇÈçºÎʵÏÖ DDD µÄ£¿ÔÚ½éÉÜ֮ǰ£¬ÏÈÎÊ´ó¼ÒÒ»¸öÎÊÌ⣬´ó¼Ò¾õµÃÊý¾Ý¿âÿ¸ö±í¶¼ÐèÒªÓÐÒ»¸ö Repository »ò DAO ÀàÓëÖ®¶ÔÓ¦Âð£¿

´ð°¸ÊÇ·ñ¡£°´ÕÕ DDD µÄ˼Ï룬ֻÓÐ Aggregate Root£¨¾ÛºÏ¸ù£©²ÅÊdz־û¯²Ù×÷µÄΨһÈë¿Ú¡£¾Ù¸öÀý×Ó£¬Order£¨¶©µ¥£©ºÍ OrderItem£¨¶©µ¥ÌõÄ¿£©¶¼ÊǶ©µ¥ÓòÖеÄʵÌå¡£µ«ÊÇ£¬ÒòΪ¶©µ¥ÊǾۺϸù£¬ËùÒÔÖ»Óж©µ¥ÓжÔÓ¦µÄ Repository À࣬¶ø¶©µ¥ÌõÄ¿ÔòûÓС£

interface OrderRepository extends CrudRepository<PurchaseOrder, Long> {
@Query("select count(*) from order_item")
int countItems();
}

ÈçÉÏÀýËùʾ£¬¶©µ¥ÀࣨÓÐ PurchaseOrder ±íʾ£©¶ÔÓ¦µÄ Repository °üº¬ÁË¶Ô order_item ±íµÄ²Ù×÷£¬ÒòΪ¶©µ¥ÌõÄ¿²»ÊǾۺϸù£¬Ã»ÓÐ×Ô¼ºµÄ Repository¡£ËùÒÔ£¬¶Ô¶©µ¥ÌõÄ¿µÄ²Ù×÷ÐèÒª¶¨ÒåÔÚ¶©µ¥µÄ Repository ÖС£¿ÖÅÂÒ²ÊÇÕâ¸ö˼ÏëÉϵIJ»Í¬£¬µ¼Ö Spring Data JDBC ºÜ¿ÉÄܲ»»á¾ß±¸Ïñ Spring Data JPA ºÍ Mongo ÄÇÑù´¿ÉùÃ÷ʽµÄ³Ö¾Ã»¯¹¦ÄÜÁË¡£

@Autowired OrderRepository repository;

@Test
public void createUpdateDeleteOrder() {
PurchaseOrder order = new PurchaseOrder();
order.addItem(4, "Captain Future Comet Lego set");
order.addItem(2, "Cute blue angler fish plush toy");

PurchaseOrder saved = repository.save(order);

assertThat(repository.count()).isEqualTo(1);
assertThat(repository.countItems()).isEqualTo(2);

repository.delete(saved);

assertThat(repository.count()).isEqualTo(0);
assertThat(repository.countItems()).isEqualTo(0);
}

¶ø¶ÔÓÚ¶©µ¥µÄ save ºÍ delete ²Ù×÷£¬Ò²»á¶Ô¶©µ¥ÌõÄ¿½øÐвÙ×÷¡£

¶ÔÓÚÆäËü¸ü¶àµÄ¹ØÓÚ Spring Data JDBC ºÍ DDD µÄÄÚÈÝ£¬»¶Ó­´ó¼Ò×Ô¼º¿´ÎÄÕ£¬Ò²»¶Ó­ºÍÎÒÌÖÂÛ¡£

Èý¡¢×î¼Ñʵ¼ù

½ÓÏÂÀ´ÌÖÂÛÒ»ÏÂÎÒÔÚʹÓà Spring Data JDBC ¹ý³ÌÖÐ×ܽáµÄһЩ×î¼Ñʵ¼ù¡£

DAO or Repository

ÎÒ¸üÇãÏòÓÚ½²Ê¹ÓÃÁË Spring Data ¼¼ÊõµÄ½Ó¿ÚÃüÃûΪ DAO£¬¶ø²»ÊÇ Repository¡£°´ÕÕ DDD µÄ˼Ï룬Repository Êǰüº¬ÁËÁìÓò֪ʶµÄ£¬ÐèÒª±£Ö¤¾ÛºÏµÄÊý¾ÝÒ»ÖÂÐÔ¡£¶øÒªÔÚ¸´ÔÓÒµÎñÖÐÂú×ãÕâÒ»µã£¬½ö¿¿À©Õ¹Ò»¸ö½Ó¿ÚÊDz»¿ÉÄÜ×öµ½µÄ¡£Òò´Ë£¬ÔÚ Spring Data ½Ó¿ÚÖ®ÉÏ£¬»¹ÐèÒª×Ô¼ºÊµÏÖÕæÕýµÄ Repository¡£Òò´Ë£¬Repository Õâ¸öÃû×ÖÒª±£ÁôÏÂÀ´¡£

ÈçºÎʹÓà save ·½·¨

CrudRepository ÌṩÁË save ·½·¨£¬ÄÜͬʱʵÏÖ insert ºÍ update Á½ÖÖ¹¦ÄÜ¡£ÎҵĽ¨ÒéÖ»°Ñ save µ±×÷ÊÇ´´½¨Êý¾ÝµÄ¹¤¾ß£¬¾¡Á¿²»ÒªÔÚ¸üÐÂʱʹÓÃËü¡£Ô­ÒòÔÚÓÚÔÚ¸´ÔÓµÄÏîÄ¿ÖУ¬Ê¹Óà save ½øÐÐÊý¾Ý¸üУ¬¼«ÈÝÒ×Ôì³ÉÊý¾Ý±»´íÎ󸲸ǡ£ÒòΪ Spring Data JDBC ͬ JPA ¼¼ÊõÒ»Ñù£¬¶¼»á¸ù¾ÝʵÌåÀàÉú³É¶ÔÈ«²¿×ֶθüÐ嵀 update Óï¾ä£¬²¢ÇÒ Spring Data JDBC ĿǰûÓÐÄÚ½¨µÄÀÖ¹ÛËø»úÖÆ¡£

ºÎʱʹÓà MyBatis

Ç°ÃæÌáµ½ Spring Data JDBC ¿ÉÒÔºÍ MyBatis ½áºÏʹÓá£ÄÇʲôʱºòÒ»¸ö¹¦ÄÜÓ¦¸ÃÓà Spring Data JDBC ʵÏÖ£¬Ê²Ã´Ê±ºòÓ¦¸ÃÓà MyBatis ʵÏÖ¡£ÎÒ¸öÈËÒâ¼ûÊǵ±³Ö¾Ã»¯·½·¨µÄ»ù±¾ÀàÐÍÈë²Î´óÓÚ3¸öʱ£¬Ê¹Óà MyBatis ʵÏÖ£¨²¢½«²ÎÊý³éȡΪ²ÎÊý¶ÔÏ󣩡£ ÒòΪ£¬µ±Èë²Î´óÓÚ3ʱ£¬Òâζ×ŲÎÊýÁбíºÍ SQL Óï¾ä¶¼»á±È½Ï¸´ÔÓ¡£Ê¹Óà Spring Data JDBC£¬Ò»ÊÇĿǰ²»Ö§³Ö²ÎÊý¶ÔÏ󣬶øÊǹý³¤µÄ SQL ÔÚ×¢½âÖж¨Òå²»Ò×ÔĶÁ¡£

ÈçºÎʹÓÃö¾Ù×Ö¶Î

ÎÒ·¢Ïִ󲿷ÖÏîÄ¿µÄÊý¾Ý¿âÉè¼ÆÏ²»¶Ê¹Óà Int ÀàÐͱíʾעÈë״̬¡¢ÀàÐÍÕâÑùµÄö¾Ù×ֶΡ£ËäÈ»ÕâÑù×ö¶ÔÊý¾Ý¿âÐÔÄÜÓкô¦£¬µ«ÊǶԿª·¢ÈËԱд´úÂëµÄÐÔÄÜ¿ÉÊÇ´óÓлµ´¦¡£ÒòΪѡÏîÒ»¶à£¬Ã»Óм¸¸öÈËÄܼǵÃס 1¡¢2¡¢3¡¢4 ¸÷×Ô´ú±íʲôҵÎñº¬Òå¡£¶øÇÒ¸üÓÐÉõÕߣ¬²»Í¬ÏîÄ¿ÖУ¬ÉõÖÁͬһ¸öÏîÄ¿£¬ÒâÒåÀàËÆµÄ×ֶεÄȡֵ¸÷Óв»Í¬¡£Õâ¼òÖ±ÊÇÏîĿά»¤µÄºÚ¶´£¬Bug µÄԴȪ¡£

ËùÒÔ£¬ÔÚ´úÂë²ãÃæ£¬Ò»¶¨ÒªÊ¹ÓÃö¾ÙÀàÐͱíʾÊý¾Ý¿âÖÐµÄ Int Ëù´ú±íµÄö¾ÙÀàÐÍ¡£ËùÒÔ£¬ÔÚ±¾ÎĵĵÚÒ»¸ö´úÂëʾÀýÖУ¬Óû§×´Ì¬ÊÇÓÃÒ»¸öö¾ÙÀà±íʾµÄ

...
UserStatus status;
...

ÔÚ Spring Data JDBC ºÍ MyBatis ÖУ¬¶¼ÓÐÏàÓ¦µÄ»úÖÆ½â¾öö¾ÙºÍ Int ת»»µÄÎÊÌ⣬µ«²¢²»ÊÇ¿ªÏä¼´Ó㬶øÊÇÐèҪдһЩ´úÂë¡£ÒòΪƪ·ùÎÊÌ⣬±¾ÎľͲ»×ö¾ßÌå½éÉÜ£¬ËãÊÇÍÚ¸öС¿Ó£¬Áôµ½ÏÂһƪÎÄÕ½²½â¡£

ËÄ¡¢×ܽá

¸öÈ˹۵㣬Spring ¾ÍÏñÊÇ Java ¿ªÔ´½çµÄ±©Ñ©¡£¡°Spring ³öÆ·£¬±ØÊô¾«Æ·¡£¡± Õâô˵Æäʵ²»ËãºÜ¹ý·Ö¡£

¸öÈ˾õµÃ£¬Ò»·½Ã棬Spring ³öÆ·µÄÏîÄ¿£¬¶¼ÊÇÒ×ÓÃÇÒ¹¦ÄÜÇ¿´óµÄ¡£¸üÖØÒªµÄÊÇ£¬Spring ÏîÄ¿µÄÓ°Ïì¸ü¶àÌåÏÖµÄÉè¼ÆºÍ˼Ïë²ãÃæ£¬×ÜÄÜÒýÁìijÖÖ·ç³±£¬Õâ¿ÖÅÂÊÇ Spring ÏîÄ¿Õâô³¤Ê±¼äÒÔÀ´£¬Ò»Ö±ÉîÊÜ»¶Ó­µÄÔ­Òò¡£

Òò´Ë£¬¶ÔÓë Spring Data JDBC Õâ¸öÏîÄ¿£¬´ó¼ÒÓ¦¸ü¶à¹Ø×¢¡£

 
   
3614 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö