Day22SSM之Spring jdbc模块(了解)

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

在这里插入图片描述

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,很少用。
    在这里插入图片描述

在这里插入图片描述

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"));*/
    }

所有查询方法汇总

查询的方法,重点25 方法

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对象> 

猜你喜欢

转载自blog.csdn.net/u013621398/article/details/108975603
今日推荐