Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JdbcTemplate查询retuns空集-Spring引导,MySQL_Java_Spring_Spring Boot_Jdbctemplate - Fatal编程技术网

Java JdbcTemplate查询retuns空集-Spring引导,MySQL

Java JdbcTemplate查询retuns空集-Spring引导,MySQL,java,spring,spring-boot,jdbctemplate,Java,Spring,Spring Boot,Jdbctemplate,我试图在Spring启动应用程序中使用JdbcTemplate.query获取表中的所有行。我使用MySQL数据库来实现这一点。我编写了一个测试类来插入数据,并通过它的主键查询插入的数据。它很好用。但我编写的用于获取表中所有数据的测试用例返回空结果集,即使表中有一些数据。我可以使用MySQL控制台查询表,同时在表中显示数据。我做错了什么?请帮忙 用户存储库类中的代码 @存储库 公共类用户存储库{ @自动连线 私有JdbcTemplate JdbcTemplate; @事务(只读=真) 公共列表g

我试图在Spring启动应用程序中使用
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)