Spring的第十三阶段:Spring之JdbcTemplate使用(02)

news/2024/11/28 21:59:39/

Spring之JdbcTemplate使用

在Spring中提供了对jdbc的封装类叫JdbcTemplate。它可以很方便的帮我们执行sql语句,操作数据库。

1、先准备单表的数据库数据

drop database if exists jdbctemplate;create database jdbctemplate;use jdbctemplate;create table `employee` (`id` int(11) primary key auto_increment,`name` varchar(100) default null,`salary` decimal(11,2) default null
);insert  into `employee`(`id`,`name`,`salary`) 
values (1,'李三',5000.23),(2,'李四',4234.77),(3,'王五',9034.51),
(4,'赵六',8054.33),(5,'孔七',6039.11),(6,'曹八',7714.11);select * from employee;

JdbcTemplate的使用需要在applicationContext.xml中进行配置

<!-- jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource"  ref="c3p0DataSource"/>
</bean>

2、将id=5的记录的salary字段更新为1300.00

@Test
public void test2() throws Exception {
// 实验2:将emp_id=5的记录的salary字段更新为1300.00
String sql = “update employee set salary = ? where id = ?”;
jdbcTemplate.update(sql, 1300, 5);
}

3、批量插入

@Testpublic void test3() throws Exception {String sql = "insert into employee(`name`,`salary`) values(?,?)";ArrayList<Object[]> params = new ArrayList<>();params.add(new Object[] {"aaa",100});params.add(new Object[] {"bbb",100});params.add(new Object[] {"ccc",100});jdbcTemplate.batchUpdate(sql, params);}

4、查询id=5的数据库记录,封装为一个Java对象返回

创建一个Employee对象

