JdbcTemplate的使用
JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。
JdbcTemplate的作用:它就是用于和数据库交互的,实现对表的CRUD操作。
execute:可以执行所有SQL语句,一般用于执行DDL语句。update:用于执行INSERT、UPDATE、DELETE等DML语句。queryXxx:用于DQL数据查询语句。
案例代码
//jar包坐标 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4</version> </dependency> </dependencies>
//Jdbc实现代码
public class JdbcTemplate1 { public static void main(String[] args) { //准备数据源:Spring的内置数据源 DriverManagerDataSource ds=new DriverManagerDataSource(); ds.setDriverClassName("oracle.jdbc.driver.OracleDriver"); ds.setUrl("jdbc:oracle:thin:@localhost:1521:ORCL"); ds.setUsername("..."); ds.setPassword("123456"); //创建JdbcTemplate对象 JdbcTemplate jd=new JdbcTemplate(); //给jd设置数据源 jd.setDataSource(ds); //执行操作 jd.execute("insert into user2(id,username,age,sex,address) VALUES(1,'掌声',20,'男','address')"); } }
JdbcTempalte在Spring的ioc中使用
1、配置bean.xml文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property> <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"></property> <property name="username" value="..."></property> <property name="password" value="123456"></property> </bean> </beans>
//执行插入操作
public class JdbcTemplate1 { public static void main(String[] args) { ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml"); //创建JdbcTemplate对象 JdbcTemplate jd=ac.getBean("jdbcTemplate",JdbcTemplate.class); //执行操作 jd.execute("insert into user2(id,username,age,sex,address) VALUES(9,'掌声iiii',20,'男','address')"); } }
JdbcTempalte的CRUD操作
/** * JdbcTemplate的CRUD操作 */
public class JdbcTemplate1 {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
//创建JdbcTemplate对象
JdbcTemplate jd=ac.getBean("jdbcTemplate",JdbcTemplate.class);
//保存
// jd.update("insert into user2(id,username,age,sex,address) VALUES(5,'掌声',20,'男','address')");
//更新
// jd.update("update User2 set username=? where id=?","test",5);
//删除
// jd.update("delete from User2 where id=?",5);
// //查询所有 BeanPropertyRowMapper和AccountRowMapper是由区别的,BeanPropertyRowMapper不用在定义Account的封装
// List<User> list= jd.query("SELECT * from User2 where id=?",new UserRowMapper(),"1");
// List<User> list= jd.query("SELECT * from User2 where id=?",new BeanPropertyRowMapper<User>(User.class),"1");
// for (User user : list) {
// System.out.println(user);
// }
//查询一个
// List<User> accounts = jd.query("select * from user2 where id = ?",new BeanPropertyRowMapper<User>(User.class),9);
// System.out.println(accounts.isEmpty()?"没有内容":accounts.get(0));
int num= jd.queryForObject("select count(*) from user2 where id = ?",int.class,1);
System.out.println(num+"");
}
}
/**
* 定义Account的封装策略
*/
class UserRowMapper implements RowMapper<User> {
/**
* 把结果集中的数据封装到Account中,然后由spring把每个account加到集合中
* @param resultSet
* @param i
* @return
* @throws SQLException
*/
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user=new User();
user.setId(resultSet.getInt("id"));
user.setAge(resultSet.getInt("age"));
user.setAddress(resultSet.getString("address"));
user.setSex(resultSet.getString("sex"));
user.setBirthday(resultSet.getDate("birthday"));
return user;
}
2、使用注解来创建Dao
//配置xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置账户的持久层-->
<bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl">
<!--<property name="jdbcTemplate" ref="jdbcTemplate"></property>-->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置JdbcTemplate
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>-->
<!-- 配置数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/eesy"></property>
<property name="username" value="root"></property>
<property name="password" value="1234"></property>
</bean>
</beans>
JdbcTempalte继承JdbcDaoSupport来读取数据,使用配置XML

JdbcTempalte,自己写JdbcDaoSupport的连接类来读取数据,使用注解anno
/**
* 此类用于抽取dao中的重复代码
public class JdbcDaoSupport {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setDataSource(DataSource dataSource) {
if(jdbcTemplate == null){
jdbcTemplate = createJdbcTemplate(dataSource);
}
}
private JdbcTemplate createJdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
}

来源:黑马教程

浙公网安备 33010602011771号