Java JdbcTemplate查询retuns空集-Spring引导,MySQL
我试图在Spring启动应用程序中使用Java JdbcTemplate查询retuns空集-Spring引导,MySQL,java,spring,spring-boot,jdbctemplate,Java,Spring,Spring Boot,Jdbctemplate,我试图在Spring启动应用程序中使用JdbcTemplate.query获取表中的所有行。我使用MySQL数据库来实现这一点。我编写了一个测试类来插入数据,并通过它的主键查询插入的数据。它很好用。但我编写的用于获取表中所有数据的测试用例返回空结果集,即使表中有一些数据。我可以使用MySQL控制台查询表,同时在表中显示数据。我做错了什么?请帮忙 用户存储库类中的代码 @存储库 公共类用户存储库{ @自动连线 私有JdbcTemplate JdbcTemplate; @事务(只读=真) 公共列表g
JdbcTemplate.query
获取表中的所有行。我使用MySQL数据库来实现这一点。我编写了一个测试类来插入数据,并通过它的主键查询插入的数据。它很好用。但我编写的用于获取表中所有数据的测试用例返回空结果集,即使表中有一些数据。我可以使用MySQL控制台查询表,同时在表中显示数据。我做错了什么?请帮忙
用户存储库类中的代码
@存储库
公共类用户存储库{
@自动连线
私有JdbcTemplate JdbcTemplate;
@事务(只读=真)
公共列表getAllUsers(){
返回jdbcTemplate.query(“SELECT*fromdb_用户”,newuserrowmapper());
}
@事务(只读=真)
公共用户getUserByUsername(字符串用户名){
返回jdbcTemplate.queryForObject(“SELECT*FROM db_users,其中username=?”,新对象[]{username},
新的UserRowMapper());
}
公共用户addNewUser(最终用户){
final String query=“插入db_用户(用户名、电子邮件、名字、姓氏、密码)值(?、、?、?、?)”;
更新(新的PreparedStatementCreator(){
@凌驾
公共PreparedStatement createPreparedStatement(连接)引发SQLException{
PreparedStatement PreparedStatement=connection.prepareStatement(查询);
preparedStatement.setString(1,user.getUsername());
preparedStatement.setString(2,user.getEmail());
setString(3,user.getFirstName());
preparedStatement.setString(4,user.getLastName());
preparedStatement.setString(5,user.getPassword());
返回已准备好的报表;
}
});
返回用户;
}
}
UserRowMapper类
类UserRowMapper实现了RowMapper{
@凌驾
公共用户mapRow(ResultSet ResultSet,int rowNum)抛出SQLException{
User User=新用户(resultSet.getString(“用户名”)、resultSet.getString(“电子邮件”),
resultSet.getString(“名字”)、resultSet.getString(“姓氏”)、resultSet.getString(“密码”);
返回用户;
}
}
测试用例中的代码
@RunWith(SpringRunner.class)
@春靴测试
公共类UserRepositoryTests{
@自动连线
私有用户存储库用户存储库;
@试验
public void createUserTest(){
用户用户=新用户(“testuser”test@email.com“,”姓氏“,”姓氏“,”密码“;
User savedUser=userRepository.addNewUser(User);
}
@试验
public void findUserByUsernameTest(){
User=userRepository.getUserByUsername(“testuser”);
assertNotNull(用户);
}
@试验
公共无效getAllUsersTest(){
List users=userRepository.getAllUsers();
assertNotNull(用户);
assertTrue(!users.isEmpty());
}
我得到的是
getAllUsersTest(com.sol16.core.UserTests.UserRepositoryTest)所用时间:0.026秒根据堆栈跟踪,第二次断言失败。因此用户列表为空。我的问题是,表中有数据。但列表显示为空。此列表为空的原因是什么?没有任何数据…或者至少对应用程序不可见(您是否提交了其他事务,是否正在查看正确的数据库?)。我假设您使用的不是真实的数据库,而是内存中的数据库。您能检查一下吗?为什么要将Hibernate与low lewel JDBC混合使用,尤其是更新?似乎是错误的想法…根据堆栈跟踪,第二个断言失败。因此用户列表是空的。我的问题是,表中有数据。但列表中显示至少它是空的。此列表为空的原因是什么?没有任何数据…或者至少对应用程序不可见(您是否提交了其他事务,是否正在查看正确的数据库?)。我假设您使用的不是真正的数据库,而是内存中的数据库。您能检查一下吗?为什么要将Hibernate与low lewel JDBC混合使用,尤其是在更新时?似乎是错误的想法。。。
@Repository
public class UserRepository {
@Autowired
private JdbcTemplate jdbcTemplate;
@Transactional(readOnly = true)
public List<User> getAllUsers() {
return jdbcTemplate.query("SELECT * FROM db_users", new UserRowMapper());
}
@Transactional(readOnly = true)
public User getUserByUsername(String username) {
return jdbcTemplate.queryForObject("SELECT * FROM db_users WHERE username=?", new Object[]{username},
new UserRowMapper());
}
public User addNewUser(final User user) {
final String query = "INSERT INTO db_users(username,email,first_name,Last_name,password) values(?,?,?,?,?)";
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, user.getUsername());
preparedStatement.setString(2, user.getEmail());
preparedStatement.setString(3, user.getFirstName());
preparedStatement.setString(4, user.getLastName());
preparedStatement.setString(5, user.getPassword());
return preparedStatement;
}
});
return user;
}
}
class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet resultSet, int rowNum) throws SQLException {
User user = new User(resultSet.getString("username"), resultSet.getString("email"),
resultSet.getString("first_name"), resultSet.getString("last_name"), resultSet.getString("password"));
return user;
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTests {
@Autowired
private UserRepository userRepository;
@Test
public void createUserTest() {
User user = new User("testuser", "test@email.com", "Firstname", "Lastname", "password");
User savedUser = userRepository.addNewUser(user);
}
@Test
public void findUserByUsernameTest() {
User user = userRepository.getUserByUsername("testuser");
assertNotNull(user);
}
@Test
public void getAllUsersTest() {
List<User> users = userRepository.getAllUsers();
assertNotNull(users);
assertTrue(!users.isEmpty());
}
getAllUsersTest(com.sol16.core.UserTests.UserRepositoryTest) Time elapsed: 0.026 sec <<< FAILURE!
junit.framework.AssertionFailedError: null
at junit.framework.Assert.fail(Assert.java:55)
at junit.framework.Assert.assertTrue(Assert.java:22)
at junit.framework.Assert.assertTrue(Assert.java:31)
at junit.framework.TestCase.assertTrue(TestCase.java:201)
at com.sol16.core.UserTests.UserRepositoryTest.getAllUsersTest(UserRepositoryTest.java:52)