Spring JdbcTemplate基础

编程入门 行业动态 更新时间:2024-10-08 13:28:36

Spring JdbcTemplate<a href=https://www.elefans.com/category/jswz/34/1770030.html style=基础"/>

Spring JdbcTemplate基础

文章目录

  • 一、JdbcTemplate知识点
    • 一、jdbcTemplate更新数据库常用方法
    • 二、Spring数据访问过程
    • 三、了解数据库连接池的重要性
  • 二、创建数据库与表
    • 1、创建数据库 - simonshop
    • 2、创建用户表 - t_user
    • 3、在用户表里插入记录
    • 4、查看用户表内容
  • 三、打开项目【SpringDemo2021】
    • 1.在pom文件里添加数据库与日志相关依赖.
    • 2、在main/Java创建net.tp.spring.lesson06.bean包
    • 3、在net.tp.spring包里创建lesson06.bean子包,然后在子包里面创建User类
    • 4、在main/java下创建net.tp.spring.lesson06.dao
    • 5、在net.tp.spring包里创建lesson06.dao子包,在子包里创建UserDao接口
    • 6、在main/java下创建net.tp.spring.lesson06.dao.impl
    • 7、在net.tp.spring.lesson06.dao包里创建impl子包,然后在子包里创建UserDaoImpl类
    • 8、在main/java下创建net.tp.spring.lesson06.service
    • 9、在net.tp.spring.lesson06包里创建service子包,然后在子包里创建UserService类
    • 10、创建数据库配置属性文件 - jdbc.properties
    • 11、在resources里创建jdbc子目录
    • 12、在resources下jdbc子目录里创建spring-config.xml
    • 13、在test/java下创建net.tp.spring.lesson06.service包
    • 13、创建用户服务测试类 - TestUserService
    • 14、运行测试类里的每个测试方法
      • 一、运行testFindUserById()方法
      • 二、运行testFindAllUsers()方法
      • 三、运行testAddUser()方法
      • 四、运行testUpdateUser()方法
      • 五、运行testDeleteUserById()方法
      • 六、运行testLogin()方法
  • 问题未解决,求助

一、JdbcTemplate知识点

一、jdbcTemplate更新数据库常用方法

-update (更新数据)
-batchUpdate (批量更新数据库)
-queryForObject (查询单行)
-query (查询多行)
-queryForObject (单值查询)不同的

二、Spring数据访问过程

Spring将数据访问过程中固定的和可变的部分明确划分为两个不同的类

  • 模板(template) :模板管理过程中固定的部分
  • 回调(callback) :回调处理自定义的数据访问代码

三、了解数据库连接池的重要性

  1. 普通的JDBC连接数据库每次向数据库建立连接的时候都将connection加载到内存,再验证用户名等信息,这样会消耗一定的时间,每次的数据库连接,使用完后再断开,这样的方式会消耗大量的资源和时间。同时上千人访问的话将占用很多系统资源,导致服务器崩溃
  2. 数据库连接池其实就是一个为数据库连接建立的一个“缓存池”,预先在数据库连接池中放入一定数量的连接。当需要数据库连接时,从连接池中拿就是了,用完再放回。数据库连接池负责分配、管理、释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立
  3. 数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中(initialPoolSize).无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量
  4. 连接池的最大数据库连接数量限定了这个连接池占有的最大连接数(maxPoolSize)。当应用程序向连接池请求的连接数超过最大连接数时,这些请求将加入到等待队列中
  5. 数据库连接池相对于无连接池的优点
  • 资源重用,避免频繁创建更快的系统反应速度
  • 实现某一应用最大可用数据库连接数的限制避免某一应用独占所有的数据库资源
  • 统一的连接管理,避免数据库连接泄露

二、创建数据库与表

1、创建数据库 - simonshop


2、创建用户表 - t_user

3、在用户表里插入记录

4、查看用户表内容

三、打开项目【SpringDemo2021】

1.在pom文件里添加数据库与日志相关依赖.

<!--Spring数据库支持--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.5</version></dependency><!--数据库驱动工具包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><!--数据库连接池框架--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.4</version></dependency><!--日志框架--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>

2、在main/Java创建net.tp.spring.lesson06.bean包



3、在net.tp.spring包里创建lesson06.bean子包,然后在子包里面创建User类


