SSH与SSM学习之Spring18——Spring整合JDBC

SSH与SSM学习之Spring18——Spring整合JDBC

一、说明

spring就是一个容器,我们整合JDBC就是添加相应的对象。

spring提供了很多模板整合Dao技术。如下图

这里写图片描述

spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术.这个类是

JdbcTemplate

JdbcTemplate 与DBUtils中的QueryRunner非常相似.


二、导包

2.1 Spring核心包

spring-beans

spring-context

spring-core

spring-expression

2.2 日志包

commons-logging

log4j

2.3 测试包

junit4

hamcrest

spring-test

2.4 Spring AOP包

spring-aop

spring-aspects

org.aspectj.weaver

org.aopalliance

2.5 c3p0连接池 和 JDBC驱动

com.mchange.v2.c3p0

mysql-connector

2.6 Spring中jdbc和事务包

spring-jdbc

spring-tx

三、创建 User 数据类


package com.qwm.spring3.bean;

/**
 * @author:qiwenming
 * @date:2017/10/26 0026   21:47
 * @description:
 */
public class User {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

四、创建测试用的表 t_user

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

这里写图片描述


五、纯粹的使用 JdbcTemplate 操作数据库

“`java
/**
* 不使用配置文件,直接调用JdbcTemplate来完成
* @throws Exception
*/
@Test
public void test1() throws Exception{
//1.准备连接池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl(“jdbc:mysql:///stest”);
dataSource.setDriverClass(“com.mysql.jdbc.Driver”);
dataSource.setUser(“root”);
dataSource.setPassword(“xm123456”);

    //2.创建JDBC模板
    JdbcTemplate jdbcTemplate = new JdbcTemplate();
    jdbcTemplate.setDataSource(dataSource);

    //3.书写sql并且执行
    String sql = "insert into t_user values(null,'wiming')";
    jdbcTemplate.execute(sql);
}

““

结果是

这里写图片描述


6.2 UserDaoImpl

这个类实现了 UserDao 接口。在这个类中,我们创建一个 JdbcTemplate,

用于操作数据库,我们使用配置文件配置注入。

package com.qwm.spring3.dao;

import com.qwm.spring3.bean.User;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

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

/**
 * @author:qiwenming
 * @date:2017/10/26 0026   21:49
 * @description:
 * 使用JDBC模板实现增删改查
 */
public class UserDaoImpl implements UserDao{
    private JdbcTemplate jt;

    public JdbcTemplate getJt() {
        return jt;
    }

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

    @Override
    public void save(User u) {
        String sql = "insert into t_user values(null,?)";
        jt.update(sql,u.getName());
    }

    @Override
    public void delete(Integer id) {
        String sql = "delete from t_user where id=?";
        jt.update(sql,id);
    }

    @Override
    public void update(User u) {
        String sql = "update t_user set name=? where id=?";
        jt.update(sql,u.getName(),u.getId());
    }

    @Override
    public User getById(Integer id) {
        String sql = "select * from t_user where id=?";
        return jt.queryForObject(sql, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet resultSet, int index) throws SQLException {
                User u = new User();
                u.setId(resultSet.getInt("id"));
                u.setName(resultSet.getString("user"));
                return u;
            }
        }, id);
    }

    @Override
    public int getTotalCount() {
        String sql = "select count(*) from t_user";
        int count = jt.queryForObject(sql,Integer.class);
        return count;
    }

    @Override
    public List<User> getAll() {
        String sql = "select * from t_user";
        return jt.query(sql, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet resultSet, int i) throws SQLException {
                User user = new User();
                user.setId( resultSet.getInt("id") );
                user.setName( resultSet.getString("name") );
                return user;
            }
        });
    }
}

七、applicationContext.xml Spring配置

UserDaoImpl、JdbcTemplate 和 DataSource 三者的依赖关系如下

通过上面的依赖关系,我们可以很轻松的配置中的顺序了。

1.配置 DataSource

2.配置 JdbcTemplate,把配置好的 DataSource 注入到 JdbcTemplate中

3.配置 UserDaoImpl

<?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.xsd">

    <!--1. 将连接池放入到spring容器中-->
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="jdbc:mysql:///stest"/>
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="user" value="root"/>
        <property name="password" value="xm123456"/>
    </bean>

    <!--2. 将JdbcTemplate放入到spring容器中-->
    <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--3. 将UserDaoImpl放入到容器中-->
    <bean name="userDao" class="com.qwm.spring3.dao.UserDaoImpl">
        <property name="jt" ref="jdbcTemplate"/>
    </bean>

</beans>

八、测试

七、applicationContext.xml Spring配置

UserDaoImpl、JdbcTemplate 和 DataSource 三者的依赖关系如下

这里写图片描述

通过上面的依赖关系,我们可以很轻松的配置中的顺序了。

1.配置 DataSource

2.配置 JdbcTemplate,把配置好的 DataSource 注入到 JdbcTemplate中

3.配置 UserDaoImpl

[User{id=1, name='wiming'}, User{id=2, name='杞文明'}]

九、UserDao的实现类继承 JdbcDaoSupport

继承 JdbcDaoSupport 我们可以不用我们自己注入 JdbcTemplate。JdbcDaoSupport 中已经帮我们好了

/**
 * @author:qiwenming
 * @date:2017/10/26 0026   21:23
 * @description:
 * jdbc测试
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:com/qwm/spring3/applicationContext.xml")
public class Demo {

    @Resource(name = "userDao")
    private UserDao ud;
    @Test
    public void test2(){
        User user = new User();
        user.setName("杞文明");
        ud.save(user);
    }

    @Test
    public void test3(){
        List<User> list = ud.getAll();
        System.out.println(list);
    }

}

test2的测试结果

这里写图片描述

test3的测试结果

package com.qwm.spring3.dao;

import com.qwm.spring3.bean.User;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

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

/**
 * @author:qiwenming
 * @date:2017/10/26 0026   21:49
 * @description:
 * 使用JDBC模板实现增删改查
 */
public class UserDaoImpl2 extends JdbcDaoSupport implements UserDao{

    @Override
    public void save(User u) {
        String sql = "insert into t_user values(null,?)";
        super.getJdbcTemplate().update(sql,u.getName());
    }

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

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

    @Override
    public User getById(Integer id) {
        String sql = "select * from t_user where id=?";
        return super.getJdbcTemplate().queryForObject(sql, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet resultSet, int index) throws SQLException {
                User u = new User();
                u.setId(resultSet.getInt("id"));
                u.setName(resultSet.getString("user"));
                return u;
            }
        }, id);
    }

    @Override
    public int getTotalCount() {
        String sql = "select count(*) from t_user";
        int count = super.getJdbcTemplate().queryForObject(sql,Integer.class);
        return count;
    }

    @Override
    public List<User> getAll() {
        String sql = "select * from t_user";
        return super.getJdbcTemplate().query(sql, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet resultSet, int i) throws SQLException {
                User user = new User();
                user.setId( resultSet.getInt("id") );
                user.setName( resultSet.getString("name") );
                return user;
            }
        });
    }
}

9.2 依赖关系

通过上面的步骤我们发现,和之前相比,我们少了配置 JdbcTemplate 这一步。


9.3 applicationContext.xml

<?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.xsd">

    <!--1. 将连接池放入到spring容器中-->
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="jdbc:mysql:///stest"/>
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="user" value="root"/>
        <property name="password" value="xm123456"/>
    </bean>

    <!--2.继承了 JdbcDaoSupport 类的 Dao 的配置,我们可以不用配置配置 JdbcTemplate-->
    <bean name="userDao2" class="com.qwm.spring3.dao.UserDaoImpl2">
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>

9.2 依赖关系

这里写图片描述

通过上面的步骤我们发现,和之前相比,我们少了配置 JdbcTemplate 这一步。


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:com/qwm/spring3/applicationContext.xml")
public class Demo {
    //----------------UserDaoImpl的调用--------------
    @Resource(name = "userDao2")
    private UserDao ud2;

    @Test
    public void test4(){
        User user = new User();
        user.setName("mingming");
        ud2.save(user);
    }

    @Test
    public void test5(){
        List<User> list = ud2.getAll();
        System.out.println(list);
    }
 }

test4的测试结果

test5的测试结果

[User{id=1, name='wiming'}, User{id=2, name='杞文明'}, User{id=3, name='mingming'}]

十、读取外部的Properties配置

由于我们数据库的配置可能会随时修改,我们一个把它放到 properties 中,然后在配置文件中来读取。

创建一个配置文件 db.properties

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:com/qwm/spring3/applicationContext.xml")
public class Demo {
    //----------------UserDaoImpl的调用--------------
    @Resource(name = "userDao2")
    private UserDao ud2;

    @Test
    public void test4(){
        User user = new User();
        user.setName("mingming");
        ud2.save(user);
    }

    @Test
    public void test5(){
        List<User> list = ud2.getAll();
        System.out.println(list);
    }
 }

test4的测试结果

这里写图片描述

test5的测试结果

    <!-- 指定spring读取db.properties配置 -->
    <context:property-placeholder location="classpath:com/qwm/spring3/db.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.xsd">

    <!-- 指定spring读取db.properties配置 -->
    <context:property-placeholder location="classpath:com/qwm/spring3/db.properties"/>

    <!-- 1.将连接池放入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>

    <!--2.继承了 JdbcDaoSupport 类的 Dao 的配置,我们可以不用配置配置 JdbcTemplate-->
    <bean name="userDao2" class="com.qwm.spring3.dao.UserDaoImpl2">
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>

十一、源码下载

https://github.com/wimingxxx/spring01/tree/master/src/com/qwm/spring3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值