当前位置: 移动技术网 > IT编程>开发语言>Java > JDBCTemplate

JDBCTemplate

2020年07月07日  | 移动技术网IT编程  | 我要评论

JDBC
JDBC(Java DataBase Connectivity)是Java用于连接数据库的规范,也就是用于执行数据库SQL语句的Java API。它是由一组用Java语言编写的类和接口组成,为大部分关系型数据库提供访问接口。

JDBC需要每次进行数据库连接,然后处理SQL语句、传值、关闭数据库。如果都由开发人员编写代码,则很容易出错,可能会出现使用完成之后,数据库连接忘记关闭的情况。这容易导致连接被占用而降低性能,为了减少这种可能的错误,减少开发人员的工作量,JDBCTemplate被设计出来。

JDBCTemplate
JDBCTemplate=JDBC+Template,是对JDBC的封装。它更便于程序实现,替我们完成所有的JDBC底层工作。因此,对于数据库的操作,再不需要每次都进行连接、打开、关闭了。

JDBC和JDBCTemplate就像仓库管理员,负责从仓库中存取物品。而后者不需要每次进入都开门,取完关门,因为有电动门自动控制。

用JDBCTemplate实现数据的增删改查

1.配置基础依赖
要使用JDBCTemplate,则需要添加其Starter依赖。因为要操作数据库,所有也需要配置数据库(以mysql为例)的连接依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
			<version>8.0.20</version>
		</dependency>

添加完依赖之后,还需要配置数据库的连接信息。这样JDBC才能正常连接到数据库。在application.properties配置文件中配置数据库的地址和用户信息

//配置ip地址,编码,时区和SSL
spring.datasource.url=jdbc:mysql://127.0.0.1/book?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
//用户名
spring.datasource.username=root
//密码
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

2 新建实体类
新建一个测试实体类User,实现RowMapper类,重写mapRow方法,以便实现字段和数据表字段映射。映射是指把Java中设置的实体字段和mysql数据库的字段对应起来,因为实体id可以对应数据库字段的u_id,也可以对应id、那么等。如果不重写,则程序不知道如何对应。
User.java

package com.example.demo.model;

import lombok.Data;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;

@Data
public class User implements RowMapper<User> {
    private int id;
    private String username;
    private String password;
    //必须重写mapRow方法
    @Override

    public User mapRow(ResultSet resultSet,int i) throws SQLException{
        User user=new User();
        user.setId(resultSet.getInt("id"));
        user.setUsername(resultSet.getString("username"));
        user.setPassword(resultSet.getString("password"));
        return  user;
    }
}

3.操作数据
JDBCTemplate提供了以下操作数据的3个方法

方法 含义
execute 表示执行,用于直接执行sql语句
update 表示更新,包括新增、修改、删除操作
query 表示查询

1)创建数据表
在使用JDBCTemplate之前,需要在控制器中注入JDBCTemplate,然后可以通过execute方法执行sql语句

2)添加数据
通过update方法

3)查询修改删除数据
执行sql字符串里面的SQL语句,通过query,update方法

package com.example.demo.controller;

import com.example.demo.model.User;
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;


import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.*;
@SpringBootTest
@RunWith(SpringRunner.class)




public class UserController {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    //创建数据表
    public void createUserTable() throws Exception {
        String sql = "CREATE TABLE `user` (\n" +
                "  `id` int(10) NOT NULL AUTO_INCREMENT,\n" +
                "  `username` varchar(100) DEFAULT NULL,\n" +
                "  `password` varchar(100) DEFAULT NULL,\n" +
                "  PRIMARY KEY (`id`)\n" +
                ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;\n" +
                "\n";

        jdbcTemplate.execute(sql);

    }

    @Test
    //saveUserTest
    //添加一个测试数据
    public void saveUserTest()throws Exception  {
        String sql = "INSERT INTO user (username,password) VALUES ('lsz','123456')";
        int rows = jdbcTemplate.update(sql);
        System.out.println(rows);
    }


    @Test
    //updateUserPassword?id=1&passWord=999888
    public void updateUserPassword() throws Exception {
        Integer id=1;
        String passWord="999888";
        String sql = "UPDATE user SET PASSWORD = ? WHERE ID = ?";
        int rows = jdbcTemplate.update(sql, passWord, id);
        System.out.println(rows);
    }

    @Test
    public void deleteUserById() throws Exception {
        String sql = "DELETE FROM  user  WHERE ID = ?";
        int rows = jdbcTemplate.update(sql, 1);
        System.out.println(rows);
    }


    @Test
    //getUserByName?userName=lsz
    public void getUserByName()throws Exception {
        String name="lsz";
        String sql = "SELECT * FROM user WHERE USERNAME = ?";
        List<User> list = jdbcTemplate.query(sql, new User(), new Object[]{name});
        for(User user:list){
            System.out.println(user);
        }
    }



    @Test
    //getAll
    public void list() throws Exception {
        String sql = "SELECT * FROM user limit 1000";

        List<User> userList = jdbcTemplate.query(sql,
                new BeanPropertyRowMapper(User.class));
        for(User userLists:userList){
            System.out.println(userLists);
        }
    }

}

本文地址:https://blog.csdn.net/shizheng_Li/article/details/107152977

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网