Templete(springMVC Facelets)

什么是Tenplate?

  Spring提供的一种操作数据库的技术,是对Jdbc的封装。语法非常接近DBUtils.

  JdbcTemplate可以直接操作数据库,加快效率,jdbcTemplate也可以为声明式事务准备

为什么用JdbcTemplate进行开发?  

  Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。
  Spring提供的JdbcTemplate对jdbc做了封装,大大简化了数据库的操作。找到Spring   JdbcTemplate源码,可以看到如下方法:
  Connection con = DataSourceUtils.getConnection(getDataSource());
  如果直接使用JDBC的话,需要我们加载数据库驱动、创建连接、释放连接、异常处理等一系列的动作;繁琐且代码看起来不直观。
  此外,Spring提供的JdbcTempate能直接数据对象映射成实体类,不再需要获取  ResultSet去获取值/赋值等操作,提高开发效率;
  如下:return (User) jdbcTemplate.queryForObject("select * from tb_test1 where id = 100", User.class)

配置环境:

  导入jar包:

    IOC需要的jar包:

      commons-logging-1.1.3.jar
      spring-aop-4.0.0.RELEASE.jar //注解会使用到的包
      spring-beans-4.0.0.RELEASE.jar
      spring-context-4.0.0.RELEASE.jar
      spring-core-4.0.0.RELEASE.jar
      spring-expression-4.0.0.RELEASE.jar

    MySQL驱动包、c3p0jar包:   

      c3p0-0.9.1.2.jar
      mysql-connector-java-5.1.37-bin.jar

    JdbcTemplate需要的jar包:

      spring-jdbc-4.0.0.RELEASE.jar
      spring-orm-4.0.0.RELEASE.jar
      spring-tx-4.0.0.RELEASE.jar

在IOC容器中配置数据源:

  即在applicationContext.xml中

  

复制代码
<!-- 引入外部属性文件-->
    <context:property-placeholder location="classpath:jdbc.properties" />
    <!-- 配置数据源 -->
    <bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="driverClass" value="${jdbc.driver}"></property>
    </bean>
复制代码

其中jdbc.properties文件内容:

  jdbc.user=root

  jdbc.password=1234

  jdbc.url=jdbc:mysql://localhost:3306/test

  jdbc.driver=com.mysql.jdbc.Driver

在IOC容器中配置JdbcTemplate对应的bean 

<!--配置jdbcTemplate,并装配DataSource数据源属性  -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="comboPooledDataSource"></property>
    </bean>

 

测试数据源: 

  建立一个Junit Test Case 类:

  将emp_id=5的记录的salary字段更新为1300.00【更新操作】
  

复制代码
public class TestDataSource {
        private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        private JdbcTemplate template=ioc.getBean(JdbcTemplate.class);

        @Test
        public void test01(){
            //实验2:将emp_id=5的记录的salary字段更新为1300.00
            String sql = "UPDATE employee SET salary = ? WHERE emp_id = ?";
            template.update(sql, 1300,5);//第一个是sql语句,后面的按着顺序传入参数即可,这个update方法是接收的可变参数!参数的个数和类型不收限制。
        }    
复制代码

从上述实验中就可以看到,该操作不用我们自己再去获取数据库连接信息了,而是直接传递sql语句及其参数!

 

批量插入 :

复制代码
public class TestDataSource {
                private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
                private JdbcTemplate template=ioc.getBean(JdbcTemplate.class);
                @Test
                public void testBatch(){
                    String sql="INSERT INTO employee(`emp_name`,`salary`) VALUES(?,?)";
                    //执行sql语句需要传递的参数 ,一个类型为Object数组的list集合。    
                    List<Object[]> list = new ArrayList<Object[]>();
                    list.add(new Object[]{"Tom2015",1000});
                    list.add(new Object[]{"Tom2016",2000});
                    list.add(new Object[]{"Tom2017",3000});                  
                    template.batchUpdate(sql, list);//批量插入,所以用带有batch的batchupdate方法,该方法有两个参数,前一个为SQL,后一个为参数集合。
                }
        }
复制代码

查询:

  emp_id=5的数据库记录,封装为一个Java对象返回 分析:封装为一个对象返回的话,首先我们需要有一个与数据表对应的实体类!

复制代码
@Test
            public void test01(){
                //需要注意的是:sql语句中的别名要与对应实体类的属性名保持一致!
                String sql = "SELECT emp_id AS empId,emp_name AS empName,salary FROM employee WHERE emp_id=?";
                
                //RowMapper是一个接口,这里我们使用其子类
                RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<Employee>(Employee.class);
                //最后一个参数是可变参数,用于向sql语句中依次传递参数!
                Employee employee = template.queryForObject(sql, rowMapper, 5);
                System.out.println(employee);
            }
        }
复制代码

查询集合:

  查询salary>4000的数据库记录,封装为List集合返回

复制代码
public class TestDataSource {
            private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
            private JdbcTemplate template=ioc.getBean(JdbcTemplate.class);
            
            @Test
            public void test01(){
                //需要注意的是:sql语句中的别名要与对应实体类的属性名保持一致!
                String sql = "SELECT emp_id AS empId,emp_name AS empName,salary FROM employee WHERE salary > ?";
                
                //RowMapper是一个接口,这里我们使用其子类
                RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<Employee>(Employee.class);
                //该query方法查询出来的是一个list列表,query方法的最后一个参数是可变参数!
                List<Employee> list = template.query(sql, rowMapper, 4000);
                
                for (Employee employee : list) {
                    System.out.println(employee);
                }
            }
        }
        
复制代码
 
参考来源:https://www.cnblogs.com/xuesheng/p/7460424.html
posted @ 2019-04-14 21:14  zx1  阅读(240)  评论(0编辑  收藏  举报