spring boot 登陸註冊 demo (二) -- 數據庫訪問

經過data-jpa來訪問數據庫java

     <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驅動mysql

 

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

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

根據本身需求配置sql

 

數據庫的操做很是簡單,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操做,是否是很方便!app

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

 

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

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);

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

相關文章
相關標籤/搜索