Classe de ferramenta JdbcTemplate
Nota: Use o arquivo pom.xml do projeto maven para adicionar dependências
- 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>
- 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
- 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(); }
- 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
- 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); } }
- 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中的参数写法一定要记忆
- 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);
- 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); } }
- 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(); } } } }
- 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