Spring入门第二十五课

使用具名参数

直接看代码:

db.properties

jdbc.user=root
jdbc.password=logan123
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/selective-courses-systemjdbc.initPoolSize=5
jdbc.maxPoolSize=10

applicationContext.xml

<?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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"><!-- 导入资源文件 --><context:property-placeholder location="classpath:db.properties"/><!-- 配置C3P0数据源 --><bean id="dataSource" 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.jdbcUrl}"></property><property name="driverClass" value="${jdbc.driverClass}"></property><property name="initialPoolSize" value="${jdbc.initPoolSize}"></property><property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property></bean><!-- 配置Spring的JDBCTemplate --><bean id="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!-- 配置NamedParameterJdbcTemplate,该对象可以使用具名参数,其没有无参的构造器,所以必须为其构造器指定参数 --><bean id="namedParameterJdbcTemplate"class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"><constructor-arg ref="dataSource"></constructor-arg></bean>
</beans>
package logan.study.spring.jdbc;public class Student {String student_id;String student_name;String card_id;String student_class;String sex;String password;String perovince;String address;String tel;String interests;public String getStudent_id() {return student_id;}public void setStudent_id(String student_id) {this.student_id = student_id;}public String getStudent_name() {return student_name;}public void setStudent_name(String student_name) {this.student_name = student_name;}public String getCard_id() {return card_id;}public void setCard_id(String card_id) {this.card_id = card_id;}public String getStudent_class() {return student_class;}public void setStudent_class(String student_class) {this.student_class = student_class;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPerovince() {return perovince;}public void setPerovince(String perovince) {this.perovince = perovince;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public String getInterests() {return interests;}public void setInterests(String interests) {this.interests = interests;}@Overridepublic String toString() {return "Student [student_id=" + student_id + ", student_name=" + student_name + ", card_id=" + card_id+ ", student_class=" + student_class + ", sex=" + sex + ", password=" + password + ", perovince="+ perovince + ", address=" + address + ", tel=" + tel + ", interests=" + interests + "]";}}
package logan.study.spring.jdbc;import static org.junit.Assert.*;import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.sql.DataSource;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;public class JDBCTest {private ApplicationContext ctx = null;private JdbcTemplate jdbcTemplate;private NamedParameterJdbcTemplate namedParameterJdbcTemplate;{ctx = new ClassPathXmlApplicationContext("applicationContext.xml");jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");namedParameterJdbcTemplate = ctx.getBean(NamedParameterJdbcTemplate.class);}@Testpublic void testDataSource() throws SQLException {DataSource dataSource = (DataSource) ctx.getBean("dataSource");System.out.println(dataSource.getConnection());}/*** 使用具名参数可以使用update(String sql, SqlParameterSource paramSource)方法进行更新* 1.SQL语句中的参数名和类的属性名一样。* 2.使用SqlParameterSource的BeanPropertySqlParameterSource实现类作为参数*/@Testpublic void testNamedParameterJdbcTemplate2(){String sql = "INSERT INTO student_info (student_id,student_name) VALUES(:student_id,:student_name)";Student student = new Student();student.setStudent_id("100");student.setStudent_name("小周");SqlParameterSource paramSource = new BeanPropertySqlParameterSource(student);namedParameterJdbcTemplate.update(sql, paramSource);}/*** 可以为参数起名字* 1.好处:若有多个参数,则不用再去对应位置,直接对应参数名,便于维护* 2.缺点:较为麻烦*/@Testpublic void testNamedParameterJdbcTemplate(){String sql = "INSERT INTO student_info (student_id,student_name) VALUES(:si,:sn)";Map<String,Object> paramMap = new HashMap<>();paramMap.put("si", "HH");paramMap.put("sn", "小楼");namedParameterJdbcTemplate.update(sql, paramMap);}/*** 获取单个列的值,或者做统计查询*/@Testpublic void testQueryForObject2(){String sql = "SELECT count(*) FROM student_info";long count = jdbcTemplate.queryForObject(sql, Long.class);System.out.println(count);}/*** 查到实体类的集合*/@Testpublic void testQueryForList(){String sql = "SELECT student_id,student_name,card_id,class student_class,sex,password,perovince,tel,interests from student_info where student_id > ?";RowMapper<Student> rowMapper = new BeanPropertyRowMapper<>(Student.class);List<Student> students = jdbcTemplate.query(sql, rowMapper,5);System.out.println(students);}/*** 从数据库中获取一条记录,实际得到对应的一个对象* 注意不是调用queryForObject(String sql,Class<Student> requiredType,Object... args)方法!* 而是调用queryForObject(String sql,RowMapper<Student> rowMapper,Object... args)方法!* 1.其中的RowMapper指定如何去映射结果集的行,常用的实现类为BeanPropertyRowMapper* 2.使用SQL中列的别名完成列名和类的属性名的映射。例如class student_class* 3.不支持级联框架,JdbcTemplate到底是一个JDBC的小工具,而不是ORM框架。*/@Testpublic void testQueryForObject(){String sql = "SELECT student_id,student_name,card_id,class student_class,sex,password,perovince,tel,interests from student_info where student_id=?";RowMapper<Student> rowMapper = new BeanPropertyRowMapper<>(Student.class);Student student = jdbcTemplate.queryForObject(sql, rowMapper,1);System.out.println(student);}/*** 执行批量更新,批量INSERT,UPDATE,DELETE* */@Testpublic void testBatchUpdate(){String sql = "INSERT INTO student_info (student_id,student_name) VALUES(?,?)";List<Object[]> pss = new ArrayList<Object[]>();pss.add(new Object[]{"009","AA"});pss.add(new Object[]{"010","BB"});pss.add(new Object[]{"011","CC"});pss.add(new Object[]{"012","DD"});pss.add(new Object[]{"013","EE"});pss.add(new Object[]{"014","FF"});pss.add(new Object[]{"015","GG"});jdbcTemplate.batchUpdate(sql, pss);}/*** 执行INSERT,UPDATE,DELETE*/@Testpublic void testUpdate(){String sql = "UPDATE student_info SET student_name = ? WHERE student_id = ?";jdbcTemplate.update(sql,"小黑","002");}}

 

转载于:https://www.cnblogs.com/LoganChen/p/6915215.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux强制回收内存,Linu系统cache强制回收

LINUX的内存管理机制&#xff0c;一般情况下不需要特意去释放已经使用的cache。Cache机制的存在&#xff0c;使得Linux对磁盘的读写速度是有较大的好处的。 在 Linux 操作系统中&#xff0c;当应用程序需要读取文件中的数据时&#xff0c;操作系统先分配一些内存&#xff0c;将…

HDU 1412 {A} + {B}

Problem Description给你两个集合。要求{A} {B}.注:同一个集合中不会有两个同样的元素.Input每组输入数据分为三行,第一行有两个数字n,m(0<n,m<10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每一个元素为不超出int范围的整数,每一个元素之间有一个…

Google API:如何访问Google Analytics(分析)数据?

在深入研究Google Analytics&#xff08;分析&#xff09;API之前&#xff0c;了解一些Google Analytics&#xff08;分析&#xff09;术语及其关系总是很有用的。 Google帐户&#xff1a;要访问Google Analytics&#xff08;分析&#xff09;&#xff0c;用户将需要一个Google…

为什么linux的新得立软件下载,linux,debian_蝶变(Debian)_Xfce_新立得软件管理_安装不上软件了,怎么处理?,linux,debian - phpStudy...

蝶变(Debian)_Xfce_新立得软件管理_安装不上软件了,怎么处理&#xff1f;(synaptic:9573): GLib-CRITICAL **: g_child_watch_add_full: assertion pid > 0 failed正在预设定软件包 ...(正在读取数据库 ... 系统当前共安装有 343467 个文件和目录。)正准备解包 .../libc6-db…

设计模式学习笔记(十六:桥接模式)

1.1概述 将抽象部分与它的实现部分分离&#xff0c;使他们都可以独立地变化。这就是桥接模式的定义。 抽象类或接口中可以定义若干个抽象方法&#xff0c;习惯上将抽象方法称作操作。抽象类或接口使程序的设计者忽略操作的细节&#xff0c;即不必考虑这些操作是如何实现的&…

Request的getParameter和getAttribute方法的差别

HttpServletRequest.getParameter("modelName");能取到想要的modelObject吗&#xff1f;经过測试之后。发现是不能的。后来想想。其它道理挺简单的&#xff0c;当两个Web组件之间为转发关系时&#xff0c;转发源会将要共享request范围内的数据先用setAttribute将数据…

Spring Social入门–第2部分

几周前&#xff0c;我写了一篇文章&#xff0c;展示了我认为可以使用Spring Social编写的最简单的应用程序。 该应用程序读取并显示了Twitter用户的公共数据&#xff0c;并被编写为Spring Social和社交编码领域的介绍。 但是&#xff0c;让您的应用程序显示用户的公共数据只是故…

linux静默删除文件夹,Linux常用命令10 - unzip

zip 是最广泛使用的归档文件, 除了linux&#xff0c;windows也是非常的广泛。&#xff0c;支持无损数据压缩。 zip 文件是包含一个或多个压缩文件或目录的数据容器。接下来&#xff0c;我将解释如何使用 unzip 命令通过命令行解压缩 Linux 系统中的文件。 还有与之对应就是 zip…

Git学习笔记(一) 安装及版本库介绍

安装Git 最早Git是在Linux上开发的&#xff0c;很长一段时间内&#xff0c;Git也只能在Linux和Unix系统上跑。不过&#xff0c;慢慢地有人把它移植到了Windows上。现在&#xff0c;Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。 在Linux上安装Git 首先&#xff…

python基础:迭代器、生成器(yield)详细解读

1. 迭代器 迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问&#xff0c;知道所有的元素被访问完结束。迭代器只能往前不会后退&#xff0c;不过这也没什么&#xff0c;因为人们很少在迭代途中往后退。 1.1 使用迭代器的优点 对于原生支持随机访问的数据…

LazyInitializationException的四种解决方案–第2部分

本文从教程​​的第1部分继续。 使用PersistenceContextType.EXTENDED的有状态EJB加载收集 该方法只能应用于与Full JEE环境兼容的应用程序&#xff1a;将EJB与PersistenceContextType.EXTENDED一起使用。 检查下面的代码&#xff0c;DAO的样子&#xff1a; package com.ejb…

Linux将硬盘转化为pv,Linux扩展硬盘 物理卷(PV) 卷组(VG) 逻辑卷(LV)

1、给虚拟机添加两块新的sata虚拟硬盘&#xff0c;容量8G和10G# fdisk -l 命令2、分别在这两个硬盘上建立pvPvcreate /dev/sdb 创建一个物理卷/dev/sdb 磁盘名是 fdisk -l 查询出来的Pvscan 查看当前所有物理卷Pvdisplay 查看当前所有物理卷的详情3、创建VG&#xff0c;使得…

ubuntu 16.10 shu rufa meiy ou l e geng xi zhi hou

转载于:https://www.cnblogs.com/ganmk--jy/p/6035894.html

ZOJ Monthly, November 2012

A.ZOJ 3666 Alice and Bob 组合博弈&#xff0c;SG函数应用#include<vector> #include<cstdio> #include<cstring> #include<algorithm>using namespace std;const int maxn 10000 100; int SG[maxn]; vector<int> g[maxn];int mex(int u) { /…

使用Aspect和Spring Profile进行电子邮件过滤

在Web应用程序开发期间&#xff0c;经常需要发送电子邮件。 但是&#xff0c;有时数据库中会包含来自生产的数据&#xff0c;并且存在在电子邮件测试执行期间向真实客户发送电子邮件的风险。 这篇文章将解释如何避免在没有在发送电子邮件功能中明确编写代码的情况下避免这种情…

红旗linux 进不去图形界面,进不了红旗Linux6.0的图形界面请高手帮忙

习生 于 2008-11-02 11:08:42发表:引用:原帖由 zhaoruiqi 于 2008-11-2 10:03 发表 我的也是进不了图形界面&#xff0c;用文本安装后进系统也一样正常按rtl的方法对xorg.conf进行修改,已经能进入图形界面。你看看楼上rtl的回复的能否对你有帮助。zhaoruiqi 于 2008-11-02 10:0…

总结继承的几种方式

简单总结继承的几种方式 JavaScript作为一门弱类型的语言&#xff0c;本着精简的原则&#xff0c;它取消了类的概念&#xff0c;只有对象的概念&#xff0c; 更是有万物皆对象的说法。在基于类的面向对象方式中&#xff0c;对象&#xff08;object&#xff09;依靠类&#xff0…

Oracle SQL精妙SQL语句讲解(二)

- 如果存在就更新&#xff0c;不存在就插入用一个语句实现 DROP TABLE t_mg; CREATE TABLE t_mg(code VARCHAR2(10), NAME VARCHAR2(10)); SELECT * FROM t_mg; MERGE INTO t_mg a USING (SELECT the code code, the name NAME FROM dual) b ON (a.code b.code) WHEN M…

Spring Security –在一个应用程序中有两个安全领域

这篇博客文章主要是关于Spring Security配置的。 更具体地说&#xff0c;它打算显示如何在一个Web应用程序中配置两个不同的安全领域。 第一安全领域是针对浏览器客户端的。 它使我们能够在登录页面中登录并访问受保护的资源。 第二安全领域旨在处理来自android应用程序的REST…

基于Activiti工作流引擎实现的请假审核流程

概要 本文档介绍的是某商用中集成的Activiti工作流的部署及使用&#xff0c;该框架用的Activiti版本为5.19.0。本文档中主要以一个请假流程为例子进行说明&#xff0c;该例子的流程图如下&#xff1a; 这是一个可以正常运作的工作流业务了&#xff0c;但是它也有不足的地方&…