Skip to main content

JPA Data Access Overview

Sproogy's JPA module brings Spring Data JPA's powerful repository pattern to your socket applications with full dependency injection support.

Why Use Sproogy JPA?

Traditional JDBC requires extensive boilerplate. With Sproogy JPA:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByUsername(String username);
}

That's it! No manual SQL, no result set mapping, no connection management.

Quick Start

1. Add Dependencies

dependencies {
implementation 'com.sproogy:jpa:1.0.0'
implementation 'org.hibernate:hibernate-core:5.6.15.Final'
implementation 'mysql:mysql-connector-java:8.0.33'
}

2. Configuration

.env:

DB_URL=jdbc:mysql://localhost:3306/sproogy_db
DB_USER=root
DB_PASSWORD=secret

application.yml:

data:
jdbc:
driver: "com.mysql.cj.jdbc.Driver"
hibernate:
dialect: "org.hibernate.dialect.MySQL8Dialect"
hbm2ddl.auto: "update"
show_sql: "true"

3. Create Entity

@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false, unique = true)
private String username;

private String email;
// getters/setters...
}

4. Create Repository

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByUsername(String username);
List<User> findByEmailContaining(String emailPart);
}

5. Use in Service

@Service
public class UserService {
@Autowired
private UserRepository userRepository;

@Transactional
public User createUser(String username, String email) {
User user = new User();
user.setUsername(username);
user.setEmail(email);
return userRepository.save(user);
}
}

Built-In Methods

All repositories get these methods:

  • save(T entity) - Insert or update
  • findById(ID id) - Find by primary key
  • findAll() - Get all
  • deleteById(ID id) - Delete by ID
  • count() - Count total

Method Name Queries

Generate queries from method names:

findByUsername(String username)
findByAgeGreaterThan(int age)
findByUsernameAndActive(String username, boolean active)
findByEmailContaining(String part)
findAllByOrderByCreatedAtDesc()

Next Steps

👉 Repositories 👉 Custom Queries 👉 Transactions