Classe de ferramenta JdbcTemplate

Classe de ferramenta JdbcTemplate

Nota: Use o arquivo pom.xml do projeto maven para adicionar dependências

  1. Dependências necessárias do pacote jar para usar a classe de ferramenta jdbcTemplate
<dependency>
    <groupId>cn.danielw</groupId>
    <artifactId>spring-jdbc-template</artifactId>
    <version>0.2.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId><!-- 因为使用了JDBCUtils工具类,使用到了Druid类-->
    <version>1.2.4</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
    <scope>runtime</scope>
</dependency>		
  1. Métodos comumente usados ​​de JdbcTemplate.class

Nota: JdbcTemplate.class não precisa liberar recursos manualmente, ele liberará recursos automaticamente e retornará o objeto de conexão ao pool de conexão

  1. update (): executa a instrução DML, ou seja, adiciona, exclui, modifica e retorna o tipo int
@Test
public void update(){
     
     
    String sql = "update student set sage=20 where sno = ?";
    int i = temp.update(sql, 201215121);//指定参数,不需要双引号
    System.out.println();
}
  1. queryForMap (): Encapsule o resultado da consulta em um conjunto de mapas, use o nome da coluna do banco de dados como a chave e o valor como o valor e encapsule este registro em um conjunto de mapas

Observação: o comprimento do conjunto de resultados desta consulta de método só pode ser 1. Ou seja, você só pode consultar instruções sql que retornem um registro.

@Test
public void queryForMap(){
     
     
    String sql = "select * from student where sno = ?";
    Map<String, Object> map = temp.queryForMap(sql, 201215121);
    System.out.println(map);
}

//当sql语句执行返回结果是两条记录时,会报错
//org.springframework.dao.IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 2
  1. queryForList (): O resultado da consulta é encapsulado em uma coleção List

Observação: encapsule cada registro em uma coleção de mapas e encapsule a coleção de mapas em uma coleção de listas: List <Map <String, Object >>

    @Test
    public void queryForList(){
     
     
        String sql = "select * from student limit 5";
        List<Map<String, Object>> mapList = temp.queryForList(sql);
        for (Map<String, Object> stringObjectMap : mapList) {
     
     
            System.out.println(stringObjectMap);
        }
    }
  1. query (): executa a consulta sql e encapsula o resultado em um objeto JavaBean

Nota: o parâmetro da consulta (): RowMapper

  • Geralmente, usamos a classe de implementação BeanPropertyRowMapper para completar o encapsulamento de dados para JavaBean
  • new BeanBeanPropertyRowMapper <type> (type.class). Tipo é o tipo de JavaBean a ser encapsulado
  • A classe JavaBean deve ser uma variável de tipo de referência (Integer ...), não uma variável de tipo comum (int ...)
  • Veja o exemplo de código abaixo para detalhes
@Test
public void query(){
     
     
    String sql = "select * from student limit 5";
    List<Student> studentList = temp.query(sql, new BeanPropertyRowMapper<Student>(Student.class));
    for (Student student : studentList) {
     
     
        System.out.println(student);
    }
}
//List<Student> studentList = 
//temp.query(sql, new BeanPropertyRowMapper<Student>(Student.class));
//BeanPropertyRowMapper中的参数写法一定要记忆
  1. queryForObject (): resultados da consulta, encapsular os resultados em objetos

Observação: geralmente, esse método é adequado para o caso em que a instrução SQL é uma função agregada.

  • O valor de retorno é do tipo Lang
  • O segundo tipo de parâmetro é: Lang.class, como:
	@Test
    public void queryForObject(){
      
      
        String sql = "select count(sno) from student";
        Long count = temp.queryForObject(sql, Long.class);
        System.out.println(count);
    }
//Long count = temp.queryForObject(sql, Long.class);
  1. Código completo da classe de teste JdbcTemplate
package zhi.itlearn;

import cn.danielw.spring.jdbc.JdbcTemplate;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import zhi.itlearn.domain.Student;

import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;

public class JdbcTemplateTest1 {
     
     
	//将JdbcTemplate对象定义在方法外,简化代码
    //JdbcTemplate类实例化方式:new JdbcTemplate(JDBCUtils.getDateSource())
    //参数是:获得连接池对象,在此使用的是自定义的JDBCUtils工具类
    private static JdbcTemplate temp = new JdbcTemplate(JDBCUtils.getDateSource());

    @Test
    public void update(){
     
     
        String sql = "update student set sage=20 where sno = ?";
        int i = temp.update(sql, 201215121);//指定参数,不需要双引号
        System.out.println();
    }
    @Test
    public void queryForMap(){
     
     
        String sql = "select * from student where sno = ? ";
        Map<String, Object> map = temp.queryForMap(sql, 201215121);
        System.out.println(map);
    }

    @Test
    public void queryForList(){
     
     
        String sql = "select * from student limit 5";
        List<Map<String, Object>> mapList = temp.queryForList(sql);
        for (Map<String, Object> stringObjectMap : mapList) {
     
     
            System.out.println(stringObjectMap);
        }
    }

    @Test
    public void query(){
     
     
        String sql = "select * from student limit 5";
        List<Student> studentList = temp.query(sql, new BeanPropertyRowMapper<Student>(Student.class));
        for (Student student : studentList) {
     
     
            System.out.println(student);
        }
    }
    @Test
    public void queryForObject(){
     
     
        String sql = "select count(sno) from student";
        Long count = temp.queryForObject(sql, Long.class);
        System.out.println(count);
    }
}
  1. Classe de ferramenta JDBCUtils
package zhi.itlearn;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtils {
     
     
    private static DataSource ds;

    static {
     
     
        try {
     
     
            //加载配置文件
            Properties pro = new Properties();
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("duril-config.properties"));
            //获得DataSource连接池对象
            //使用Druid工具类中DruidDataSourceFactory类获得连接池对象【重点】
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
     
     
            e.printStackTrace();
        } catch (Exception e) {
     
     
            e.printStackTrace();
        }
    }

    public static DataSource getDateSource(){
     
     
        return ds;
    }

    public static Connection getConnection() throws SQLException {
     
     
        return ds.getConnection();
    }

    public static void close(Statement stat,Connection conn){
     
     
        close(null,stat,conn);
    }
    public static void close(ResultSet rs, Statement stat, Connection conn){
     
     
        if (rs!=null){
     
     
            try {
     
     
                rs.close();
            } catch (SQLException e) {
     
     
                e.printStackTrace();
            }
        }
        if (stat!=null){
     
     
            try {
     
     
                stat.close();
            } catch (SQLException e) {
     
     
                e.printStackTrace();
            }
        }
        if (conn!=null){
     
     
            try {
     
     
                conn.close(); //归还连接
            } catch (SQLException e) {
     
     
                e.printStackTrace();
            }
        }
    }

}
  1. arquivo de configuração de propriedades (druid-config.properties)
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/xskc
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000

Acho que você gosta

Origin blog.csdn.net/qq_42278320/article/details/113006040
Recomendado
Clasificación