java--spring jdbc-template模板---(重要!!!)简化开发s

知识储备

  • Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
  • 步骤:
    1. 导入jar包

    2. 创建JdbcTemplate对象。依赖于数据源DataSource

      • JdbcTemplate template = new JdbcTemplate(ds);
    3. 调用JdbcTemplate的方法来完成CRUD的操作

      • update():执行DML语句。增、删、改语句
      • queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
        • 注意:这个方法查询的结果集长度只能是1
      • queryForList():查询结果将结果集封装为list集合
        • 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
      • query():查询结果,将结果封装为JavaBean对象
        • query的参数:RowMapper
          • 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
          • new BeanPropertyRowMapper<类型>(类型.class)
      • queryForObject:查询结果,将结果封装为对象
        • 一般用于聚合函数的查询

=============================================================

JDBC(连接池,template)自己的理解小结

:东西很多容易乱,自己理解为三明治结构,连接的获取和释放都由utils编写(处于两端点)比较稳妥,不管是连接池还是普通连接,即把注册驱动
或者
获取DataSource即new 一个由DruidDataSourceFactory工厂类创造的数据源对象(传入pro文件----字节文件)都写在static代码块内:

小结一个基础,就是传入pro.load的参数的两种不同,一种是字节,一种是字符,字符注意是因为要手动去获取string而来的,注意基本功
utils类的具体1:

    private static String Driver;
    static {//立马注册驱动,顺便把要的内容拿进来,比如url和user
        try {
            Properties pro = new Properties();
            ClassLoader c = JDBCutils.class.getClassLoader();
            URL s = c.getResource("day.properties");
            String path = s.getPath();
            pro.load(new FileReader(path));/////这里
            Driver = pro.getProperty("Driver");
            url = pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            Class.forName(Driver);
        }
        public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
        }


utils类的具体2:


        private static DataSource ds;

        static {
            Properties properties = new Properties();
            try {
                properties.load(JDBCutils.class.getClassLoader().getResourceAsStream("druid.properties"));////这里
                ds = DruidDataSourceFactory.createDataSource(properties);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

注意细节,类加载器获取的方式不同,第一个是返回一个Resource,第二个是直接返回一个字节流,

  • 第一个为什么要获取这个URL统一资源,因为这个url类有个方法可以获取路径path,兜了一圈都是为了从这个资源获取路径,然后这个路径可以帮助新建一个FileReader匿名对象从而pro加载的都是字符串的内容,便于后期手动的获取内容。
  • 而第二个简直粗暴,直接字节流,说明Druid的太强大了,工厂类直接处理properties(内是字节流)文件,就能知道你的信息,所以properties要写的规范一点
    在这里插入图片描述

三明治结构的中间就是JDBCtemplate

注意先来区别一下,不用template和使用了的区别,看下面代码,可以知道,以前需要获取具体的连接,然后再执行,preparedStatement设置一些参数,而且需要释放资源而且如果需要返回一个集合,自己定义一个类后得手动定义一个LIST然后用while语句添加,很麻烦

PreparedStatement preparedStatement = null;
        Connection connection = null;
        try {
            connection = JDBCutils.getConnection();
            String sql = "insert into user values(null,?,?)";
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, "sss");
            preparedStatement.setString(2, "12313");
            int i = preparedStatement.executeUpdate();
            System.out.println(i);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCutils.close(null, preparedStatement, connection);
        }

使用了template之后,可以说只需要给他一个数据源,即数据库连接池,连接都不用拿,只需要写sql,连接都不拿,这得多懒,相当于扔给你一个池子,只说一句sql,拿连接跟释放都是由template完成的。好处,返回结果集时候封装好,但是不要忘记即使用了Spring的template和Druid提供的DataSource(需要pro),还是需要自己去写好JDBCutils,更好地把获取一个池封装好,定义方法,相当于池子要自己造,造完了就坐旁边敲大腿发指挥sql就行了!!!!

		DataSource dataSource = JDBCutils.getDataSource();
        JdbcTemplate template = new JdbcTemplate(dataSource);
        String sql = "update user set username = 'avc' where id = ?";
        int update = template.update(sql, 1);
        System.out.println(update);
发布了78 篇原创文章 · 获赞 3 · 访问量 6598

猜你喜欢

转载自blog.csdn.net/weixin_38023259/article/details/104151272