public class Employee {private Integer id;private String name;private BigDecimal salary;@Testpublic void test4() throws Exception {// 实验4:查询id=5的数据库记录,封装为一个Java对象返回String sql = "select id ,name ,salary from employee where id = ?";/*** 在queryRunner中使用的是ResultSetHandler* 	在Spring的jdbcTemplate中,使用RowMapper。* 		BeanPropertyRowMapper 可以把一个结果集转成一个bean对象*/Employee employee = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper(Employee.class), 5);System.out.println(employee);}

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

@Test
public void test5() throws Exception {// 实验5:查询salary>4000的数据库记录,封装为List集合返回String sql = "select id,name,salary from employee where salary > ?";List<Employee> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(Employee.class), 4000);System.out.println(list);}

6、查询最大salary

@Testpublic void test6() throws Exception {// 实验6:查询最大salaryString sql = "select max(salary) from employee";BigDecimal salary = jdbcTemplate.queryForObject(sql, BigDecimal.class);System.out.println(salary);}

7、使用带有具名参数的SQL语句插入一条员工记录,并以Map形式传入参数值

<!-- namedParameterJdbcTemplate --><bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" ><constructor-arg name="dataSource" ref="c3p0DataSource" /></bean>
@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class JdbcTest {@AutowiredDataSource dataSource;@AutowiredJdbcTemplate jdbcTemplate;@AutowiredNamedParameterJdbcTemplate namedParameterJdbcTemplate;@Testpublic void test7() throws Exception {// 实验7:使用带有具名参数的SQL语句插入一条员工记录,并以Map形式传入参数值String sql = "insert into employee(`name`,`salary`) values(:name,:salary)";Map<String, Object> param = new HashMap<String,Object>();param.put("name", "小明");param.put("salary", new BigDecimal(55));namedParameterJdbcTemplate.update(sql, param);}

8、以SqlParameterSource形式传入参数值

@Test
public void test8() throws Exception {
// 实验8:重复实验7,以SqlParameterSource形式传入参数值
String sql = “insert into employee(name,salary) values(:name,:salary)”;
//通过一个bean对象的属性会自动赋值
SqlParameterSource sqlParameterSource = new BeanPropertySqlParameterSource(new Employee(0,
“小新”, new BigDecimal(11111)));
namedParameterJdbcTemplate.update(sql, sqlParameterSource);
}

9、创建Dao,自动装配JdbcTemplate对象

创建Dao,自动装配JdbcTemplate对象
添加类

@Repository
public class EmployeeDao {@AutowiredJdbcTemplate jdbcTemplate;public int saveEmployee(Employee employee) {String sql = "insert into employee(`name`,`salary`) values(?,?)";return jdbcTemplate.update(sql, employee.getName(), employee.getSalary());}
}

在applicationContext.xml中配置

<!-- 添加包扫描 --><context:component-scan base-package="com.atguigu" />

测试代码

@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class JdbcTest {@AutowiredDataSource dataSource;@AutowiredJdbcTemplate jdbcTemplate;@AutowiredNamedParameterJdbcTemplate namedParameterJdbcTemplate;@AutowiredEmployeeDao employeeDao;@Testpublic void test9() throws Exception {// 实验9:创建Dao,自动装配JdbcTemplate对象employeeDao.saveEmployee(new Employee(null, "ssssss", new BigDecimal(999)));}

10、通过继承JdbcDaoSupport创建JdbcTemplate的Dao

@Repository
public class EmployeeDao extends JdbcDaoSupport {@Autowiredprotected void setDataSource2(DataSource dataSource) {System.out.println("自动注入 + " + dataSource);super.setDataSource(dataSource);}public int saveEmployee(Employee employee) {String sql = "insert into employee(`name`,`salary`) values(?,?)";return getJdbcTemplate().update(sql, employee.getName(), employee.getSalary());}
}

http://www.ppmy.cn/news/62995.html

相关文章

bigdata-file-viewer--大数据文件查看工具

bigdata-file-viewer--大数据文件查看工具 bigdata-file-viewer是什么常用功能安装 bigdata-file-viewer是什么 一个跨平台&#xff08;Windows&#xff0c;MAC&#xff0c;Linux&#xff09;桌面应用程序&#xff0c;用于查看常见的大数据二进制格式&#xff0c;例如Parquet&…

[论文分享] VOS: Learning What You Don‘t Know by Virtual Outlier Synthesis

这篇文章是ICLR‘ 2022的一篇文章。 No.contentPAPER{ICLR’ 2022} VOS: Learning What You Don’t Know by Virtual Outlier SynthesisURL论文地址CODE代码地址 Motivation 现有OOD Detection方法大多依赖于真实的离群点数据集进行模型正则化&#xff0c;实际应用中过于昂…

qiankun微应用之间、主微应用之间相互跳转方式总结与实践

一、子应用互相访问 1、背景 &#xff08;1&#xff09;未来可能需要做不同子应用菜单的合并&#xff0c;如在bi应用下的侧边栏或者别的地方&#xff0c;需要跳转到数据治理的数仓主题里&#xff0c;或者涉及到子应用值改变&#xff0c;其他应用也需要使用&#xff1b; &…

electron打包运行白屏、Can not find modules ‘xxx‘,Dynamic Linking Error

Can not find modules 原因&#xff1a;应该写在dependencies里的写在了devDependencies&#xff0c;或者相反。有些依赖写反了是可以运行的&#xff0c;但是打包不行 在Electron项目中的package.json文件中&#xff0c;dependencies和devDependencies都是用来声明应用程序所…

Design principle: Immutability不可变性与对mutable变量的Synchronization方法

不可变性&#xff08;Immutability&#xff09;在设计模式中是指一个对象在创建后其状态就不能改变。这是一种编程思想和设计原则。在某些情况下&#xff0c;使用不变对象可以带来许多好处&#xff1a; 简化代码 make things very simple&#xff1a;不可变对象在创建后状态不会…

linux和window下svn版本控制可视化工具

之前一直用命令行来拉取代码建立分支&#xff0c;推送代码等等 也不是不行&#xff0c;但是用久了&#xff0c;感觉很麻烦&#xff0c;后面就用了svn的版本可视化工具 linux和window下svn版本控制可视化工具 Linux环境下使用图形化界面的SVN客户端软件&#xff0c;那么RabbitVC…

「SQL面试题库」 No_58 游戏玩法分析 V

&#x1f345; 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起&#xff0c;全员免费参与的SQL学习活动。我每天发布1道SQL面试真题&#xff0c;从简单到困难&#xff0c;涵盖所有SQL知识点&#xff0c;我敢保证只要做完这100道题&#xff0c;不仅能轻松搞定面试&#xff0…

文鼎创智能物联云原生容器化平台实践

作者&#xff1a;sekfung&#xff0c;深圳市文鼎创数据科技有限公司研发工程师&#xff0c;负责公司物联网终端平台的开发&#xff0c;稳定性建设&#xff0c;容器化上云工作&#xff0c;擅长使用 GO、Java 开发分布式系统&#xff0c;持续关注分布式&#xff0c;云原生等前沿技…