JAVAWEB学习总结,DAY6(jdbcTemplate)

JDBCTemplate

步骤:

  1. 前提:
    • 要有配置文件,
    • bean文件里面存放封装数据的类,满参构造,公共的get/set方法,实现序列化接口serializable
    • 导包c3p0.jar 、durid.jar
    • 工具类实现(注册驱动,获得连接,释放资源)
  2. 创建JDBCTemplate对象,传入数据源
  3. 调用update(),queryXXX();

增删改:(重要)
int update(String sql,object…params); //返回几行受影响

查询一条记录
封装到Map里面
queryForMap(string sql,object…params); //把列作为map集合的key把数据作为map的values
封装到javaBean对象里面(重要)
queryForObject(String sql,new BeanPropertyRowMapper<>(类型.class),object…params);

统计数量(重要)
queryForObject(String sql,Integer/Long.class);

查询多条记录封
封装到List
queryForList(String sql,object…params)
封装到List(重要)
query(String sql,new BeanPropertRowMapper<>(类型.class),object … params)

元数据(MetaDate)
概述:描述数据的数据

ParameterMetaData
概述: ParameterMetaData是由preparedStatement对象通过getParameterMetaData方法获取而来,ParameterMetaData可用于获取有关PreparedStatement对象和其预编译sql语句 中的一些信息. eg:参数个数,获取指定位置占位符的SQL类型

方法:
int getParameterCount(); 获得SQL语句中的参数个数 (获得?的个数)

//3. 获得参数的元数据
ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
// 获得sql语句里面参数的个数
int parameterCount = parameterMetaData.getParameterCount();
System.out.println("parameterCount="+parameterCount);
        
          int getParameterType(int param); 获取指定参数的SQL类型,(MySQL不支持获取参数类型)

ResultSetMetaData
概述: ResultSetMetaData是由ResultSet对象通过getMetaData方法获取而来,ResultSetMetaData可用于获取有关ResultSet对象中列的类型和属性的信息。(获得表的列名和列的类型)

获得:ResultSetMetaData

ResultSetMetaData resultSetMetaData = resultSet.getMetaData()

方法:
getColumnCount(); 获取结果集中列项目的个数
getColumnName(int column); 获得数据指定列的列名
getColumnTypeName(); 获取指定列的SQL类型
getColumnClassName(); 获取指定列SQL类型对应于Java的类型

        //4. 获得结果的元数据对象
        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();

        // 获得结果集里面列的数量
        int columnCount = resultSetMetaData.getColumnCount();
        System.out.println("columnCount="+columnCount);//4

        // 获得某一列的列名 eg: 获得第二列
        String columnName = resultSetMetaData.getColumnName(2);
        System.out.println("columnName="+columnName);

        // 获得第三列的sql类型 varchar
        String columnTypeName = resultSetMetaData.getColumnTypeName(3);
        System.out.println(columnTypeName);

        // 获得第三列对应的java类型 String
        String columnClassName = resultSetMetaData.getColumnClassName(3);
        System.out.println("columnClassName="+columnClassName);

自定义JDBCTemplate
步骤
1.获得Connection
2.根据SQL,创建预编译SQL语句对象
3.获得参数元数据对象,获得?个数
4.遍历个数,给参数赋值
5.执行,处理结果
6.释放资源

public class MyJdbcTemplate {

    //1. 需要传入数据源(获得连接, 使用者不需要关注连接的)
    private DataSource dataSource;

    public MyJdbcTemplate(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    /**  封装了JDBC操作数据库的步骤+元数据, 释放资源(使用者不需要关注释放资源了)
     * 进行增,删,修改
     * @param sql  sql语句
     * @param params 参数
     * @return
     * Ctrl+Alt+T
     */
    public int update(String sql, Object ... params){
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            //0. 非空判断
            if(dataSource == null){
                throw  new RuntimeException("dataSource must not null...");
            }

            if(sql == null){
                throw  new RuntimeException("sql must not null...");
            }

            //1. 从dataSource 获得连接对象
            connection = dataSource.getConnection();
            //2. 创建预编译的sql语句对象 insert into user values (?,?,?,?)
            preparedStatement = connection.prepareStatement(sql);

            //3. 获得参数的元数据对象
            ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
            //4. 获得参数的个数
            int parameterCount = parameterMetaData.getParameterCount();
            //5. 给每一个?赋值
            for(int i = 0; i < parameterCount ;i++){
                preparedStatement.setObject(i+1,params[i]);
            }

            //6. 执行
            int i = preparedStatement.executeUpdate();
            return  i;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            C3P0Utils.release(null,preparedStatement,connection);
        }


        return  -1;
    }
}

三层架构
软件中分层:按照不同功能分为不同层,通常分为三层:表现层(web层),业务层,持久(数据库)层

分层包名(公司域名倒写)表现层(web层) 注: 后续学javawebcom.lin.web业务层(service层)com.lin.service持久层(数据库访问层)com.lin.daoJavaBeancom.lin.bean工具类com.lin.utils

分层的意义:
1.解耦:降低层与层之间的耦合性
2.可维护性:提高软件的可维护性,对现有的功能进行修改和更新时不会影响原有的功能
3.可扩展性:提升软件的可扩展性,添加新的功能的时候不会影响到现有的功能
4.可重用性:不同层之间进行功能调用时,相同的功能可以重复使用

作用:
WEB层
1.获得用户的输入
2.调用业务
3.提示
业务层(Service)
1.处理业务
2.调用Dao
持久层(Dao)
1.操作数据库

优点:
1.方便维护
2.方便扩展
3.方便复用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值