0
点赞
收藏
分享

微信扫一扫

Day22SSM之Spring jdbc模块(了解)

倪雅各 2022-09-15 阅读 69


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​

Day22SSM之Spring jdbc模块(了解)_spring

SpringJDBCTemplate的Spring实现

  • (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 占位符对应的参数
}
}

SpringJDBCTemplate-单值查询和查询一行

  • (1)queryForObject
    返回的结果可以是一个值也可以是一个对象
    如:String Integer
    如:Student
  • (2)如果是一个对象,则需要BeanPropertyRowMapper
    》什么是BeanPropertyRowMapper
    将一行表记录 赋值给 一个javaBean对象返回
    但要求列名与表名相同
  • (3)结果赋值给Map,很少用。
  • Day22SSM之Spring jdbc模块(了解)_mysql_02

Day22SSM之Spring jdbc模块(了解)_jdbc_03

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<String,Object> map = jdbcTemplate.queryForMap(sql,17);//参1 sql 参3 赋值
// System.out.println(map.get("sid"));
}

TestJdbcTemplateSpring

  • (1)queryForList
    返回结果是一个List
    List元素可是javaBean对象也可以是Map<String,Object>
  • (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<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
System.out.println(list);
Map<String,Object> stu1 =list.get(1);
System.out.println(stu1.get("sname"));*/
}

所有查询方法汇总

查询的方法,重点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对象>


举报

相关推荐

0 条评论