Spring JdbcTempalte常用方法以及例题

 在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。模仿过程难免代码有出入,导致无法得到期望的运行结果,此时此刻通过比较正确答案 ( 可运行项目 ) 和自己的代码,来定位问题所在。采用这种方式,学习有效果,排错有效率,可以较为明显地提升学习速度,跨过学习路上的各个槛。

源码

链接:https://pan.baidu.com/s/1XwW1nYQM5WRjTgBL_Dx5Bg?pwd=xybu
提取码:xybu

 本项目依赖的jar包

 

 

execute()执行SQL语句

 1.创建一个动态web项目,命名为chapter04,在src目录下创建一个包,命名为jdbc,并且在src目录下创建一个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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd">
        
	<!--1配置数据源 -->
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		
		<!--数据库驱动 如果版本比较新可以把value改为com.mysql.cj.jdbc.Driver-->
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		
		<!--连接数据库的ur1,用户名和密码 -->
		<property name="url" value="jdbc:mysql://localhost:3306/mysql?serverTimezone=UTC" />
		<property name="username" value="root" />
		<property name="password" value="root" />
		
	</bean>
	<!--2配置JDBC模板 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<!--默认必须使用数据源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>

</beans>

2.创建一个jdbcTemplateText类用来测试

package jdbc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

public class jdbcTemplateTest {
public static void main(String[] args) {
	ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
	JdbcTemplate jdbcTemplate=(JdbcTemplate) applicationContext.getBean("jdbcTemplate");
	System.out.println("数据库链接成功!!!");
	jdbcTemplate.execute("CREATE TABLE hero (\r\n"
			+ "  id int(11) AUTO_INCREMENT,\r\n"
			+ "  name varchar(30) ,\r\n"
			+ "  hp float ,\r\n"
			+ "  damage int(11) ,\r\n"
			+ "  PRIMARY KEY (id)\r\n"
			+ ")  DEFAULT CHARSET=utf8;");
}
}

可以在数据库中发现增加了创建的表。

update()更新数据

update()方法可以完成插入、更新和删除数据的操作

1.在jdbc包下创建实体类Hero

package jdbc;

public class Hero {
private int id;
private String name;
private float hp;
private int damage;
public int  getid() {
	return id;
}
public void setid(int id) {
	this.id=id;
}
public String getname() {
	return name;
}
public void setname(String name) {
	this.name=name;
}
public float gethp() {
	return hp;		
}
public void sethp(float hp) {
	this.hp=hp;
}
public int getdamage() {
	return damage;
}
public void setdamage(int damage) {
	this.damage=damage;
}
}

2.在包jdbc下创建HeroDao接口

package jdbc;

public interface HeroDao {
public int addHero(Hero hero) ;
public int updateHero(Hero hero);	
public int deleteHero(int id) ;
}

3.在包jdbc下创建HeroDaoImpl实现接口HeroDao

package jdbc;

import org.springframework.jdbc.core.JdbcTemplate;

public class HeroDaoImpl implements HeroDao{
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
	this.jdbcTemplate=jdbcTemplate;
}
	@Override
	public int addHero(Hero hero) {
		// TODO Auto-generated method stub
		String sql="insert into hero(name,hp,damage) value(?,?,?)";
		Object []objects=new Object[] {
				hero.getname(),
				hero.gethp(),
				hero.getdamage()
		};
		int num=this.jdbcTemplate.update(sql,objects);
		return num;
	}

	@Override
	public int updateHero(Hero hero) {
		// TODO Auto-generated method stub
		String sql="update hero set name=?,hp=?,damage=? where id=?";
		Object []objects=new Object[] {
			hero.getname(),
			hero.gethp(),
			hero.getdamage(),
			hero.getid()
		};
		int num=this.jdbcTemplate.update(sql,objects);
		return num;
	}

	@Override
	public int deleteHero(int id) {
		// TODO Auto-generated method stub
		String sql="delete from hero where id=?";
		int num=this.jdbcTemplate.update(sql,id);
		return num;
	}

}

