Resumen de errores de uso de jdbcTemplate (1)

Cuando aprendí JDBC recientemente, usé Spring-Jdbc. Encontré muchos problemas. Resuma a continuación.

1. Convierta proyectos Java ordinarios en proyectos Maven

práctica

1. Haga clic con el botón derecho en el proyecto JDBC-learning, haga clic en Agregar compatibilidad con el marco y, a
Inserte la descripción de la imagen aquí
continuación, seleccione Maven.

2. ¡Importante, primero cambie la fuente!

Si está creando un proyecto de Maven por primera vez, se descargarán los componentes de configuración de Maven relacionados. Sin embargo, la fuente de descarga predeterminada es extranjera, que se descargará muy lentamente. Cerremos IDEA primero. ¡Lo que tienes que hacer es cambiar la fuente!
Busque settings.xml en el directorio donde está instalado IDEA, este es el archivo de configuración de Maven. Copie el contenido de la imagen a continuación

<mirror>  
		<id>alimaven</id>  
	    <mirrorOf>central</mirrorOf>  
	    <name>aliyun maven</name>  
	    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>  
	</mirror> 

Inserte la descripción de la imagen aquí
Luego, para que el seguro entre en vigencia, también puede copiarlo en el archivo pom.xml ( paso no esencial ).

3. En este momento, reinicie IDEA y actualice Maven (descargará la configuración del componente relacionado por sí mismo) y la
descarga será mucho más rápida.
4. Importe los paquetes relacionados que faltan: busque
el paquete que falta , luego copie el contenido en pom.xml y Maven lo descargará e importará automáticamente.
Repositorio de Maven

Desventajas
La ruta del archivo del paquete original cambiará, debe cambiar uno por uno. problema. Quizás no he explorado cómo modificarlo rápidamente.

2. La inicialización falló. org.springframework.beans.factory.InitializingBean, lo que provoca que no se inicialice jdbcTemplate y no se registre DataSource

Motivo: falta de paquete de judías verdes. Enlace: Maven Repository
Inserte la descripción de la imagen aquí
lo copiará a pom.xml en el proyecto Maven.
Inserte la descripción de la imagen aquí
Luego aparecerán los cambios de importación, y también puede optar por importarlos automáticamente.
Inserte la descripción de la imagen aquí

3. El método de escritura original no se puede ejecutar debido a la versión alta del paquete de rack relacionado con el resorte.

Y luego siga informando errores en el código de consulta:

  public User findUser(String userName) {
    
    //查询
        String sql = "select * from bank where name=?";
        Object[] args = new Object[]{
    
    userName};
        //我们原本的实现是创建一个结果集处理接口,实现处理方法。JdbcTemplate类似,只不过是利用了结果集参数反射获取属性值。
        /*if(jdbc.queryForObject(sql, args, new BeanPropertyRowMapper<>(User.class))==null){
            System.out.println("/");
        }*/
       User user = (User) jdbc.queryForObject(sql, args,new BeanPropertyRowMapper<User>(User.class));
       if(user!=null)
           return user;
       else throw new NullPointerException("空异常!");
    }

La versión utilizada al principio es (la versión superior):Inserte la descripción de la imagen aquí

Hay dos tipos principales de contenido de error: El
primer tipo: la versión spring-core es demasiado alta, lo que da como resultado una excepción: el nuevo BeanPropertyRowMapper (User.class) produce una excepción de puntero nulo
Inserte la descripción de la imagen aquí

El segundo: la versión spring-jdbc es demasiado alta, lo que genera una excepción: java.lang.NoSuchMethodError: org.springframework.core.convert.support.DefaultConversionService.
Inserte la descripción de la imagen aquí

Solución

  • Spring-core cambiado a una versión inferior
  • Spring-jdbc se cambia a una versión inferior y
    Inserte la descripción de la imagen aquí
    se completa la función de búsqueda final
    Inserte la descripción de la imagen aquí

4. Cómo JDBCTemplate obtiene el ID de clave principal del usuario insertado

@Override
    public void addUser(User user) {
    
    

        final String sql = "insert into bank(name,money) values(?,?)";
        final Object[] args = new Object[]{
    
    user.getName(), user.getMoney()};
        //获取刚插入的主键并返回
        KeyHolder holder = new GeneratedKeyHolder();
        jdbc.update(new PreparedStatementCreator() {
    
    
            @Override
            public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
    
    
                PreparedStatement ps = connection.prepareStatement(sql, new String[]{
    
    "id"});
                for (int i = 0; i < args.length; i++) {
    
    
                    ps.setObject(i + 1, args[i]);
                }
                return ps;
            }
        }, holder);
        int id = Objects.requireNonNull(holder.getKey()).intValue();
        user.setId(id);
    }

¿Por qué sql es un tipo final? final puede evitar que los programas externos modifiquen SQL y evitar problemas de seguridad

para resumir

  • 1. Si se utiliza sping-jdbc, los paquetes necesarios son:
    Inserte la descripción de la imagen aquí
  • 2, la clave principal se inserta justo acostumbrarse KeyHolder, prepareStatement,holder.getKey()
  • 3. Utilice más las herramientas de gestión de proyectos de Maven

Supongo que te gusta

Origin blog.csdn.net/qq_44861675/article/details/107890409
Recomendado
Clasificación