引言:
Spring——JDBCTemplate
JDBC Template Spring为了简化JDBC的持久化操作,提供了JDBC Template
1 2 3 4 5 //原本操作数据库的流程 我们的代码 -> JDBC API -> JDBC驱动 -> MySql //现在 我们的代码 -> JDBC Template -> JDBC API -> JDBC驱动 -> MySql
Maven配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <dependency > <groupId > mysql</groupId > <artifactId > mysql-connector-java</artifactId > <version > 5.1.44</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-jdbc</artifactId > <version > 4.2.4.RELEASE</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-tx</artifactId > <version > 4.2.4.RELEASE</version > </dependency >
配置SpringConfig
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns ="http://www.springframework.org/schema/beans" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns:context ="http://www.springframework.org/schema/context" xmlns:aop ="http://www.springframework.org/schema/aop" xmlns:tx ="http://www.springframework.org/schema/tx" xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" > <bean id ="dataSource" class ="org.springframework.jdbc.datasource.DriverManagerDataSource" > <property name ="driverClassName" value ="com.mysql.jdbc.Driver" /> <property name ="url" value ="jdbc:mysql://localhost:3306/selection_course?useUnicode=true& characterEncoding=utf-8" /> <property name ="username" value ="root" /> <property name ="password" value ="root" /> </bean > <bean id ="jdbcTemplate" class ="org.springframework.jdbc.core.JdbcTemplate" > <property name ="dataSource" ref ="dataSource" > </property > </bean > </beans >
增删改相关方法 update方法(对数据进行增删改) 1 2 3 4 int update (String sql, Obejct[] args) int update (String sql, Obejct... args)
例如以下的操作
1 2 3 4 String sql1 = "insert into student(name,sex) values(?,?)" ;String sql2 = "update student set sex=? where id=?" ;jdbcTemplate.update(sql1,new Object []{"李白" ,"男" }); jdbcTemplate.update(sql2,"女" ,1 );
batchUpadate方法(批量增删改操作) 1 2 3 4 int [] batchUpdate(String[] sql)int [] batchUpdate(String sql,List<Obejct[]> args)
例如以下操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @Test public void testBatchUpdate1 () { String[] sql = { "insert into student(name,sex) values('杜哺','男')" , "insert into student(name,sex) values('孟浩然','男')" , "insert into student(name,sex) values('李清照','女')" }; jdbcTemplate.batchUpdate(sql); } @Test public void testBatchUpdate2 () { String sql = "insert into selection(student,course) values(?,?)" ; List<Object[]> list = new ArrayList <>(); list.add(new Object []{13 ,1001 }); list.add(new Object []{15 ,1002 }); list.add(new Object []{14 ,1003 }); jdbcTemplate.batchUpdate(sql,list); }
查询相关方法 简单的查询 查询结果只有一个字段,例如查询个数,查询所有的男生名字等等
获取一个1 2 3 4 T queryForObeject (String sql, Class<T> type) T queryForObeject (String sql, Object[] args,Class<T> type) T queryForObeject (String sql, Class<T> type, Object... arg)
例如以下操作1 2 3 String sql = "select count(*) from student" ;int count = jdbcTemplate.queryForObject(sql, Integer.class);System.out.println(count);
1 2 3 List<T> queryForList (String sql, Class<T> type) List<T> queryForList (String sql, Obejct[] args,Class<T> type) List<T> queryForList (String sql, Class<T> type, Object... arg)
例如下面的操作
1 2 3 String sql = "select name from student where sex=?" ;List<String> names = jdbcTemplate.queryForList(sql, String.class,"女" ); System.out.println(names);
复杂的查询 复杂的查询会封装为Map
类型
获取一个1 2 3 Map queryForMap (String sql) Map queryForMap (String sql, Object[] args) Map queryForMap (String sql, Object... arg)
例如下面的操作1 2 3 String sql = "select * from student where id=?" ;Map<String, Object> stu = jdbcTemplate.queryForMap(sql, 13 ); System.out.println(stu);
1 2 3 List<Map<String, Object>> queryForList (String sql) List<Map<String, Object>> queryForList (String sql, Object[] args) List<Map<String, Object>> queryForList (String sql, Object... arg)
看完会发现,只要我们不指定返回的类型,他就是一个查询多个字段获取多个字段的方法
例如下面操作
1 2 3 String sql = "select * from student" ;List<Map<String, Object>> stus = jdbcTemplate.queryForList(sql); System.out.println(stus);
查询复杂对象(并封装为实体对象) 方法主要有:
RowMapper
接口可以实现封装为实体对象 ,例如下面这个操作
1 2 3 4 5 6 7 8 9 10 11 12 13 String sql = "select * from student" ;List<Student> student = jdbcTemplate.query(sql, new RowMapper <Student>() { @Override public Student mapRow (ResultSet rs, int rowNum) throws SQLException { Student stu = new Student (); stu.setId(rs.getInt("id" )); stu.setName(rs.getString("name" )); stu.setSex(rs.getString("sex" )); stu.setBorn(rs.getDate("born" )); return stu; } }); System.out.println(student);