spring boot 登錄注冊 demo (二) -- 數據庫訪問


通過data-jpa來訪問數據庫

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

記得加上mysql-connector-java的依賴,不然提示找不到jdbc驅動

 

數據源配置,spring boot的配置文件是:application.properties

spring.datasource.url=jdbc:mysql://localhost/testdemo
spring.datasource.username=guest
spring.datasource.password=guest
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update

根據自己需求配置

 

數據庫的操作非常簡單,JPA會根據解析User類中的參數從而得到方法

package com.jwen.login.dao;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.jwen.login.domain.User;

public interface UserRepository extends JpaRepository<User, Long> {

    public List<User> findByName(String name);
    
    public List<User> findByNameAndPassword(String name,String password);

    @Query("from User u where u.name=:name")
    public List<User> findUser(@Param("name") String name);

}

 

如User中定義了name和password兩個屬性,那么你就可以使用 findByName 和 findByNameAndPassword方法用來從DB中查詢數據,不用寫sql操作,是不是很方便!

定義的UserRepository繼承了JpaRepository,JpaRepository內置了一些查詢方法也可以直接拿來使用

 

剛定義了一些UserRepository方法,下面看看使用,在servcie層中

package com.jwen.login.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jwen.login.dao.UserRepository;
import com.jwen.login.domain.User;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public boolean verifyUser(User user) {

        if (userRepository.findByNameAndPassword(user.getName(), user.getPassword()).isEmpty()) {
            return false;
        } else {
            return true;
        }

    }

    public String registerUser(User user) {

        if (userRepository.findByName(user.getName()).isEmpty()) {
            userRepository.save(user);
            return "用戶名  " + user.getName() + " 注冊成功";

        } else {

            return "用戶名 " + user.getName() + "已被占用!";
        }

    }
}

通過

@Autowired 

private UserRepository userRepository;

自動裝配了一個UserRepository實例,自帶增刪改查功能,save,delete,save,查就是剛剛的find操作

 

這里有個小坑,坑了我好一會兒

findByName返回的應該是一個list,但之前我寫的返回的是一個類User,

坑:  public User findByName(String name);

正確: public List<User> findByName(String name);

關鍵是單元測試中不報錯,實際運行的時候報空指針,只指到上面坑這一行,也沒有說明具體什么問題! 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM