SSM学习(四)--Spring数据库开发

一、Spring JDBC

1、spring JdbcTemplate

针对数据库的操作,Spring框架提供了JdbcTemplate类,该类是Spring框架数据抽象层的基础,JdbcTemplate类是Spring JDBC的核心类。

2、Spring JDBC的配置

Spring JDBC模板主要由四个包组成,core(核心包)、dataSource(数据包)、object(对象包)和support(支持包),具体说明如下表:
在这里插入图片描述

使用JDBC需要在applicationContext.xml中完成配置,配置模板如下:

dataSource中有四个属性:
driverClassName:所使用驱动名称,对应Jar包中的Driver类【com.mysql.jdbc.Driver
url:数据库源所在地址。MySQL通常配为【jdbc:mysql://localhost:3306/db_spring】(其中db_spring数据库名,3306为默认端口号)
username:访问数据库用户名
password:访问数据库密码

<?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">
     	<!-- 1、配置数据源 -->	
     	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     		<!-- 数据库驱动 -->
     		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
     		<!-- 连接数据库的url -->
     		<property name="url" value="jdbc:mysql://localhost:3306/db_spring" />
     		<!-- 连接数据库的用户名 -->
     		<property name="username" value="root" />
     		<!-- 连接数据库的密码 -->
     		<property name="password" value="root" />
     	</bean>	
     	<!-- 2、配置jdbc模板 -->
     	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
     		<!-- 默认必须使用数据源 -->
     		<property name="dataSource" ref="dataSource" />
     	</bean>
     	<!--3、配置注入类-->
     	<bean id="xxx" class="Xxx">
     		<property name="jdbcTemplate" ref="jdbcTemplate" />
     	</bean>
</beans>

定义jdbcTemplate时,需要把dataSource注入到jdbcTemplate中,而其他使用jdbcTemplate的Bean,也需要将jdbcTemplate注入到Bean中。

二、spring JdbcTemplate的常用方法

JdbcTemplate类中提供了大量更新和查询数据库的方法。
前提:

  1. 首先创建一个Web项目以及一个名为db_spring数据库
  2. 将需要的JAR包导入到项目中 在这里插入图片描述
  3. 在src目录下创建applicationContext.xml配置文件

1、excute()——执行SQL语句

execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句(创建数据库以及数据表);
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-4.3.xsd">
     	<!-- 1、配置数据源 -->	
     	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     		<!-- 数据库驱动 -->
     		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
     		<!-- 连接数据库的url -->
     		<property name="url" value="jdbc:mysql://localhost:3306/db_spring" />
     		<!-- 连接数据库的用户名 -->
     		<property name="username" value="root" />
     		<!-- 连接数据库的密码 -->
     		<property name="password" value="root" />
     	</bean>	
     	<!-- 2、配置jdbc模板 -->
     	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
     		<!-- 默认必须使用数据源 -->
     		<property name="dataSource" ref="dataSource" />
     	</bean>
</beans>

创建测试类JdbcTemplateTest

/**
 *使用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))");
	}
	}

运行后测试成功

2、update()——更新数据

在这里插入图片描述

(1)创建实体类User,定义id、username、password属性,及其对应的setter()、getter() 方法。
package com.ssm.jdbc;

public class User {
   private int id;
   private String username;
   private String password;
public int getId() {
	return id;
}
public String getUsername() {
	return username;
}
public String getPassword() {
	return password;
}
public void setId(int id) {
	this.id = id;
}
public void setUsername(String username) {
	this.username = username;
}
public void setPassword(String password) {
	this.password = password;
}
@Override
public String toString() {
	return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}

}

(2)创建UserDao接口,定义添加、删除、修改用户的方法
package com.ssm.jdbc;

import java.util.List;

import org.springframework.stereotype.Repository;

public interface UserDao {
	public int addUser(User user);
	
	public int updateUser(User user);
	
	public int deleteUser(int id);
	
	}
(3)创建UserDaoImpl类,实现UserDao接口,并实现接口中的方法
package com.ssm.jdbc;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository("userDao")
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[] iobj=new Object[]{
			user.getUsername(),
			user.getPassword()
	};
	int num=this.jdbcTemplate.update(sql,iobj);
	
		return num;
	}
	//修改
	public int updateUser(User user) {
		String sql="update user set username=?,password=? where id=?";
		Object[] uobj=new Object[]{
				user.getUsername(),
				user.getPassword(),
				user.getId()
		};
		int num=this.jdbcTemplate.update(sql,uobj);
		return num;
	}
	//删除
	public int deleteUser(int id) {
		String sql="delete from user where id=?";
		int num=this.jdbcTemplate.update(sql,id);
		return num;
	}
	}
(4)在applicationContext.xml中添加bean注入
	<bean id="userDao" class="com.ssm.jdbc.UserDaoImpl">
     		<property name="jdbcTemplate" ref="jdbcTemplate" />
     	</bean>

下面展示一些 内联代码片

(5)在JdbcTemplateTest测试类中添加测试方法addUser()用于添加用户信息、updateUserTest()更新信息和DeleteUserTest()删除信息。
package com.ssm.jdbc;

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;
/*
 * 
 * */
