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);
关键是单元测试中不报错,实际运行的时候报空指针,只指到上面坑这一行,也没有说明具体什么问题!
spring boot 登录注册 demo (二) -- 数据库访问的更多相关文章
- spring boot 登录注册 demo (四) -- 体验小结
之前没有折腾过Spring,直接上来怼Spring Boot异常痛苦,参考着官网的guide(https://spring.io/guides)写了几个demo: spring boot 跑起来确是方 ...
- spring boot 登录注册 demo (一)
Welcome to Spring Boot 代码结构 src/main/java 下 controller层,路由功能dao层,数据库的访问domain,bean的存放service,业务层appl ...
- spring boot 登录注册 demo (三) -- 前后端传递
前端页面通过thymeleaf渲染 <dependency> <groupId>org.springframework.boot</groupId> <art ...
- Spring Boot入门(六):使用MyBatis访问MySql数据库(注解方式)
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 本篇博客我们讲解下在Spring Boot中使用MyBatis访问MySql数据库的简单用法. 1.前期 ...
- Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- 最近做的一个Spring Boot小项目,欢迎大家访问 http://39.97.115.152/
最近做的一个Spring Boot小项目,欢迎大家访问 http://39.97.115.152/,帮忙找找bug,网站里有源码地址 网站说明 甲壳虫社区(Beetle Community) 一个开源 ...
- Spring boot中注册Servlet
Spring boot中注册Servlet 如何在spring boot项目中注册Servlet呢? 如何在spring boot项目中注册Servlet呢? 由于没有web.xml,无法直接在xml ...
- Spring Mvc和Mybatis的多数据库访问配置过程
Spring Mvc 加Mybatis的多数据库访问源配置访问过程如下: 在applicationContext.xml进行配置 <?xml version="1.0" en ...
- Spring Boot Web Executable Demo
Spring Boot Web Executable Demo */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.sr ...
随机推荐
- Oracle数据迁移-系统数据合并笔记
创建临时表:execute immediate 'sql'; 通过临时表和关联查询解决循环处理效率低下,大数据操作移植时时间太长的问题. 结构相同的系统数据库表移植,案例如下: create or r ...
- jsp: c:foreach 输出序号
关键在于<c:forEach>的varStatus属性,具体代码如下: <table width="500" border="0" cells ...
- FineReport单元格扩展与父子格设置
1.描述 在讲述报表设计之前,首先介绍一下FineReport报表制作的几个基本概念,本章节介绍FineReport报表赖以生存的单元格扩展. 扩展,顾名思义,就是由一变多,那么单元格扩展就是指在we ...
- Android - FEATURE_NO_TITLE
Android设置无标题的方法 在onCreate()中写入: requestWindowFeature(Window.FEATURE_NO_TITLE); 例如: protected void on ...
- TCP/IP协议之ping和traceroute
Ping程序就是调用的就是ICMP报文.利用的是ICMP的应答和回显请求.来看下具体的ping报文. Request的报文类型为8 Reply的类型为0 通过具体的ping报文可以看到ping报文的大 ...
- 【JAVASCRIPT】React学习-组件生命周期
摘要 整理组件加载过程,详细见官方文档:https://facebook.github.io/react/docs/react-component.html mount 过程 1)constructo ...
- 安装完ubuntu16.4.0之后要做的一些优化
1.删除libreoffice libreoffice虽然是开源的,但是Java写出来的office执行效率实在不敢恭维,装完系统后果断删掉 sudo apt-get remove libreoffi ...
- 几种常见排序算法原理&C语言实现
一.冒泡排序(以下各法均以从小到大排序为例,定义len为数组array的长度) 原理:比较相邻元素的大小,对于每次循环,按排序的规则把最值移向数组的一端,同时循环次数依次减少. C代码实现 写法一: ...
- [COGS 0011] 运输问题1
11. 运输问题1 ★★☆ 输入文件:maxflowa.in 输出文件:maxflowa.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 一个工厂每天生 ...
- UnityShader之遮挡透明
好久没写博客了,最近在学shader,不得不说,shader真的非常美妙,我沉迷其中无法自拔= = 之前做过一个遮挡透明的功能,当物体遮挡住主角时,该物体会变成半透明显示出主角.这次同样是遮挡透明的功 ...