spring jdbc mysql_Spring JDBC(Spring的数据库开发)

Spring的JDBC模块负责数据库资源管理和错误处理,大大简化了开发人员对数据库的操作,使得开发人员可以从烦琐的数据库操作中解脱出来,从而将更多的精力投入到编写业务逻辑中。

Spring JdbcTemplate的解析

针对数据库的操作,Spring框架提供了JdbcTemplate 类,该类是Spring框架数据抽象层的基础,其他更高层次的抽象类却是构建于JdbcTemplate 类之上。可以说,JdbcTemplate 类是Spring JDBC的核心类。

JdbcTemplate类的继承关系十分简单。它继承自抽象类JdbcAccessor,同时实现了JdbcOperations接口。JdbcTemplate 类的直接父类是JdbcAccessor,该类为子类提供了一些访问数据库时使用的公共属性,具体如下。

DataSource:其主要功能是获取数据库连接,具体实现时还可以引入对数据库连接的缓冲池和分布事务的支持,它可以作为访问数据库资源的标准接口。

SQLExceptionTranslator:org.springframework.jdbc.support.SQLExceptionTranslator接口负责对SQLException进行转译工作。通过必要的设置或者获取SQLExceptionTranslator中的方法,可以使JdbcTemplate在需要处理SQLException时,委托SQLExceptionTranslator的实现类来完成相关的转译工作。

JdbcOperations接口定义了在JdbcTemplate类中可以使用的操作集合,包括添加、修改、查询和删除等操作。

Spring JDBC的配置

Spring JDBC模块主要由4个包组成,分别是core(核心包)、dataSource(数据包)、object(对象包)和support(支持包)

cff9ae5b3bd95cce0a1501bb35cdc142.png

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

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

在上述代码中定义了3个Bean,分别是 dataSource、jdbcTemplate和需要注入类的Bean。其中 dataSource对应的org. springframework.jdbc datasource.DriverManagerDataSource类用于对数据源进行配置,jdbcTemplate对应的org. springframework jdbc.core.JdbcTemplate类中定义了JdbcTemplate的相关配置。上述代码中data Source的配置就是JDBC连接数据库时所需的4个属性

表4.2中的4个属性,需要根据数据库类型或者机器配置的不同设置相应的属性值。例如,如果数据库类型不同,需要更改驱动名称;如果数据库不在本地,则需要将地址中的 localhost替换成相应的主机IP;如果修改过 MySQL数据库的端口号(默认为3306),则需要加上修改后的端口号,如果未修改,则端口号可以省略;同时连接数据库的用户名和密码需要与数据库创建时设置的用户名和密码保持一致,本示例中Spring数据库的用户名和密码都是root。

1ffdbdb527ee706a45b47d3ab8b8c2fa.png

定义jdbcTemplate时,需要将data Source注入到jdbcTemplate中,而其它需要使用jdbcTemplate的Bean,也需要将jdbcTemplate注入到该Bean中(通常注入到Dao类中,在Dao类中进行与数据库的相关操作)。

package com.ssm.jdbc;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.jdbc.core.JdbcTemplate;

/**

*使用excute()方法创建表

*/

public class JdbcTemplateTest {

public static void main(String[] args) {

//加载配置文件

ApplicationContext applicationContext =

new ClassPathXmlApplicationContext("applicationContext.xml");

//获取JdbcTemplate实例

JdbcTemplate jdbcTemplate =

(JdbcTemplate) applicationContext.getBean("jdbcTemplate");

//使用execute()方法执行SQL语句,创建用户表user

jdbcTemplate.execute("create table user(" +

"id int primary key auto_increment," +

"username varchar(40)," +

"password varchar(40))");

}

}

updata()

f5453e5d81859d0c21c229553c42f5cc.png

package com.ssm.jdbc;

import org.springframework.jdbc.core.JdbcTemplate;

public class UserDaoImpl implements UserDao {

private JdbcTemplate jdbcTemplate;

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {

this.jdbcTemplate = jdbcTemplate;

}

public int addUser(User user) {

String sql="insert into user(username,password) value(?,?)";

Object[] obj=new Object[]{

user.getUsername(),

user.getPassword()

};

int num=this.jdbcTemplate.update(sql,obj);

return num;

}

public int updateUser(User user) {

String sql="update user set username=?,password=? where id=?";

Object[] params=new Object[]{

user.getUsername(),

user.getPassword(),

user.getId()

};

int num=this.jdbcTemplate.update(sql,params);

return num;

}

public int deleteUser(int id) {

String sql="delete from user where id=?";

int num=this.jdbcTemplate.update(sql,id);

return num;

}

}

@Test

public void addUserTest(){

ApplicationContext applicationContext=

new ClassPathXmlApplicationContext("applicationContext.xml");

UserDao userDao=(UserDao)applicationContext.getBean("userDao");

User user = new User();

user.setUsername("zhangsan");

user.setPassword("123456");

int num=userDao.addUser(user);

if(num>0){

System.out.println("成功插入了"+num+"条数据。");

}else{

System.out.println("插入操作执行失败。");

}

}

query()

2787629a6d93d699d1d6bf0c9efd8708.png

//通过id查询用户数据信息

public User findUserById(int id) {

String sql="select * from user where id=?";

RowMapper rowMapper=new BeanPropertyRowMapper(User.class);

return this.jdbcTemplate.queryForObject(sql,rowMapper,id);

}

//查询所有用户数据信息

public List findAllUser() {

String sql="select * from user";

RowMapper rowMapper=new BeanPropertyRowMapper(User.class);

return this.jdbcTemplate.query(sql,rowMapper);

}

在上面两个方法代码中,BeanPropertyRowMapper是RowMapper接口的实现类,它可自动地将数据表中的数据映射到用户自定义的类中(前提是用户自定义类中的字段要与数据表中的字段相对应)。创建完 BeanPropertyRowMapper对象后,在 findUserByld()方法中通过queryForobjec()方法返回了一个 Object类型的单行记录,而在 findAllUser()方法中通过query()方法返回了一个结果

集合。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值