JdbcTemplate的使用

  JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。

  JdbcTemplate的作用:它就是用于和数据库交互的,实现对表的CRUD操作。

  1. execute:可以执行所有SQL语句,一般用于执行DDL语句。
  2. update:用于执行INSERTUPDATEDELETE等DML语句。
  3. 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);
 }
}

  

 

 

来源:黑马教程

 

posted @ 2020-10-19 15:53  西红柿会魔法  阅读(356)  评论(0)    收藏  举报