通过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);
关键是单元测试中不报错,实际运行的时候报空指针,只指到上面坑这一行,也没有说明具体什么问题!
虽千万人,吾往矣!