文档章节

使用Spring JDBC连接数据库(以SQL Server为例)

o
 osc_isezqdgg
发布于 2019/09/18 11:07
字数 1254
阅读 11
收藏 0

精选30+云产品,助力企业轻松上云!>>>

一、配置Spring JDBC

1.导入相关jar包

(略)

2.配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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.xsd">

    <!-- 配置数据源 -->
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
        <!-- 驱动类名 -->
        <property name="url" value="jdbc:sqlserver://127.0.0.1:1433;databaseName=news" />
<!-- url访问地址 --> <property name="username" value="sa" /><!-- 链接数据库的用户名 --> <property name="password" value="12345yehuan" /><!-- 链接数据库的密码 --> </bean>
<!-- 配置Jdbc模板 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!-- 默认必须使用数据源注入值 --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置id为userDAO的Bena --> <bean id="userDAO" class="com.springmvc.controller.UserDAOImpl"> <!-- 将jdbcTemplate实例注入到userDAO的实例中来 --> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean> </beans>

定义JdbcTemplate时,需要将dataSource注入到JdbcTemplate中,对于其他需要使用JdbcTemplate的Bean,也需要将JdbcTemplate注入到该Bean中(通常注入到数据访问层Dao类中,在Dao中进行与数据库相关的操作,如上方配置中的userDAO Bean)。

3.操作示例

用户(老师)类:

package com.springmvc.controller;

public class User {
    private int id;            //用户id
    private String userName;    //用户名
    private String password;    //用户密码
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    //重写toString方法
    @Override
    public String toString() {
        return "User对象:"+id+" --- " +userName+" -- "+password;
    }
    
}

 

UserDAOImpl类:

主要进行对数据库的相关操作。

package com.springmvc.controller;

import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

public class UserDAOImpl {

    // 声明JdbcTemplate属性及其setter方法
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    // 添加用户的实现方法
    public int addUser(User user) {
        String sql = "insert into teacher(userName,password) values(?,?)";
        // 使用数组来存储SQL语句中的参数
        Object[] object = new Object[] { user.getUserName(), user.getPassword() };
        // 执行添加操作,返回的是受影响的记录条数
        int result = jdbcTemplate.update(sql, object);
        return result;
    }

    // 修改用户的实现方法
    public int updateUser(User user) {
        String sql = "update teacher set userName=?,password=? where id=?";
        // 使用数组来存储SQL语句中的参数
        Object[] params = new Object[] { user.getUserName(), user.getPassword(), user.getId() };
        // 执行修改操作,返回的是受影响的记录条数
        int result = jdbcTemplate.update(sql, params);
        return result;
    }

    // 删除用户的实现方法
    public int deleteUser(int id) {
        String sql = "delete from teacher where id=?";
        // 执行删除操作,返回的是受影响的记录条数
        int result = jdbcTemplate.update(sql, id);
        return result;
    }

    // 通过id查询单个用户的实现方法
    public User findUserById(int id) {
        // 定义单个查询的SQL语句
        String sql = "select * from teacher where id=?";
        // 创建一个新的BeanPropertyRowMapper对象,将结果集通过Java的反射机制映射到Java对象中
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
        // 将id绑定到SQL语句中,并通过RowMapper返回一个Object类型的对象
        return this.jdbcTemplate.queryForObject(sql, rowMapper, id);
    }

    // 查询所有用户的实现方法
    public List<User> findAllUser() {
        // 查询所有用户的SQL语句
        String sql = "select * from teacher";
        // 创建一个新的BeanPropertyRowMapper对象
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
        // 执行静态的SQL查询,并通过RowMapper返回List集合类型的结果
        return this.jdbcTemplate.query(sql, rowMapper);
    }

}

 

测试类:

这里通过JUnit测试。

package com.ssm.test;

import java.util.List;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

import com.springmvc.controller.UserDAOImpl;
import com.springmvc.controller.User;

public class TestJdbcTemplate {
    public static void main(String[] args) {
        //初始化Spring容器,加载applicationContext.xml文件
        ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器获取JdbcTemplate的实例
        JdbcTemplate jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");
        //定义SQL语句
        String sql="create table user(id int primary key auto_increment, userName varchar(20),password varchar(32))";
        //使用execute()方法执行SQL语句创建一个user用户表
        jdbcTemplate.execute(sql);
        System.out.println("用户表user创建成功!");
    }
    
    @Test
    public void addUserTest() {
        //初始化Spring容器,加载applicationContext.xml文件
        ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器获取UserDAOImpl的实例
        UserDAOImpl UserDAOImpl=(UserDAOImpl) ctx.getBean("UserDAOImpl");
        //创建User对象,并向user中添加数据
        User user=new User();
        user.setUserName("yzpc");
        user.setPassword("yzpc");
        //执行addUser方法,并获取返回结果
        int result=UserDAOImpl.addUser(user);
        if (result>0) {
            System.out.println("成功向数据表中插入了 "+result+" 条记录!");
        }else {
            System.out.println("往数据表中插入数据失败!");
        }
    }
    
    @Test
    public void updateUserTest() {
        //初始化Spring容器,加载applicationContext.xml文件
        ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器获取UserDAOImpl的实例
        UserDAOImpl UserDAOImpl=(UserDAOImpl) ctx.getBean("UserDAOImpl");
        //创建User对象,并向user中添加数据
        User user=new User();
        user.setId(1);
        user.setUserName("yzpc");
        user.setPassword("123456");
        //执行updateUser方法,并获取返回结果
        int result=UserDAOImpl.updateUser(user);
        if (result>0) {
            System.out.println("成功修改了 "+result+" 条记录!");
        }else {
            System.out.println("修改操作执行失败!");
        }
    }
    
