Spring整合JDBC

1.Spring对JDBC的支持

(1)传统JDBC代码的弊端

代码泛滥,有很多try … catch语句,导致可读性和可维护性下降。
Spring 的Jdbc Template可以解决这些问题。

(2)Spring对jdbc异常的处理

  • Spring采用某种特定的异常如SQLException,统一转换成自己的异常类型,这些异常以DataAccessException作为父类,他们封装了原始的异常对象,不会出现丢失原始错误信息的情况。

  • 并且DataAccessException是继承自RuntimeException的,是非检查异常,故不需要在代码中进行处理,我们可以使用拦截器在最外层控制层进行统一的处理。

2.Spring配置数据源

(1)方式选择(dbcp/c3p0)

这里选用dbcp
dbcp配置时一些常见的属性
BasicDataSource提供了close()方法关闭数据源,以便Spring容器关闭时,数据源能够正常关闭,只需配置**destroy-method=”close”**属性。除以上必须的数据源属性外,还有一些常用的属性:
maxIdle:最大等待连接中的数量,设置为0时,表示没有限制;

(2)配置步骤

导入包
引用配置文件
配置数据源

<!--引用jdbc.properties配置文件 -->
    <util:properties id="jdbc" location="classpath:jdbc.properties" />
<!--配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="url"  value="#{jdbc.url}"/>
        <property name="driverClassName" value="#{jdbc.driver}" />
        <property name="username" value="#{jdbc.username}" />
        <property name="password" value="#{jdbc.password}" />
        <property name="maxIdle" value="#{jdbc.maxIdle}" />
    </bean>

3.JdbcTemplate操作数据库

(1)查询信息集合

UserDao.java

public List<User> getAll(){
    String sql = "select * from user";
    return jt.query(sql, userMapper);
}

IndexController.java

@RequestMapping("/getAll")
public String getAll(){
    System.out.println("---------------------");
    List<User> uList = userDao.getAll();
    for (User u:uList){
        System.out.println(u);
    }
    return "index";
}

(2)查询一条信息

UserDao.java

public  User getOne(int id,String name){
    String sql = "select * from user where id=? and name=?";
    Object[] params = {id,name};
    return jt.queryForObject(sql,params,userMapper);
}

IndexController.java

@RequestMapping("/getOne")
public  String getOne(int id,String name){
    System.out.println("-------------------------");
    System.out.println(userDao.getOne(id, name));
    return  "index";
}

(3)增删改操作

UserDao.java

/**
  * 通过id 修改用户信息
  */
public int updateUser(User u){
    String sql = "update user set name=? , info=? where id=?";
    Object[] params = {u.getName(),u.getInfo(),u.getId()};
    return jt.update(sql,params);
}

IndexController.java

@RequestMapping("/update")
public String updateUser(String name,String info,int id){
    System.out.println("---------------------");
    if (userDao.updateUser(new User(id,name,0,null,info))>0){
       System.out.println("操作成功!");
   }else{
       System.out.println("操作失败!");
   }
    return "index";
}

index.jsp

<h1>欢迎来到首页</h1>
<h3>
  <a href="/index/getAll.do">查询所有人</a>
</h3>
  <h3>
      <a href="/index/getOne.do?id=1002&name=Bob">查询一位用户</a>
  </h3>
  <h3>
      <a href="/index/update.do?id=1003&name=David&info=此人有点嚣张">修改一位用户</a>
 </h3>

UserMapper.java

@Component
public class UserMapper implements RowMapper<User> {
    @Override
    public User mapRow(ResultSet rs, int i) throws SQLException {
        //i为记录索引值
        User user = new User();
            user.setId(rs.getInt("id"));
            user.setName(rs.getString("name"));
            user.setAge(rs.getInt("age"));
            user.setPhone(rs.getString("phone"));
            user.setInfo(rs.getString("info"));
        System.out.println("i="+i);
        return user;
    }
}

applicationContext.xml

<!--引用jdbc.properties配置文件 -->
    <util:properties id="jdbc" location="classpath:jdbc.properties" />
<!--配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="url"  value="#{jdbc.url}"/>
        <property name="driverClassName" value="#{jdbc.driver}" />
        <property name="username" value="#{jdbc.username}" />
        <property name="password" value="#{jdbc.password}" />
        <property name="maxIdle" value="#{jdbc.maxIdle}" />
    </bean>
<!--配置JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

jdbc.properties

url=jdbc:mysql://localhost:3306/jw_chapter6
username=root
password=123456
driver=com.mysql.jdbc.Driver
maxIdle=100

数据库创建表,添加记录的SQL语句:

USE jw_chapter6;

DROP TABLE IF EXISTS USER;

CREATE TABLE IF NOT EXISTS USER(
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),
	age INT(3),
	phone CHAR(11),
	info VARCHAR(100)
);

INSERT INTO USER VALUES
(1001,'Alice',18,'19919061639','此人很懒,什么都没留下'),
(1002,'Bob',20,'13581459925','哈哈哈'),
(1003,'Clover',21,'13616391906','呵呵');

SELECT * FROM USER;

没有执行update操作前,后台数据库查询结果:
在这里插入图片描述
执行update操作后,后台数据库查询结果
在这里插入图片描述
控制台输出结果:
查询所有
在这里插入图片描述
查询一条
在这里插入图片描述
修改信息
在这里插入图片描述


jdbcTemplate的常见方法介绍:

1、queryForObject() 查询单个数据
2、query() 查询多个数据,返回一个list
3、update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
4、execute方法: 可以用于执行任何SQL语句,一般用于执行DDL语句

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值