博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring的Template
阅读量:6307 次
发布时间:2019-06-22

本文共 4533 字,大约阅读时间需要 15 分钟。

什么是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中

  

其中jdbc.properties文件内容:

  jdbc.user=root

  jdbc.password=1234

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

  jdbc.driver=com.mysql.jdbc.Driver

在IOC容器中配置JdbcTemplate对应的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
list = new ArrayList
(); 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
rowMapper = new BeanPropertyRowMapper
(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
rowMapper = new BeanPropertyRowMapper
(Employee.class); //该query方法查询出来的是一个list列表,query方法的最后一个参数是可变参数! List
list = template.query(sql, rowMapper, 4000); for (Employee employee : list) { System.out.println(employee); } } }

 

 

  

  

转载于:https://www.cnblogs.com/xuesheng/p/7460424.html

你可能感兴趣的文章
更新Xcode7 后 .dylib变成了.tbd的问题解决
查看>>
hdu 多校
查看>>
Oracle定時email通知
查看>>
费用登记系统(开发小结)
查看>>
python去除列表最小的元素
查看>>
ubuntu12.10安装jdk1.7
查看>>
[ HDOJ 3826 ] Squarefree number
查看>>
上传本地文件到linux
查看>>
java(系统)实战1
查看>>
MNIST
查看>>
管道及I/O重定向
查看>>
[Asp.net mvc]国际化
查看>>
WebHttpRequest在sharepoint文档库中的使用
查看>>
QML中使用AJAX,解析返回的JSON数据
查看>>
hdu1753
查看>>
[BZOJ4199][NOI2015]品酒大会
查看>>
flex布局1
查看>>
http --- 协议详解
查看>>
解决数据库Operation not allowed when innodb_forced_recovery > 0
查看>>
django开发个人简易Blog—nginx+uwsgin+django1.6+mysql 部署到CentOS6.5
查看>>