可執行任何sql語句,但返回值是void,因此通常用於數據庫的新建、修改、刪除和數據表記錄的增刪改。spring
增刪改,args傳遞實參,返回受影響的記錄數。sql
批量執行sql語句(增刪改),返回受影響的記錄數。數據庫
以上3個方法都有對應的get方法。app
String sql="select id from student_tb where name = ? and gender = ?" Object[] args=new Object[]{"張三",1}; int id=jdbcTemplate.queryForObject(sql,args,int.class);
ForObject,顧名思義,必須且只能返回一條記錄,若是返回多條記錄或沒有記錄匹配,都會報錯;且只能查詢一個字段。 ide
String sql="select name from student_tb"; List<String> list=jdbcTemplate.queryForList(sql,String.class); for (String name:list){ System.out.println(name); }
基本數據類型的List,只能選中數據表的一列。this
String sql="select * from student_tb"; List<Map<String,Object>> list=jdbcTemplate.queryForList(sql); //list裝的是結果集中全部的記錄,一個map裝一條記錄 for (Map<String,Object> map:list){ //map的key是字段名,value是該字段的值。get()的返回值是Object。 Object id = map.get("id"); Object name = map.get("name"); Object age = map.get("age"); System.out.println("id:"+id+"\tname:"+name+"\tage:"+age); }
Map類型的List,能夠選擇多列。字段名都是String,值多是各類類型,因此使用Map<String, Obejct>。spa
String sql="select * from student_tb where id = 1"; Map<String,Object> map=jdbcTemplate.queryForMap(sql); Object name = map.get("name"); Object age = map.get("age"); System.out.println("name:"+name+"\tage:"+age);
由於是Map,能夠裝多個字段,但只能裝一條記錄。code
若是返回多條記錄,則只取第一條來裝;若是沒有匹配的記錄,會報錯。blog
String sql="select * from student_tb"; SqlRowSet rowSet=jdbcTemplate.queryForRowSet(sql); //遍歷結果集 while (rowSet.next()){ // 參數指定列名,能夠用String類型的字段名,也能夠用int型的值(該字段在結果集中的第幾列,從1開始) // int id = rowSet.getInt(1); int id = rowSet.getInt("id"); String name = rowSet.getString("name"); //...... }
bean:接口
public class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
使用:
String sql="select * from student_tb"; RowMapper<Student> rowMapper=new BeanPropertyRowMapper<>(Student.class); List<Student> list=jdbcTemplate.query(sql,rowMapper); System.out.println(list);
RowMapper是接口,BeanPropertyRowMapper是spring提供的惟一的實現類。
query()只能將結果集的記錄映射爲Bean類型的List,不能映射爲基本類型的List。
映射時會自動將結果集中的字段賦給同名的成員變量,因此要求Bean的成員變量名要與結果集的字段名相同,很死板。
若是結果集中沒有同名的字段,該成員變量就不會被映射(值是JVM賦的初始值)。
映射時是調用setter方法給Bean的成員變量賦值,因此Bean要提供setter方法。
在Spring中儘可能不要使用new來建立Bean的實例,上面的RowMapper實例能夠這樣建立:
<bean name="beanPropertyRowMapper" class="org.springframework.jdbc.core.BeanPropertyRowMapper"> <!-- value指定目標類型 --> <property name="mappedClass" value="com.chy.model.Student" /> </bean>
RowMapper<Student> rowMapper = applicationContext.getBean("beanPropertyRowMapper",BeanPropertyRowMapper.class);