Spring JdbcTemplate配置实现CRUD


回顾:
JdbcTemplate实现CRUD操作


Spring配置JdbcTemplate的两种方式

  1. 在dao中定义JdbcTemplate的方式:可用xml配置也可以注解配置
  2. dao继承JdbcDaoSupport的方式:只能用XML配置,注解不了。

在dao中定义JdbcTemplate的方式的方式,在持久层每个实现类中要重复写注入JdbcTemplate的代码。而dao继承JdbcDaoSupport的方式,JdbcDaoSupport类已经提供了set注入的方法,就可以不用写注入JdbcTemplate的set方法了。
在这里插入图片描述


(一).在dao中定义JdbcTemplate的方式

1.xml配置实现

在这里插入图片描述

引入依赖

    <!--Spring包的依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

        <!--Spring对JDBC数据访问进行封装的包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

        <!--声明式事务所需包
        为JDBC、Hibernate、JDO、JPA、Beans等提供的一致的声明式和编程式事务管理支持-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
        <!--数据库驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

		<!--这里使用spring内置数据源,不用C3P0或者Druid
			spring内置数据源在spring-jdbc-5.0.2.REEASE.jar包,已引入
		-->

        <!--测试包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

    </dependencies>

用户持久层接口与实现类

//用户持久层接口
public interface UserDao {
    //增加数据
    void add(User user);

    //根据id查询用户
    User getById(Integer id);
}

//用户持久层接口实现类
public class UserDaoImpl implements UserDao {

    private JdbcTemplate jdbcTemplate;
	//类中提供需要注入成员的set方法
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void add(User user) {
            jdbcTemplate.update("insert into user(id,username,birthday,sex,address) values (?,?,?,?,?)", user.getId(),user.getUsername(),user.getBirthday(),user.getSex(),user.getAddress());
    }

    public User getById(Integer id) {
        return jdbcTemplate.queryForObject("select * from user where id=?", new BeanPropertyRowMapper<User>(User.class), id);

    }
}

用户业务层接口与实现类

//用户业务层接口
public interface UserService {
   //增加数据
   void add(User user);
   //根据id查询用户
   User getById(Integer id);
}

//用户业务层接口实现类
public class UserServiceImpl implements UserService {
    private UserDao userDao;
    //提供set注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    
    public void add(User user) {
        userDao.add(user);
    }
    
    public User getById(Integer id) {
        User user = userDao.getById(id);
        return user;
    }
}

Spring配置文件中配置

Spring配置文件中配置加载配置文件的三种方式

将数据库连接的信息配置到属性配置文件中

  • jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/spring
uname=root
pwd=root
①创建Bean对象加载解析配置文件
  • Spring配置文件
        <!--配置UserServiceImpl  让spring创建对象,并存入SpringIOC容器中,给SpringIOC容器管理-->
        <bean id="userService" class="com.mycode.service.impl.UserServiceImpl">
            <!-- 通过配置文件给bean中的属性传值:set注入-->
            <property name="userDao" ref="userDao"></property>
        </bean>

        <bean id="userDao" class="com.mycode.dao.impl.UserDaoImpl">
            <!--set注入-->
            <property name="jdbcTemplate" ref="jdbcTemplate"></property>
        </bean>

        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!--set注入-->
            <property name="dataSource" ref="dataSource"></property>
        </bean>

        <!--【 创建Bean对象加载解析配置文件 】-->
         <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <!--指定要加载的配置配置文件-->
            <property name="location" value="classpath:jdbc.properties" />
         </bean>

        <!--配置spring内置数据源,如使用C3P0或者Druid则配置对应数据源   引入外部属性配置文件后,才能用${}-->
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <!--set注入-->
            <property name="driverClassName" value="${driver}"></property>
            <property name="url" value="${url}"></property>
            <property name="username" value="${uname}"></property>
            <property name="password" value="${pwd}"></property>
        </bean>
②配置文件解析器
  • Spring配置文件
        <!--配置UserServiceImpl  让spring创建对象,并存入SpringIOC容器中,给SpringIOC容器管理-->
        <bean id="userService" class="com.mycode.service.impl.UserServiceImpl">
            <!-- 通过配置文件给bean中的属性传值:set注入-->
            <property name="userDao" ref="userDao"></property>
        </bean>

        <bean id="userDao" class="com.mycode.dao.impl.UserDaoImpl">
            <!--set注入-->
            <property name="jdbcTemplate" ref="jdbcTemplate"></property>
        </bean>

        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!--set注入-->
            <property name="dataSource" ref="dataSource"></property>
        </bean>

        <!--【配置文件解析器】 如果是多个文件,用逗号隔开。
            ①注意: (弊端)如果配置了多个解析器,只能识别第一个解析器的数据。
            所以多个配置属性配置文件的情况下可与  <context:property-override location="jdbc_config.properties" />  搭配使用

           ② 与<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
                    <property name="location" value="classpath:jdbc.properties" />
               </bean> 作用相同
        -->
         <context:property-placeholder location="classpath:jdbc.properties" />

        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
             <property name="driverClassName" value="${driver}"></property>
             <property name="url" value="${url}"></property>
             <property name="username" value="${uname}"></property>
             <property name="password" value="${pwd}"></property>
        </bean>
