Spring JDBCTemplate介绍
(1)JdbcTemplate属于Spring中比较独立的一个模块
(2)JdbcTemplate是什么?
Spring对数据库的操作在jdbc上面做了深层次的封装
(3)有什么特点?
》使用spring的注入功能
可以把DataSource注册到JdbcTemplate之中 (spring-jdbc.jar)
》JdbcTemplate 核心处理对象(有对应的增删改查的方法)
update(sql, 实际传递的参数 ); 可以完成增删改
(4)与原生JDBC,MyBatis区别?
》与MyBatis都是对原生JDBC的封装
》简单的数据库操作使用JdbcTemplate,大型复杂的使用Mybatis
(1)准备数据库
(2)依赖配置
(3)给数据源DriverManagerDataSource设置四大信息
(4)调用update方法
update(sql, 实际传递的参数 ); 可以完成增删改
实现
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
sql
#创建数据库
create database springjdbc ;
use springjdbc;
create table `stu` (
`sid` double ,
`sname` varchar (90),
`schoolName` varchar (300),
`score` double
);
insert into `stu` (`sid`, `sname`, `schoolName`, `score`) values('1','赵四','吉大','300');
insert into `stu` (`sid`, `sname`, `schoolName`, `score`) values('17','张三','交大','3000');
insert into `stu` (`sid`, `sname`, `schoolName`, `score`) values('18','熊3','武大','3000');
insert into `stu` (`sid`, `sname`, `schoolName`, `score`) values('19','张飞','交大','3000');
TestJdbcTemplate
public class TestJdbcTemplate {
@Test
public void test01(){
//创建数据源对象 四大信息
DriverManagerDataSource dataSource= new DriverManagerDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/springjdbc");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//JdbcTemplate对象 update 增删改
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);//参 数据源连接池
//调用update
jdbcTemplate.update("insert into stu values(?,?,?,?)",1000,"jack","吉首",100);//参1 sql,参2 占位符对应的参数
}
}
applicationContext.xml
<!-- DriverManagerDataSource dataSource = new DriverManagerDataSource();-->
<!-- dataSource.setUrl("jdbc:mysql://localhost:3306/springjdbc");-->
<!-- dataSource.setUsername("root");-->
<!-- dataSource.setPassword("123456");-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/springjdbc"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- //JdbcTemplate对象 update 增删改-->
<!-- JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);//参 数据源连接池-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg name="dataSource" ref="dataSource"/>
</bean>
TestJdbcTemplateSpring
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestJdbcTemplateSpring {
//什么时候使用注解 ,如果是自己开发的类,使用注解
//如果是别人开发的,因为注解加不上去,使用xml
@Autowired
JdbcTemplate jdbcTemplate;
@Test
public void test01(){
//调用update
jdbcTemplate.update("insert into stu values(?,?,?,?)",1000,"rose","吉首",100);//参1 sql,参2 占位符对应的参数
}
@Test
public void test02(){
//调用update
jdbcTemplate.update("delete from stu where sid = ? ",1000);//参1 sql,参2 占位符对应的参数
}
@Test
public void test03(){
//调用update
jdbcTemplate.update("update stu set sname = ? where sid= ?","关于",17);//参1 sql,参2 占位符对应的参数
}
}
(1)queryForObject
返回的结果可以是一个值也可以是一个对象
如:String Integer
如:Student
(2)如果是一个对象,则需要BeanPropertyRowMapper
》什么是BeanPropertyRowMapper
将一行表记录 赋值给 一个javaBean对象返回
但要求列名与表名相同
(3)结果赋值给Map,很少用。
TestJdbcTemplateSpring
//返回结果是一个值或者一个行 queryForObject
@Test
public void test04(){
// Integer count= jdbcTemplate.queryForObject(" select count(*) from stu;",Integer.class);
// System.out.println(count);
// String name =jdbcTemplate.queryForObject("select sname from stu where sid=?;",String.class,17);//参1 sql
// System.out.println(name);
String sql = "select * from stu where sid=?;";
//一行数据转换成一个对象需要rowmapper
BeanPropertyRowMapper rowMapper = new BeanPropertyRowMapper(Stu.class);
Stu s = (Stu) jdbcTemplate.queryForObject(sql,rowMapper,17);//参1 sql 参2 RowMapper 参3 赋值
System.out.println(s);
// Map map = jdbcTemplate.queryForMap(sql,17);//参1 sql 参3 赋值
// System.out.println(map.get("sid"));
}
TestJdbcTemplateSpring
(1)queryForList
返回结果是一个List
List元素可是javaBean对象也可以是Map
(2)前者比较常用,后者基本不用
//返回结果是多个行 query
@Test
public void test05(){
String sql = "select * from stu where score > 300";
BeanPropertyRowMapper rowmapper = new BeanPropertyRowMapper(Stu.class);
List<Stu> list = jdbcTemplate.query(sql,rowmapper);
System.out.println(list);
/* List
}
查询的方法,重点2,5 方法
1. queryForObject(sql ,返回数据类型的字节码对象, 实际传递的参数); 查询指定的字段
2. queryForObject(sql, BeanPropertyRowMapper, 实际传递的参数) 查询对象
3. queryForMap(sql , 实际传递的参数) 返回的是一个Map , map对象中存放的是对象的数据, 以键值对方式存储
4. queryForList(sql , 实际参数) 返回的是List<Map<String,Object>> 查询一个List的结果,但是list中有map
5. query(sql,BeanPropertyRowMapper) 查询一个List<POJO对象>