Sping--JDBC快速上手(含问题解决)

Sping–JDBC快速上手

学习SpringJDBC的主要功能作用----数据库资源的管理和错误处理;

SpringJDBC核心包:

除了Spring的基础核心包(core、beans、context、
expression、commons(扩展核心包))还有有数据库相关的包–(数据库驱动包,jdbc以及tx包)

Spring通过JdbcTemplate来解析Jdbc,继承了JdbcAccessor(抽象类),实现了JdbcOperation接口;

JdbcOperation接口–

定义了增删查改等围绕数据库的操作方法

JdbcAccessor(抽象类)

为子类提供了一些共访问数据库的公共属性;
DataSource–获取数据源即连接数据库的作用具体实现还可以引入对数据库连接的缓冲池和分布事物的支持

SqlexceptionTranslator

负责对SqlException的转义工作

SpringJDBC配置文件的主要核心内容–

<?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-4.3.xsd">
      <!-- 配置数据源  连接数据库 -->
      <bean id ="dataSource" class="org.SpringFrameWork.jdbc.dataSource.DriverManagerDataSource">
     <!-- 配置连接数据库的参数  驱动,url,用户名,密码 -->
      <property name="driverClassName" value="org.mysql.jdbc.Driver"/>
       <property name="url" value="jdbc:mysql://localhost3306/company"/>
       <property name="username" value="huixinjiao"/>
       <property name="password" value="955945"/>
       </bean>
       <!-- 配置可以操作数据库的JdbcTemplate模板 -->
      <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" autowire="byName"/>
     <!-- 也可以将自动装配去掉,改为手动注入
      <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
      <property name="dataSource" value="dataSource"/>
     </bean>  
      -->
      <!-- 配置注入类 -->
      </beans>

下面就是写java代码了,
先写一个接口,用于对数据库的一些操作方法

package com.chapter0617.one;
import com.chapter0617.two.User;
public interface ManagerOperation {
public void CreateUser();//创建数据表
public int addUser(User user);//添加用户
public int deleteUser(User user);//删除用户
public int updateUser(User user);//更新用户
}

定义用户数据–

package com.chapter0617.two;

import org.springframework.stereotype.Repository;

@Repository("user")
public class User {
	private Integer UserId;
	private String UserName;

	private String UserPassword;

	public Integer getUserId() {
		return UserId;
	}

	public void setUserId(Integer userId) {
		UserId = userId;
	}

	public String getUserName() {
		return UserName;
	}

	public void setUserName(String userName) {
		UserName = userName;
	}

	public String getUserPassword() {
		return UserPassword;
	}

	@Override
	public String toString() {
		return "User [UserId=" + UserId + ", UserName=" + UserName + ", UserPassword=" + UserPassword + "]";
	}

	public void setUserPassword(String userPassword) {
		UserPassword = userPassword;
	}
}

接口实现类–