③加载解析配置文件,并将配置文件数据自动注入到指定的Bean中

多个配置属性配置文件的情况下可与配置文件解析器方式搭配使用

在类路径下添加一个属性配置文件jdbc_config.properties
在这里插入图片描述

  • jdbc_config.properties
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://127.0.0.1:3306/spring
dataSource.username=root
dataSource.password=root
#前缀 dataSource 是指定Bean的id,给该Bean注入指定属性信息
  • Spring配置文件
        <!--配置UserServiceImpl  让spring创建对象,并存入SpringIOC容器中,给SpringIOC容器管理-->
        <bean id="userService" class="com.mycode.service.impl.UserServiceImpl">
            <!-- 通过配置文件给bean中的属性传值:set注入-->
            <property name="userDao" ref="userDao"></property>
        </bean>

        <bean id="userDao" class="com.mycode.dao.impl.UserDaoImpl">
            <!--set注入-->
            <property name="jdbcTemplate" ref="jdbcTemplate"></property>
        </bean>



     <!--【配置文件解析器】,与  <context:property-override location="jdbc_config.properties" />搭配使用 供JdbcTemplate选择引用-->
        <context:property-placeholder location="classpath:jdbc.properties" />
        <!--配置数据源-->
        <bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${driver}"></property>
            <property name="url" value="${url}"></property>
            <property name="username" value="${uname}"></property>
            <property name="password" value="${pwd}"></property>
        </bean>


    <!--【解析配置文件,并自动注入数据到指定Bean中】    dataSource-->
      <context:property-override location="jdbc_config.properties" />
        <!--配置数据源
			属性配置文件(jdbc_config.properties)中前缀 dataSource 是指定Bean的id,给该Bean注入指定属性信息。
		-->
      <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" />


    <!--配置JdbcTemplate-->
     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--set注入数据源  引用dataSource1数据源-->
        <property name="dataSource" ref="dataSource1"></property>
     </bean>

使用Spring测试框架 测试

  • SpringJdbcTemplateTest
@RunWith(SpringJUnit4ClassRunner.class)////1.使用@RunWith注解替换原有运行器
@ContextConfiguration(locations= {"classpath:beans.xml"})//2.使用@ContextConfiguration指定spring配置文件的位置
public class SpringJdbcTemplateTest {
    @Autowired//3.使用@Autowired给测试类中的变量注入数据
    private UserService userService;
    
    @Test
    public void getByIdTest(){
        User user = userService.getById(3);
        System.out.println(user);
    }
}

在这里插入图片描述


2.注解配置实现

参考: Spring纯注解配置,使用配置类,替换xml配置

(二).dao继承JdbcDaoSupport的方式,避免重复编码

  • 持久层接口实现类继承JdbcDaoSupport
public class UserDaoImpl extends JdbcDaoSupport implements UserDao {
    public void add(User user) {
            getJdbcTemplate().update("insert into user(id,username,birthday,sex,address) values (?,?,?,?,?)", user.getId(),user.getUsername(),user.getBirthday(),user.getSex(),user.getAddress());
    }

    public User getById(Integer id) {
        return getJdbcTemplate().queryForObject("select * from user where id=?", new BeanPropertyRowMapper<User>(User.class), id);
    }
}

JdbcDaoSupport 类
在这里插入图片描述

  • Spring配置文件
      <!--配置UserServiceImpl  让spring创建对象,并存入SpringIOC容器中,给SpringIOC容器管理-->
    <bean id="userService" class="com.mycode.service.impl.UserServiceImpl">
         <!--通过配置文件给bean中的属性传值:set注入-->
        <property name="userDao" ref="userDao"></property>
    </bean>

    <!--解析配置文件,并自动注入数据到指定Bean(数据源)中   -->
      <context:property-override location="jdbc_config.properties" />
        <!--配置数据源-->
      <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" />

    <!--配置UserDaoImpl  继承JdbcDaoSupport的方式这里需要注入数据源 -->
    <bean id="userDao" class="com.mycode.dao.impl.UserDaoImpl">
           <!--set注入数据源-->
        <property name="dataSource" ref="dataSource"></property>
    </bean>

发布了62 篇原创文章 · 获赞 27 · 访问量 6708
App 阅读领勋章
微信扫码 下载APP
阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 黑客帝国 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览