public class JdbcTemplateTest {
@Test
	public void addUser(){
		ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao=(UserDao) app.getBean("userDao");
		User user=new User();
		user.setUsername("admin");
		user.setPassword("admin");
		int num=userDao.addUser(user);
		if(num>0){
			System.out.println("成功插入"+num+"条数据");
		}else{
		System.out.println("插入数据执行失败");
		}
	}
@Test
 	public void updateUserTest(){
	ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
	UserDao userDao=(UserDao) app.getBean("userDao");
	User user=new User();
	user.setId(2);
	user.setUsername("HQX");
	user.setPassword("123456");
	int num=userDao.updateUser(user);
	if(num>0){
		System.out.println("成功修改"+num+"条数据");
	}else{
	System.out.println("修改数据执行失败");
	}
		
	}
@Test
	public void DeleteUserTest(){
		ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao=(UserDao) app.getBean("userDao");
		int num=userDao.deleteUser(6);
		if(num>0){
			System.out.println("成功删除"+num+"条数据");
		}else{
		System.out.println("删除数据执行失败");
		}
	

}

添加@Test注释,用JUnit4测试运行。测试成功。
在这里插入图片描述

3、query()——查询数据

方法说明
List query( String sql,RowMapperrowMapper)执行String类型参数提供的SQL语句,并通过RowMapper返回一个List类型的结果。
List query(String sql,PreparedStatementSetterpss,RowMapperrowMapper)根据 String类型参数提供的SQL语句创建PreparedStatement对象,通过RowMapper将结果返回到List中。
List query( String sql,RowMapperrowMapper)使用Object的值来设置SQL语句中的参数值,采用RowMapper回调方法可以直接返回List类型的数据。
queryForObject(String sql, RowMapperrowMapper,Object…args)将args参数绑定到5QL语句中,并通过RowMapper返回一个Object类型的单行记录。
queryForList(string sql, Object[] args, classelementType)该方法可以返回多行数据的结果,但必须是返回列表,elementType参数返回的是List元素类型。

下面展示实例 通过id查询单个用户和查询所有的数据

1、在UserDao中添加两个方法
   //查询单个用户
	public User findUser(int id);
	//查询所有
	public List<User> findAllUser();
2、在UserDaoImpl中实现方法,并用query()方法进行查询
public User findUser(int id) {
		String sql="select * from user where id=?";
		RowMapper<User> mapper=new BeanPropertyRowMapper<User>(User.class);
		
		return this.jdbcTemplate.queryForObject(sql, mapper,id);
	}
	public List<User> findAllUser() {
		String sql="select * from user ";
		RowMapper<User> rowmapper=new BeanPropertyRowMapper<User>(User.class);
		return this.jdbcTemplate.query(sql, rowmapper);
	}

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

3、在测试类中添加
@Test
	public void QueryUser(){
	ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
	UserDao userDao=(UserDao)app.getBean("userDao");
	User user=userDao.findUser(2);
	System.out.println(user);
}
@Test
	public void findAllUserTest(){
	ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
	UserDao userDao=(UserDao)app.getBean("userDao");
	List<User> list=userDao.findAllUser();
	for(User user:list){
		System.out.println(user);
	}
}

下面展示一些 内联代码片

5、测试结果

在这里插入图片描述


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

点份炸鸡778

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值