Javase-JdbcTemplate(6)

JdbcTemplate-课堂笔记一、元数据(了解)什么是元数据元数据:MetaData,定义数据的数据。在数据库里,指数据库、表、字段等等的定义信息JDBC里的元数据有:DatabaseMetaData:数据库的元数据,定义了数据库的名称、类型、版本等等信息ParameterMetaData:预编译对象中,SQL参数的个数、类型等等定义信息ResultSetMetaData...
摘要由CSDN通过智能技术生成

JdbcTemplate-课堂笔记

一、元数据(了解)

  1. 什么是元数据
  • 元数据:MetaData,定义数据的数据。在数据库里,指数据库、表、字段等等的定义信息
  • JDBC里的元数据有:
    • DatabaseMetaData:数据库的元数据,定义了数据库的名称、类型、版本等等信息
    • ParameterMetaData:预编译对象中,SQL参数的个数、类型等等定义信息
    • ResultSetMetaData:结果集的元数据,定义了结果集对象中,列的个数、名称、类型等等信息
  1. ParameterMetaData
  • 如何获取:preparedStatement.getParameterMetaData()
  • 有何作用:
    • 可以获取预编译SQL中,参数的个数:getParameterCount()
    • 可以获取预编译SQL中,某个参数的类型:getParameterType(int 参数序号)
      注意:并非所有数据库,都可以从ParameterMetaData中获取参数的类型,比如:MySql
  1. ResultSetMetaData
  • 如何获取:resultSet.getMetaData()
  • 有何作用:
    • 可以获取结果集中,列的个数:getColumnCount()
    • 可以获取结果集中,列的名称:getColumnName(int 列序号)
    • 可以获取结果集中,列的类型:getColumnType(int 列序号)

二、自定义JDBCTemplate

  1. JdbcTemplate简介
  • JdbcTemplate:是Spring框架的一部分,把JDBC操作进行了简化封装。我们要执行SQL语句,只需要提供SQL和参数,就可以得到结果了。
  • 相关的jar包:
  • 使用的步骤
    1. 导入jar包:数据库驱动包, 连接池的包,JDBCTemplate的jar包
    2. 准备工具类(工具类里有连接池),及工具类使用的配置文件
    3. 编写代码,使用JdbcTemplate操作数据库
      1. 创建JdbcTemplate对象:new JdbcTemplate(DataSource dataSource)
      2. 执行SQL语句:
        1. execute(sql):执行任意语句,但是没有返回值。通常用于执行DDL
        2. update(sql, params):执行DML语句,返回int 表示影响的行数
        3. queryxxx():执行DQL语句,方法比较多,单独讲

三、JdbcTemplate的使用

  1. 执行任意语句:execute()
  • 方法:execute(String sql)

  • 参数:

    • sql:要执行的SQL语句
  • 返回值:无void

  • 示例:

     /**
           * 创建一张表:emp,有字段:主键id, 员工姓名ename, 员工性别sex,员工生日birthday
           */
      @Test
      public void test(){
          JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils.getDataSource());
          String sql = "CREATE TABLE emp(\n" +
              "\tid INT PRIMARY KEY AUTO_INCREMENT,\n" +
              "\tename VARCHAR(20),\n" +
              "\tsex CHAR(1),\n" +
              "\tbirthday DATE\n" +
              ")";
          jdbcTemplate.execute(sql);
      }
    
  1. 执行DML语句:update()
  • 方法:update(String sql, Object… params)
  • 参数:
    • sql:要执行的SQL语句
    • params:执行SQL语句需要的参数值
  • 返回值:
    • int,表示影响的行数
  • 示例:

public class Demo02JdbcTemplateUpdate {
private JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils.getDataSource());
/**
* 向emp表插入一条记录
*/
@Test
public void insert(){
int update = jdbcTemplate.update(“insert into emp (id,ename,sex,birthday) values (?,?,?,?)”, null, “大郎”, “男”,
“2000-01-01”);
System.out.println(“影响行数:” + update);
}

/**
* 修改emp表里,大郎 的性别
*/
@Test
public void update(){
int update = jdbcTemplate.update(“update emp set sex = ? where ename = ?”, “女”, “大郎”);
System.out.println(“影响行数:” + update);
}

/**
* 删除emp表里的数据:大郎
*/
@Test
public void delete(){
int update = jdbcTemplate.update(“delete from emp where ename = ?”, “大郎”);
System.out.println(“影响行数:” + update);
}
}

  1. 执行DQL语句:queryxxx()