    @Test
    public void deleteUserTest() {
        //初始化Spring容器,加载applicationContext.xml文件
        ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器获取UserDAOImpl的实例
        UserDAOImpl UserDAOImpl=(UserDAOImpl) ctx.getBean("UserDAOImpl");
        //执行deleteUser方法,并获取返回结果
        int result=UserDAOImpl.deleteUser(1);
        if (result>0) {
            System.out.println("成功删除了 "+result+" 条记录!");
        }else {
            System.out.println("删除操作执行失败!");
        }
    }
    
    @Test
    public void findUserByIdTest() {
        //初始化Spring容器,加载applicationContext.xml文件
        ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器获取UserDAOImpl的实例
        UserDAOImpl UserDAOImpl=(UserDAOImpl) ctx.getBean("UserDAOImpl");
        //执行findUserById方法,获取User对象
        User user=UserDAOImpl.findUserById(1);
        System.out.println(user);
    }
    
    @Test
    public void findAllUserTest() {
        //初始化Spring容器,加载applicationContext.xml文件
        ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器获取UserDAOImpl的实例
        UserDAOImpl UserDAOImpl=(UserDAOImpl) ctx.getBean("UserDAOImpl");
        //执行findAllUser方法,获取User对象的集合
        List<User> users=UserDAOImpl.findAllUser();
        //循环输出集合中的对象
        for (User user : users) {
            System.out.println(user);
        }
    }
    
}

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
SpringBoot入门 (四) 数据库访问之JdbcTemplate

  本文记录在SpringBoot中使用JdbcTemplate访问数据库。 一 JDBC回顾   最早是在上学时接触的使用JDBC访问数据库,主要有以下几个步骤: 1 加载驱动 Class.forName(Driver) 2 获取数据库...

osc_feymneeg
2019/01/25
3
0
Spring事务管理模糊点

事务管理的目的,就是为了保证数据操作的事务性(原子性,一致性,隔离性,持久性,也就是ACID) 1,对于强调速度的应用,数据库本身可能就不支持事务,例如MyISAM引擎的mysql数据库, 这时,...

shangguan1024
2019/08/11
4
0
轻量级Mysql Sharding中间件——Shark

Shark简介 前身为Kratos,轻量级Mysql分库分表(Sharding)中间件,丰富的Sharding算法支持(2类4种分片算法),能够方便DBA实现库的水平扩容和降低数据迁移成本。Shark站在巨人的肩膀上(Spring...

osc_a9b6fe4t
2019/06/21
4
0
在Spring中使用嵌入式数据库-H2

Spring3以后开始支持嵌入式数据库,嵌入式数据库目前在市面上有好多种,HSQL,DERBY,H2...今天就主要讲一下h2的使用对于一个数据库产品来说,主要就是如何存储数据和读取数据了。所谓嵌入式就...

osc_op3x65ho
01/20
5
0
关于ORM选型问题,分享下我对spring jdbc的使用经验

由于不太喜欢hibernate和mybatis,更多使用spring jdbc来开发,针对spring jdbc一些不便捷的地方,做了写整合,写了sborm,具体可以看项目介绍。 osc项目地址:http://www.oschina.net/p/sb...

franticwind
2015/03/30
1.5K
16

没有更多内容

加载失败,请刷新页面

加载更多

使用命名管道承载gRPC

最近GRPC很火,感觉整RPC不用GRPC都快跟不上时髦了。 gRPC设计 gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架。刚好需要使用一个的RPC应用系统,自然而然就盯上了它,但是它真能够解...

osc_nq69o22c
48分钟前
16
0
06-敏捷开发框架-apis 脚本库 引用位置无关性设计

动态引入技术的设计,对我们来说非常重要。 同时也说明动态语言的使用对我们来说也是非常重要。 没有动态语言的支撑,有些想法可能不容易实现,或者有替代方案,可能会花更大的代价。 前端开...

osc_5zg9z6t1
50分钟前
21
0
(三)学习了解OrchardCore笔记——灵魂中间件ModularTenantContainerMiddleware的第一行①的模块部分

  了解到了OrchardCore主要由两个中间件(ModularTenantContainerMiddleware和ModularTenantRouterMiddleware)构成,下面开始了解ModularTenantContainerMiddleware中间件第一行代码。   ...

osc_kdarxvx0
51分钟前
15
0
50Mn18Cr4V锻锻环件

电机无磁护环怎么锻性能才能《高高》?50Mn18Cr4V高锰无磁钢在变形温度为900~1 100℃、应变速率为0.1 ~10s-1条件下的热变形行为. 结果,VC第二相的应变诱导析出对50Mn18Cr4V的热变形行为产生...

无磁钢
51分钟前
16
0
【遇见offer】一汽-大众实习生专场来啦!成长+学习+福利,一个也不能少~

在上次一汽-大众的社招直播之后,实习生的专场招聘也终于来啦! 针对2020年暑期,我们提供了非常多的实习岗位给大家选择。 如果你想得到大厂实习的宝贵经验,如果你想得到更快速的成长,如果...

osc_b88oux8w
53分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部