Spring整合JDBC模板,完成xml文件、properties文件配置(实例代码)

步骤1:导包

 

spring需要的4核心2依赖、spring-test、spring-aop

还需要c3p0,JDBC驱动、spring-jdbc、spring-tx

 

步骤2:准备数据库 

 

 

步骤3:准备数据库存储对象

 

package com.spring_day3.jtDemo;

//java bean
public class User {
    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;
    }
}

 

步骤4:准备Dao类

 

package com.spring_day3.jtDemo;

import java.util.List;

public interface UserDao {

    //增
    void save(User user);
    //删
    void delete(int id);
    //改
    void update(User user);
    //查
    User getById(int id);
    int getTotalCount();
    List<User> getAll();
}

 

接下来的部分,分为两种写法好理解JDBC的工作

 

第一种不继承JdbcDaoSupport,依赖关系如图:由连接池注入JDBC模板,然后将JDBC模板注入Dao类

  

步骤4.1.1:准备JDBC模板的增删改查

package com.spring_day3.jtDemo;

import java.sql.ResultSet;

import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import javax.annotation.Resource;

//JDBC模板的增删改查

public class UserDaoImpl implements UserDao {


    //注入没有成功 检查 xml
    private JdbcTemplate jt;

    public JdbcTemplate getJt() {
        return jt;
    }
    public void setJt(JdbcTemplate jt) {
        this.jt = jt;
    }

    @Override
    public void save(User user) {
        String sql = "insert into springdemo_user values(null,?,?)";
        //sql语句设置?即空值,通过update方法携带参数传值
        jt.update(sql, user.getName(), user.getAge());
    }
    @Override
    public void delete(int id) {
        String sql = "delete * from springdemo_user where id = ?";
        jt.update(sql, id);
    }
    @Override
    public void update(User user) {
        String sql = "update springdemo_user set name = ? where id = ?";
        jt.update(sql, user.getName(), user.getId());

    }
    @Override
    public User getById(int id) {
        String sql = "select * from springdemo_user where id = ?";
        return jt.queryForObject(sql, new RowMapper<User>() {

            //查询有返回值才会进入该内部类
            @Override
            public User mapRow(ResultSet rs, int arg1) throws SQLException {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                return user;
            }
        }, id);
    }
    @Override
    public int getTotalCount() {
        String sql = "select count(*) from springdemo_user";
        //告诉jt将返回结果封装到Integer的类对象中
        Integer count = jt.queryForObject(sql, Integer.class);
        return count;
    }
    @Override
    public List<User> getAll() {
        String sql = "select * from springdemo_user";
        List<User> list = jt.query(sql, new RowMapper<User>() {

            //查询有返回值才会进入该内部类
            @Override
            public User mapRow(ResultSet rs, int arg1) throws SQLException {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                return user;
            }
        });
        return list;
    }
}

 

步骤4.1.2:配置applicationContext.xml文件、properties文件

完成嵌套依赖注入。

注意:只要是属性最好都要设置setter、getter方法,防止可能需要在xml配置时忘了。我就是忘了设置jdbcTemplate属性始终无法注入。

dataSource属性的值当然也可以直接写在value中,此处为了不写死,另外应用了properties配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
			http://www.springframework.org/schema/context 
			http://www.springframework.org/schema/context/spring-context-4.2.xsd ">

	<!-- 只会扫描包下的注解 -->
    <context:component-scan base-package="com.spring_day3.jtDemo"/>
    <!--只会扫描属性上的注解-->
    <context:annotation-config/>
    <!-- 指定spring读取指定目录的properties配置文件 	-->
  	<context:property-placeholder location="classpath:db.properties"/>
    <!-- 将连接池放入spring容器 -->
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
        <property name="driverClass" value="${jdbc.driverClass}"/>
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--  将JDBCTemplate放入spring容器 -->
    <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 将UserDao放入spring容器 -->
    <bean name="UserDaoImpl" class="com.spring_day3.jtDemo.UserDaoImpl">
        <property name="jt" ref="jdbcTemplate"/>
    </bean>
