day22--SSM之Spring jdbc

喵言喵語~發表於2020-10-09

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
在這裡插入圖片描述

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物件> 

相關文章