4.在applicationContext.xml文件中增加一个id为heroDao的Bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd">
        
	<!--1配置数据源 -->
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		
		<!--数据库驱动 如果版本比较新可以把value改为com.mysql.cj.jdbc.Driver-->
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		
		<!--连接数据库的ur1,用户名和密码 -->
		<property name="url" value="jdbc:mysql://localhost:3306/mysql?serverTimezone=UTC" />
		<property name="username" value="root" />
		<property name="password" value="root" />
		
	</bean>
	<!--2配置JDBC模板 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<!--默认必须使用数据源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- 定义id为heroDao的Bean -->
	<bean id="heroDao" class="jdbc.HeroDaoImpl">
		<!--将 jdbcTemplate注入到 heroDao实例中 -->
		<property name="jdbcTemplate" ref="jdbcTemplate" />
	</bean>	
</beans>

5.在jdbcTemplateTest类中进行一些测试

package jdbc;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

public class jdbcTemplateTest {
public static void main(String[] args) {
	ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
	JdbcTemplate jdbcTemplate=(JdbcTemplate) applicationContext.getBean("jdbcTemplate");
	System.out.println("数据库链接成功!!!");
	//创建表
	
//	jdbcTemplate.execute("CREATE TABLE hero (\r\n"
//			+ "  id int(11) AUTO_INCREMENT,\r\n"
//			+ "  name varchar(30) ,\r\n"
//			+ "  hp float ,\r\n"
//			+ "  damage int(11) ,\r\n"
//			+ "  PRIMARY KEY (id)\r\n"
//			+ ")  DEFAULT CHARSET=utf8;");
	
	//添加数据
	
	HeroDao heroDao=(HeroDao) applicationContext.getBean("heroDao");
	Hero hero=new Hero();
	hero.setname("zyy");
	hero.sethp(100f);
	hero.setdamage(50);
	int num=heroDao.addHero(hero);
	if (num>0) {
		System.out.println("添加成功");
	}else {
		System.out.println("添加失败");
	}
	
	//更新数据
	
//	HeroDao heroDao=(HeroDao) applicationContext.getBean("heroDao");
//	Hero hero=new Hero();
//	hero.setid(1);
//	hero.setname("zyy");
//	hero.sethp(150f);
//	hero.setdamage(50);
//	int num=heroDao.updateHero(hero);
//	if (num>0) {
//		System.out.println("更新成功");
//	}else {
//		System.out.println("更新失败");
//	}
	
	//删除数据
	
//	HeroDao heroDao=(HeroDao) applicationContext.getBean("heroDao");
//	int num=heroDao.deleteHero(1);
//	if (num>0) {
//		System.out.println("删除了"+num+"条数据");
//	}else {
//		System.out.println("删除失败");
//	}
}
}

分别测试增加,更新,删除数据。

query()查询数据

JdbcTemplate中常用的quey()方法

方法

说明

List query( String sql,RowMapperrowMapper)

执行String类型参数提供的SQL语句,并通过RowMapper返回一个List类型的结果。

List query(String sql,PreparedStatementSetterpss,RowMapperrowMapper)

根据 String类型参数提供的SQL语句创建PreparedStatement对象,通过RowMapper将结果返回到List中。

List query( String sql,RowMapperrowMapper)

使用Object的值来设置SQL语句中的参数值,采用

RowMapper回调方法可以直接返回List类型的数据。

queryForObject(String sql, RowMapperrowMapper,Object...args)

args参数绑定到5QL语句中,并通过RowMapper返回一个Object类型的单行记录。

queryForList(string sql, Object[] args, class<T>elementType)

该方法可以返回多行数据的结果,但必须是返回列表,

elementType参数返回的是List元素类型。

 1.修改HeroDao

package jdbc;

import java.util.List;

public interface HeroDao {
public int addHero(Hero hero) ;
public int updateHero(Hero hero);	
public int deleteHero(int id) ;

public Hero findHeroById(int id) ;
public List<Hero> findAllHero() ;	

}

2.修改HeroDaoImpl

package jdbc;

import java.util.List;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

