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