3.1 方法介绍

  • queryForObject(String sql, Class resultType, Object… params):用于查询一个值,比如:查询数量
    • 参数:
      • sql:要执行的SQL语句
      • resultType:想要的结果类型。比如:Integer.class,方法就得到Integer类型的结果
      • params:执行SQL语句需要的参数值
    • 返回值:
      • 由参数resultType决定的
  • queryForMap(String sql, Object… params):用于查询一条记录,得到Map
    • 参数:
      • sql:要执行的SQL语句
      • params:执行SQL语句需要的参数值
    • 返回值:
      • Map<String, Object>, 即是:Map<字段名,字段值>
  • queryForList(String sql, Object… params):用于查询多条记录,得到List
    • 参数:
      • sql:要执行的SQL语句
      • params:执行SQL语句需要的参数值
    • 返回值:
      • List<Map<String, Object>>,即是:List<Map<字段名,字段值>>
  • query(String sql, RowMapper rowMapper, Object… params):用于查询多条记录,得到JavaBean的集合
    • 参数:
      • sql:要执行的SQL语句
      • rowMapper:用来设置表字段 和 JavaBean的属性对应关系,即:把一个字段的值,设置给JavaBean的哪个属性
      • params:执行SQL语句,需要的参数值
    • 返回值:
      • List<JavaBean对象>:每条记录封装成一个JavaBean对象,所有JavaBean对象放在一个List里
  • queryForObject(String sql, RowMapper rowMapper, Object… params):查询一条记录,封装成JavaBean对象
    • 参数:
      • sql:要执行的SQL语句
      • rowMapper:用来设置表字段 和 JavaBean的属性对应关系,即:把一个字段的值,设置给JavaBean的哪个属性
      • params:执行SQL语句,需要的参数值
    • 返回值:
      • 一个JavaBean对象

3.2 queryForObject()查询数量

  • 需求:查询emp表的数量 queryForObject(sql, resultType, params)

/**
* 1. 查询emp表里数量:queryForObject
/
@Test
public void queryCount(){
Integer count = jdbcTemplate.queryForObject("select count(
) from emp", Integer.class);

//Long count = jdbcTemplate.queryForObject(“select count(*) from emp”, Long.class);

//int count = jdbcTemplate.queryForObject(“select count(*) from emp”, int.class);

System.out.println(“数量:” + count);
}

3.3 queryForMap()查询一条,得到Map

  • 需求:查询姓名为大郎 的员工信息,得到Map queryForMap(sql, params)

/**
* 2. 查询emp表里ename为大郎的员工,得到Map
*/
@Test
public void queryMap(){
Map<String, Object> map = jdbcTemplate.queryForMap(“select * from emp where ename = ?”, “大郎”);
System.out.println(map);
}

3.4 queryForList()查询多条,得到List

  • 需求:查询emp表里所有男性员工,得到List queryForList(sql, params)

/**
* 3. 查询emp表里所有男性员工,得到List
*/
@Test
public void queryList(){
List<Map<String, Object>> mapList = jdbcTemplate.queryForList(“select * from emp where sex = ?”, “男”);
for (Map<String, Object> map : mapList) {
System.out.println(map);
}
}

3.5 query()查询多条,得到JavaBean集合

  • 需求:查询emp表里所有男性员工,得到List
  • query(sql, new BeanPropertyRowMapper<>(JavaBean类名.class), params)

@Test
public void queryEmpList2(){
List empList = jdbcTemplate.query(“select * from emp where sex = ?”, new BeanPropertyRowMapper<>(Emp.class), “男”);

for (Emp emp : empList) {
System.out.println(emp);
}
}

3.6 queryForObject()查询一条,得到一个JavaBean对象

  • 需求:查询ename为大郎的员工信息,得到一个Emp对象
  • queryForObject(sql, new BeanPropertyRowMapper<>(JavaBean类名.class), params)

/**
* 5. 查询mep表里ename为大郎的员工,得到Emp对象
*/
@Test
public void queryOneEmp(){
Emp emp = null;
try {
emp = jdbcTemplate.queryForObject(“select * from emp where ename = ?”, new BeanPropertyRowMapper<>(Emp.class), “大郎111”);
//ctrl + alt + b:显示出来选中类的所有实现类
} catch (EmptyResultDataAccessException e) {
e.printStackTrace();
}

System.out.println(emp);
}

注意:使用queryForObject查询一条记录,得到一个JavaBean对象时,应该使用try…catch,捕获EmptyResultDataAccessExcpetion

内容回顾

  1. 了解元数据
  2. 掌握JdbcTemplate执行SQL语句的方法
    • 步骤:
      1. 导入jar包:数据库驱动包,连接池的jar包,JdbcTemplate的jar包
      2. 提供配置文件和工具类(工具类里主要是提供了一个获取DataSource的方法)
      3. 编写代码,使用JdbcTemplate
    • 常用执行SQL语句的方法
      • 查询数量:queryForObject(sql, resultType, params)
      • 查询一条记录得到Map:queryForMap(sql, params)
      • 查询多条记录得到List:queryForList(sql, params)
      • 查询多条记录得到JavaBean的集合:query(sql,new BeanPropertyRowMapper<>(JavaBean类名.class), params)
      • 查询一条记录得到JavaBean对象:queryForObject(sql,new BeanPropertyRowMapper<>(JavaBean类名.class), params)
  3. Java开发的三层架构:放到JSP/EL/JSTL讲JavaEE三层架构
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值