package net.tp.spring.lesson06.bean;import java.util.Date;public class User {private int id;private String username;private String password;private String telephone;private Date registerTime;private int popedom;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;}public String getTelephone() {return telephone;}public void setTelephone(String telephone) {this.telephone = telephone;}public Date getRegisterTime() {return registerTime;}public void setRegisterTime(Date registerTime) {this.registerTime = registerTime;}public int getPopedom() {return popedom;}public void setPopedom(int popedom) {this.popedom = popedom;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", telephone='" + telephone + '\'' +", registerTime=" + registerTime +", popedom=" + popedom +'}';}
}

4、在main/java下创建net.tp.spring.lesson06.dao


5、在net.tp.spring包里创建lesson06.dao子包,在子包里创建UserDao接口


package net.tp.spring.lesson06.dao;import net.tp.spring.lesson06.bean.User;import java.util.List;public interface UserDao {int insert(User user);int deleteById(int id);int update(User user);User findById(int id);List<User> findAll();User login(String username, String password);}

6、在main/java下创建net.tp.spring.lesson06.dao.impl


7、在net.tp.spring.lesson06.dao包里创建impl子包,然后在子包里创建UserDaoImpl类


package net.tp.spring.lesson06.dao.impl;import net.tp.spring.lesson06.bean.User;
import net.tp.spring.lesson06.dao.UserDao;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;import javax.annotation.Resource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;@Repository("userDao")
public class UserDaoImpl implements UserDao {@Resourceprivate JdbcTemplate jdbcTemplate;/*** 插入用户表记录*/public int insert(User user) {String strSQL ="INSERT INTO t_user(username,password,telephone,register_time,popedom) VALUES(?,?,?,?,?)";return jdbcTemplate.update(strSQL,user.getUsername(),user.getPassword(),user.getTelephone(),user.getRegisterTime(),user.getPopedom());}/*** 按编号删除用户记录* @param  id* @return*/public int deleteById(int id) {String strSQL = "DELETE FROM t_user WHERE id=?";return jdbcTemplate.update(strSQL,id);}/*** 更新用户记录* @param  user* @return 返回更新记录数*/public int update(User user) {String strSQL ="UPDATE t_user SET username=?,password =?,telephone =?,register_time =?,popedom =? where id=?";return jdbcTemplate.update(strSQL,user.getUsername(),user.getPassword(),user.getTelephone(),user.getRegisterTime(),user.getPopedom(),user.getId());}/*** 按编号查询用户记录* @param id* @return 用户对象*/public User findById(int id) {String strSQL = "SELECT * FROM t_user WHERE id = ?";return jdbcTemplate.queryForObject(strSQL, new RowMapper<User>() {// 行映射方法(将用户表记录映射成用户实体)public User mapRow(ResultSet rs, int row) throws SQLException {// 创建用户对象User user = new User();// 从结果集获取字段值设置用户对象属性user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));user.setTelephone(rs.getString("telephone"));user.setRegisterTime(rs.getTimestamp("register_time"));user.setPopedom(rs.getInt("popedom"));// 返回用户对象return user;}}, id);}/*** 查询全部用户记录** @return 用户列表*/public List<User> findAll() {String strSQL = "SELECT * FROM t_user";// 查询获取行列表List<Map<String, Object>> rows = jdbcTemplate.queryForList(strSQL);// 创建用户列表List<User> users = new ArrayList<>();// 遍历行列表,生成用户列表for (Map<String, Object> row : rows) {// 创建用户对象User user = new User();// 从行获取列值设置用户对象属性user.setId((Integer) row.get("id"));user.setUsername((String) row.get("username"));user.setPassword((String) row.get("password"));user.setTelephone((String) row.get("telephone"));user.setRegisterTime((Date) row.get("register_time"));user.setPopedom((Integer) row.get("popedom"));// 将用户对象添加到用户列表users.add(user);}// 返回用户列表return users;}/*** 用户登录** @param username* @param password* @return 用户实体(null:登录失败,not null:登录成功)*/public User login(String username, String password) {String strSQL = "SELECT * FROM t_user WHERE username = ? AND password = ?";return jdbcTemplate.queryForObject(strSQL, new RowMapper<User>() {// 行映射方法(将用户表记录映射成用户实体)public User mapRow(ResultSet rs, int row) throws SQLException {// 创建用户对象User user = new User();// 从结果集获取字段值设置用户对象属性user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));user.setTelephone(rs.getString("telephone"));user.setRegisterTime(rs.getTimestamp("register_time"));user.setPopedom(rs.getInt("popedom"));// 返回用户对象return user;}}, username, password);}}

8、在main/java下创建net.tp.spring.lesson06.service



9、在net.tp.spring.lesson06包里创建service子包,然后在子包里创建UserService类


package net.tp.spring.lesson06.service;import net.tp.spring.lesson06.bean.User;
import net.tp.spring.lesson06.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
/*** 功能:用户服务类* 作者:tp* 日期:2021年03月31日*/@Service("userService")
public class UserService {@Autowiredprivate UserDao userDao;public int addUser(User user) {return userDao.insert(user);}public int deleteUserById(int id) {return userDao.deleteById(id);}public int updateUser(User user) {return userDao.update(user);}public User findUserById(int id) {return userDao.findById(id);}public List<User> findAllUsers() {return userDao.findAll();}public User login(String username, String password) {return userDao.login(username, password);}
}

10、创建数据库配置属性文件 - jdbc.properties


jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/simonshop?useSSL=false
jdbc.username=root
jdbc.password=root

11、在resources里创建jdbc子目录

12、在resources下jdbc子目录里创建spring-config.xml





<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xmlns:context=""xsi:schemaLocation="://www.springframework/schema/beans/spring-beans.xsd://www.springframework/schema/context/spring-context.xsd"><!--组件扫描--><context:component-scan base-package="net.tp.spring.lesson06"/><!--声明属性占位符--><context:property-placeholder location="jdbc.properties"/><!--定义数据源Bean--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><!--定义JDBC模板Bean--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean>
</beans>

13、在test/java下创建net.tp.spring.lesson06.service包


13、创建用户服务测试类 - TestUserService


package net.tp.spring.lesson06.service;import net.tp.spring.lesson06.bean.User;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.Date;
import java.util.List;/*** 功能:测试用户服务类* 作者:tp* 日期:2021年03月31日*/
public class TestUserService {private UserService userService;private ClassPathXmlApplicationContext context;@Beforepublic void init() {context = new ClassPathXmlApplicationContext("jdbc/spring-config.xml");userService = (UserService) context.getBean("userService");}@Testpublic void testFindUserById() {try {User user = userService.findUserById(2);System.out.println(user);} catch (Exception e) {System.out.println("记录未找到!");;}}@Testpublic void testFindAllUsers() {List<User> users = userService.findAllUsers();for (User user : users) {System.out.println(user);}}@Testpublic void testAddUser() {User user = new User();user.setUsername("李小文");user.setPassword("12345");user.setTelephone("15890903345");user.setRegisterTime(new Date());user.setPopedom(1);int count = userService.addUser(user);if (count > 0) {System.out.println("添加用户成功!");} else {System.out.println("添加用户失败!");}}@Testpublic void testUpdateUser() {User user = userService.findUserById(5);System.out.println("更新前:" + user);user.setUsername("钟晓丽");user.setPassword("55555");user.setTelephone("13990903345");user.setRegisterTime(new Date());user.setPopedom(0);int count = userService.updateUser(user);if (count > 0) {System.out.println("更新用户成功!");System.out.println("更新后:" + userService.findUserById(5));} else {System.out.println("更新用户失败!");}}@Testpublic void testDeleteUserById() {int count = userService.deleteUserById(5);if (count > 0) {System.out.println("删除用户成功!");} else {System.out.println("删除用户失败!");}}@Testpublic void testLogin() {String username = "郑晓红";String password = "11111";try {User user = userService.login(username, password);System.out.println("恭喜,登录成功!");} catch (Exception e) {System.out.println("遗憾,登录失败!");}}@Afterpublic void destroy() {context.close();}
}

14、运行测试类里的每个测试方法

一、运行testFindUserById()方法

二、运行testFindAllUsers()方法

三、运行testAddUser()方法

四、运行testUpdateUser()方法

五、运行testDeleteUserById()方法

六、运行testLogin()方法

问题未解决,求助

  • idea启动项目后控制台一直打印DEBUG日志

更多推荐

Spring JdbcTemplate基础

本文发布于:2024-02-06 20:43:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1751314.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:基础   Spring   JdbcTemplate

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!