package com.chapter0617.two;
import javax.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import com.chapter0617.one.ManagerOperation;
@Controller(value="userManager")
public class UserManager implements ManagerOperation {
	@Resource(name="jdbcTemplate")//注入jdbcTemplate以操作数据库
	private JdbcTemplate jdbcTemplate;
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
	@Override
	public void CreateUser() {
		String sql[] = new String[5];
		sql[0] = "create table userinfo(user_id int not null primary key,user_name varchar(64),user_password varchar(128))";
		sql[1] = "insert into userinfo (user_id, user_name, user_password) values(1001,'jack','123456')";
		sql[2] = "insert into userinfo (user_id, user_name, user_password) values(1002,'mary','456789')";
		sql[3] = "insert into userinfo (user_id, user_name, user_password) values(1003,'tom','410032')";
		sql[4] = "insert into userinfo (user_id, user_name, user_password) values(1004,'gavin','124545')";
		jdbcTemplate.execute(sql[0]);
		jdbcTemplate.execute(sql[1]);
		jdbcTemplate.execute(sql[2]);
		jdbcTemplate.execute(sql[3]);
		jdbcTemplate.execute(sql[4]);
		System.out.println("成功创建userinfo表并插入四条数据");
	}
	@Override
	public int addUser(User user) {//添加用户方法实现
		String sql = "insert into userinfo (user_id,user_name) values(?,?)";
		Object[] obj = new Object[] { user.getUserId(), user.getUserName()
		};
		int num = jdbcTemplate.update(sql, obj);//利用JdbcTemplate类的update()方法来对数据库数据进增删查改;
		if (num >= 0) {
			System.out.println("成功插入" + num + "条数据");
		}
		return num;
	}
	@Override
	public int deleteUser(User user) {//删除用户方法实现
		String sql = "delete table userinfo where user_id=?";
		Object obj[] = new Object[] { user.getUserId() };
		int num = jdbcTemplate.update(sql, obj);
		if (num >= 0) {
			System.out.println("成功删除" + num + "条数据");
		}
		return num;
	}
	@Override
	public int updateUser(User user) {//更新用户方法实现
		String sql = "update userinfo set user_name=? where user_id=?";
		Object obj[] = new Object[] { user.getUserName(), user.getUserId() };
		int num = jdbcTemplate.update(sql, obj);
		if (num >= 0) {
			System.out.println("成功更新" + num + "条数据");
		}
		return num;
	}
	}

还是放上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-4.3.xsd">
      <!-- 配置数据源  连接数据库 -->
      <bean id ="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     <!-- 配置连接数据库的参数  驱动,url,用户名,密码 -->
      <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
       <property name="url" value="jdbc:mysql://localhost:3306/company?serverTimezone=UTC"/>
       <property name="username" value="huixinjiao"/>
       <property name="password" value="955945"/>
       </bean>
       <!-- 配置可以操作数据库的JdbcTemplate模板 -->
      <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" autowire="byName"/>
     <!-- 也可以将自动装配去掉,改为手动注入
      <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
      <property name="dataSource" ref="dataSource"/>
     </bean>  
      -->
      <!-- 配置注入类 -->
      <bean id="userManager" class="com.chapter0617.two.UserManager" autowire="byName"/>
      </beans>
      

这里数据库驱动地址跟以前有所变化,之前是com.mysql.jdbc.Driver,现在改为了com.mysql.cj.jdbc.Driver
还有关于时区的设置–有时候没有设置时区,会出现-You must configure either the server or JDBC driver (via the serverTimezone configuration property),只需要在数据库url后面添加?serverTimezone=UTC,有的还会遇到SSL加密的情况,需要设置及为false;

测试类—

package com.chapter0617.one;



import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.chapter0617.two.User;

public class Testone {

	public static void main(String[] args) {
		ApplicationContext app = new ClassPathXmlApplicationContext("aplicationcontext.xml");
		ManagerOperation manager=(ManagerOperation)app.getBean("userManager");
	User user0=new User();
		//manager.CreateUser();
		user0.setUserId(1222);
		user0.setUserName("SteaveJobs");
		user0.setUserPassword("741654");
		manager.addUser(user0);
		User user1=new User();
		user1.setUserId(1001);
		manager.deleteUser(user1);
		User user2=new User();
		user2.setUserName("Gavin");
		user2.setUserId(1004);
		manager.updateUser(user2);
	}

}

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
617, 2021 10:52:29 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6fdb1f78: startup date [Thu Jun 17 10:52:29 CST 2021]; root of context hierarchy
617, 2021 10:52:29 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [aplicationcontext.xml]
617, 2021 10:52:30 上午 org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
信息: Loaded JDBC driver: com.mysql.cj.jdbc.Driver
成功创建userinfo表并插入四条数据
成功插入1条数据
成功删除1条数据
成功更新1条数据

以上就是SpringJDBC数据库连接实操;
共同学习共同进步,见证成长!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeMartain

祝:生活蒸蒸日上!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值