zoukankan      html  css  js  c++  java
  • 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);

    关键是单元测试中不报错,实际运行的时候报空指针,只指到上面坑这一行,也没有说明具体什么问题! 

    
    
    
  • 相关阅读:
    江の島西浦写真館2-1
    江の島西浦写真館1-2
    Oracle 查询表空间使用情况
    Oracle 的开窗函数 rank,dense_rank,row_number
    oracle11G 用户密码180天修改概要文件过程
    CentOS6 安装 MySQL5.7
    linux下SS 网络命令详解
    CentOS6 网络设置
    redhat 6 红帽6 Linux 网络配置
    Oracle分析函数——函数列表
  • 原文地址:https://www.cnblogs.com/jwentest/p/7172242.html
Copyright © 2011-2022 走看看