public class HeroDaoImpl implements HeroDao{
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
	this.jdbcTemplate=jdbcTemplate;
}
	@Override
	public int addHero(Hero hero) {
		// TODO Auto-generated method stub
		String sql="insert into hero(name,hp,damage) value(?,?,?)";
		Object []objects=new Object[] {
				hero.getname(),
				hero.gethp(),
				hero.getdamage()
		};
		int num=this.jdbcTemplate.update(sql,objects);
		return num;
	}

	@Override
	public int updateHero(Hero hero) {
		// TODO Auto-generated method stub
		String sql="update hero set name=?,hp=?,damage=? where id=?";
		Object []objects=new Object[] {
			hero.getname(),
			hero.gethp(),
			hero.getdamage(),
			hero.getid()
		};
		int num=this.jdbcTemplate.update(sql,objects);
		return num;
	}

	@Override
	public int deleteHero(int id) {
		// TODO Auto-generated method stub
		String sql="delete from hero where id=?";
		int num=this.jdbcTemplate.update(sql,id);
		return num;
	}
	@Override
	public Hero findHeroById(int id) {
		// TODO Auto-generated method stub
		String sql="select * from hero where id=?";
		RowMapper<Hero> rowMapper=new BeanPropertyRowMapper<Hero>(Hero.class);
		return this.jdbcTemplate.queryForObject(sql, rowMapper,id);
	}
	@Override
	public List<Hero> findAllHero() {
		// TODO Auto-generated method stub
		String sql="select * from hero";
		RowMapper<Hero> rowMapper=new BeanPropertyRowMapper<Hero>(Hero.class);
		return this.jdbcTemplate.query(sql,rowMapper);
	}

}

3.在jdbcTemplateTest类中进行一些测试

package jdbc;


import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

public class jdbcTemplateTest {
public static void main(String[] args) {
	ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
	JdbcTemplate jdbcTemplate=(JdbcTemplate) applicationContext.getBean("jdbcTemplate");
	System.out.println("数据库链接成功!!!");
	//创建表
	
//	jdbcTemplate.execute("CREATE TABLE hero (\r\n"
//			+ "  id int(11) AUTO_INCREMENT,\r\n"
//			+ "  name varchar(30) ,\r\n"
//			+ "  hp float ,\r\n"
//			+ "  damage int(11) ,\r\n"
//			+ "  PRIMARY KEY (id)\r\n"
//			+ ")  DEFAULT CHARSET=utf8;");
	
	//添加数据
	
//	HeroDao heroDao=(HeroDao) applicationContext.getBean("heroDao");
//	Hero hero=new Hero();
//	hero.setname("zyy");
//	hero.sethp(100f);
//	hero.setdamage(50);
//	int num=heroDao.addHero(hero);
//	if (num>0) {
//		System.out.println("添加成功");
//	}else {
//		System.out.println("添加失败");
//	}
	
	//更新数据
	
//	HeroDao heroDao=(HeroDao) applicationContext.getBean("heroDao");
//	Hero hero=new Hero();
//	hero.setid(1);
//	hero.setname("zyy");
//	hero.sethp(150f);
//	hero.setdamage(50);
//	int num=heroDao.updateHero(hero);
//	if (num>0) {
//		System.out.println("更新成功");
//	}else {
//		System.out.println("更新失败");
//	}
	
	//删除数据
	
//	HeroDao heroDao=(HeroDao) applicationContext.getBean("heroDao");
//	int num=heroDao.deleteHero(1);
//	if (num>0) {
//		System.out.println("删除了"+num+"条数据");
//	}else {
//		System.out.println("删除失败");
//	}
	
	//单个查询
//	HeroDao heroDao=(HeroDao) applicationContext.getBean("heroDao");
//	Hero hero=heroDao.findHeroById(3);
//	System.out.println(hero);
	
	//全部查询
	HeroDao heroDao=(HeroDao) applicationContext.getBean("heroDao");
	List<Hero> list=heroDao.findAllHero();
	for (Hero hero : list) {
		System.out.println(hero);
	}
}
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无忧#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值