</beans>

 properties文件采用键值对的形式书写。属性名称前面加上jdbc是为了避免和关键词冲突。(比如user我就觉得到处都是这个词)

jdbc.jdbcUrl=jdbc:mysql:///springdemo
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=root

 

第2种继承JdbcDaoSupport :JDBCDaoSupport中已经创建了JDBC模板,可以在Dao层继承以后直接注入连接池dataSource

步骤4.2.1:准备JDBC模板的增删改查

 

JdbcDaoSupport中已经准备好了JdbcTemplate模板所以不许要我们自己再创建。直接注入就ok了。

和上面对比不相同的地方就是没有JdbcTemplate属性的注入。jt也变成了直接由调用父类的super.getJdbcTemplate()。

package com.spring_day3.jtDemo;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

//JDBC模板的增删改查
public class UserDaoImpl extends JdbcDaoSupport implements UserDao {

    @Override
    public void save(User user) {
        String sql = "insert into springdemo_user values(null,?,?)";
        //sql语句设置?即空值,通过update方法携带参数传值
        super.getJdbcTemplate().update(sql, user.getName(), user.getAge());
    }

    @Override
    public void delete(int id) {
        String sql = "delete * from springdemo_user where id = ?";
        super.getJdbcTemplate().update(sql, id);
    }

    @Override
    public void update(User user) {
        String sql = "update springdemo_user set name = ? where id = ?";
        super.getJdbcTemplate().update(sql, user.getName(), user.getId());

    }

    @Override
    public User getById(int id) {
        String sql = "select * from springdemo_user where id = ?";
        return super.getJdbcTemplate().queryForObject(sql, new RowMapper<User>() {

            //查询有返回值才会进入该内部类
            @Override
            public User mapRow(ResultSet rs, int arg1) throws SQLException {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                return user;
            }
        }, id);
    }

    @Override
    public int getTotalCount() {
        String sql = "select count(*) from springdemo_user";
        //告诉jt将返回结果封装到Integer的类对象中
        Integer count = super.getJdbcTemplate().queryForObject(sql, Integer.class);
        return count;
    }

    @Override
    public List<User> getAll() {
        String sql = "select * from springdemo_user";
        List<User> list = super.getJdbcTemplate().query(sql, new RowMapper<User>() {

            //查询有返回值才会进入该内部类
            @Override
            public User mapRow(ResultSet rs, int arg1) throws SQLException {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                return user;
            }
        });
        return list;
    }
}

 

4.2.2:配置applicationContext.xml文件、properties文件(properties文件就不再贴出来,和上一种一样的

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
				http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
				http://www.springframework.org/schema/context 
				http://www.springframework.org/schema/context/spring-context-4.2.xsd ">

	<!-- 只会扫描包下的注解 -->
    <context:component-scan base-package="com.spring_day3.jtDemo"/>
    <!--只会扫描属性上的注解-->
    <context:annotation-config/>
    <!-- 指定spring读取指定目录的properties配置文件 	-->
  	<context:property-placeholder location="classpath:db.properties"/>
    <!-- 将连接池放入spring容器 -->
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
        <property name="driverClass" value="${jdbc.driverClass}"/>
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!-- 将UserDao放入spring容器 -->
    <bean name="UserDaoImpl" class="com.spring_day3.jtDemo.UserDaoImpl">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

 

最后步骤5:测试demo

 

package com.spring_day3.jtDemo;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

//演示JDBC模板
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:applicationContext.xml")
public class Demo {

    @Resource(name = "UserDaoImpl")
    private UserDao ud;

    @Test
    public void demo1() {  	
        User user = new User();
        user.setName("xuan");
        user.setAge(20);
        ud.save(user);
    }
}

 

结果截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值