zoukankan      html  css  js  c++  java
  • spring jdbcTemplate

      jdbcTemplate是Spring针对JDBC代码失控提供的解决方案,严格来说,它本身也不算成功。但是无论如何jdbcTemplate的方案也体现了Spring框架的主导思想之一:给予常用技术提供模板化的编程
      对jdbcTemplate进行配置

    <?xml version='1.0' encoding='UTF-8' ?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
            http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
    
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <!-- 数据库连接池 -->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/springmvc?useSSL=false&amp;serverTimezone=Hongkong&amp;characterEncoding=utf-8&amp;autoReconnect=true"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>      <!--连接池的最大数据库连接数-->
            <property name="maxActive" value="255"/>      <!--最大等待连接中的数量-->
            <property name="maxIdle" value="5"/>      <!--最大等待毫秒数-->
            <property name="maxWait" value="10000"/>
        </bean>
    
    </beans> 

      

      代码清单:通过jdbcTemplate操作数据库

    ApplicationContext ctx = new ClassPathXmlApplicationContext("ssm/chapter12/spring-cfg.xml");
    JdbcTemplate jdbcTemplate = ctx.getBean(JdbcTemplate.class);
    Long id = 1L;
    String sql = "select id, role_name, note from t_role where id = " + id;
    
    Role role = jdbcTemplate.queryForObject(sql, new RowMapper<Role>() {
        @Override
        public Role mapRow(ResultSet rs, int rownum) throws SQLException {
            Role result = new Role();
            result.setId(rs.getLong("id"));
            result.setRoleName(rs.getString("role_name"));
            result.setNote(rs.getString("note"));
            return result;
        }
    });
    System.out.println(role.toString());


      queryForObject方法。它包含两个参数,一个是SQL,另一个是RowMapper接口,这里笔者使用了匿名类,所以采用了new关键字去创建一个RowMapper接口对象。如果开发环境是Java 8的,也可以使用Lambda表达式的写法
      代码清单:使用Lambda表达式

    Role role2 = jdbcTemplate.queryForObject(sql, (ResultSet rs, int rownum) -> {
        Role result = new Role();
        result.setId(rs.getLong("id"));
        result.setRoleName(rs.getString("role_name"));
        result.setNote(rs.getString("note"));
        return result;
    });
    System.out.println(role2.toString());

      这样就更为清晰一些,不过它们都是大同小异的写法,在mapRow方法中,从ResultSet对象中取出查询得到的数据,组装成一个Role对象,而无须再写任何关闭数据库资源的代码。因为jdbcTemplate内部实现了它们,这便是Spring所提供的模板规则。

    jdbcTemplate的增、删、查、改

      代码清单:jdbcTemplate的增、删、查、改

    package com.ssm.chapter12.jdbc;
    
    import com.ssm.chapter11.game.pojo.Role;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.RowMapper;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.List;
    
    public class MainTest {
    
        public static void main(String[] args) {
    
            ApplicationContext ctx = new ClassPathXmlApplicationContext("ssm/chapter12/spring-cfg.xml");
            JdbcTemplate jdbcTemplate = ctx.getBean(JdbcTemplate.class);
    
            insertRole(jdbcTemplate);
            List roleList = findRole(jdbcTemplate, "role");
            System.out.println(roleList.toString());
            Role role3 = new Role();
            role3.setId(5L);
            role3.setRoleName("update_role_name_5");
            role3.setNote("update_note_5");
            int i = updateRole(jdbcTemplate, role3);
            System.out.println("update:" + i);
            int i1 = deleteRole(jdbcTemplate, 5L);
            System.out.println("delete:" + i1);
    
    
        }
    
    
        /***  * 插入角色  * @param jdbcTemplate --模板  * @return 影响条数  */
        public static int insertRole(JdbcTemplate jdbcTemplate) {
            String roleName = "role_name_1";
            String note = "note_1";
            String sql = "insert into t_role(role_name, note) values(?, ?)";
            return jdbcTemplate.update(sql, roleName, note);
        }
    
        /**
         * 删除角色  * @param jdbcTemplate  模板  * @param id  角色编号,主键  * @return 影响条数
         */
        public static int deleteRole(JdbcTemplate jdbcTemplate, Long id) {
            String sql = "delete from t_role where id=?";
            return jdbcTemplate.update(sql, id);
        }
    
        public static int updateRole(JdbcTemplate jdbcTemplate, Role role) {
            String sql = "update t_role set role_name=?, note = ? where id = ?";
            return jdbcTemplate.update(sql, role.getRoleName(), role.getNote(), role.getId());
        }
    
        /**
         * 查询角色列表  * @param jdbcTemplate  模板  * @param roleName  角色名称  * @return 角色列表
         */
        public static List<Role> findRole(JdbcTemplate jdbcTemplate, String roleName) {
            String sql = "select id, role_name, note from t_role where role_name like concat('%',?, '%')";
            Object[] params = {roleName};//组织参数
            // 使用RowMapper接口组织返回(使用lambda表达式)
            List<Role> list = jdbcTemplate.query(sql, params, (ResultSet rs, int rowNum) -> {
                Role result = new Role();
                result.setId(rs.getLong("id"));
                result.setRoleName(rs.getString("role_name"));
                result.setNote(rs.getString("note"));
                return result;
            });
            return list;
        }
    
    }
  • 相关阅读:
    ASP.NET Core MVC Razor小记
    ASP.NET Core引入第三方日志框架及简单实现日志策略配置
    test
    记录一个Windows explorer进程卡死的处理,有关于“MicrosoftWindows.Client.CBS_cw5n1h2txyewy”的,已解决!
    Windows版本sed工具
    相同xml批量创建替换脚本.sh
    springboot1.x apollo 更改属性值不起作用。 ConfigurationProperties
    jmeter固定定时器
    jmeter函数助手参数化
    jmeter循环控制器
  • 原文地址:https://www.cnblogs.com/ooo0/p/11026608.html
Copyright © 2011-2022 走看看