day22--SSM之Spring jdbc

day22–SSM之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
day22--SSM之Spring jdbc_第1张图片

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,很少用。
day22--SSM之Spring jdbc_第2张图片
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> list = jdbcTemplate.queryForList(sql);
        System.out.println(list);
        Map 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对象> 

你可能感兴趣的:(java实训日记,java)