Spring框架之JDBC操作(2.0)

Spring框架之JDBC操作(2.0)

实现对数据的CRUD操作:

实现CRUD的操作类:

org.springframework.jdbc.core.JdbcTemplate;
数据的更新操作:update;

1,建立数据库脚本:

-- 删除数据库
DROP DATABASE IF EXISTS mldn ;
-- 创建数据库
CREATE DATABASE mldn CHARACTER SET UTF8 ;
-- 使用数据库
USE mldn ;
-- 删除数据表
DROP TABLE IF EXISTS member ;
-- 创建member表
CREATE TABLE member(
	mid			VARCHAR(50) ,
	name		VARCHAR(50) ,
	age			INT ,
	sex			VARCHAR(10) ,
	birthday 	DATE ,
	salary		DOUBLE ,
	note		TEXT ,
	CONSTRAINT pk_mid PRIMARY KEY(mid) 
) type=innodb ;
-- 增加测试数据
INSERT INTO member(mid,name,age,birthday,salary,note,sex) VALUES ('mldn-a','张三',10,'1991-11-11',11.1,'不错','男') ;
INSERT INTO member(mid,name,age,birthday,salary,note,sex) VALUES ('mldn-b','李四',10,'1991-11-12',21.1,'很好','男') ;
INSERT INTO member(mid,name,age,birthday,salary,note,sex) VALUES ('mldn-c','王五',10,'1991-11-13',31.1,'凑合','女') ;
INSERT INTO member(mid,name,age,birthday,salary,note,sex) VALUES ('mldn-d','赵六',10,'1991-11-14',41.1,'邋遢','女') ;
INSERT INTO member(mid,name,age,birthday,salary,note,sex) VALUES ('mldn-e','孙七',10,'1991-11-15',51.1,'肮脏','女') ;
INSERT INTO member(mid,name,age,birthday,salary,note,sex) VALUES ('mldn-f','王八',10,'1991-11-16',61.1,'龌龊','男') ;

2,利用Spring管理数据库连接

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
		<property name="url" value="jdbc:mysql://localhost:3306/mldn"/>
		<property name="username" value="root"/>
		<property name="password" value="mysqladmin"/>
	</bean>
</beans>

3,编写测试类:对数据进行增加操作

package cn.mldn.demo;
import java.util.Date;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class TestInsertDemo {
	public static void main(String[] args) throws Exception {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		DriverManagerDataSource dataSource = ctx.getBean("dataSource",
				DriverManagerDataSource.class);
		JdbcTemplate jt = new JdbcTemplate(dataSource); // 取得JDBC模版对象
		String sql = "INSERT INTO member(mid,name,age,sex,birthday,salary,note) VALUES (?,?,?,?,?,?,?)";
		int len = jt.update(sql, "mldn-hello", "张三", 10, "男", new Date(),
				1000.0, "一个不错的人"); // 返回影响的数据行
		System.out.println(len);
		dataSource.getConnection().close(); 	// 关闭数据库
	}
}

运行结果:
在这里插入图片描述

另外的更新处理:

范例:自己处理PreparedStatement

package cn.mldn.demo;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class TestInsertDemo2 {
	public static void main(String[] args) throws Exception {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		DriverManagerDataSource dataSource = ctx.getBean("dataSource",
				DriverManagerDataSource.class);
		JdbcTemplate jt = new JdbcTemplate(dataSource); // 取得JDBC模版对象
		String sql = "INSERT INTO member(mid,name,age,sex,birthday,salary,note) VALUES (?,?,?,?,?,?,?)";
		int len = jt.update(sql, new PreparedStatementSetter(){
			@Override
			public void setValues(PreparedStatement pstmt) throws SQLException {
				pstmt.setString(1, "mldn-你好");
				pstmt.setString(2, "李四");
				pstmt.setInt(3, 12);
				pstmt.setString(4, "男");
				pstmt.setDate(5, new java.sql.Date(new java.util.Date().getTime()));
				pstmt.setDouble(6, 1111.11);
				pstmt.setString(7, "很麻烦");
			}}); // 返回影响的数据行
		System.out.println(len);
		dataSource.getConnection().close(); 	// 关闭数据库
	}
}

PreparedStatementSetter()接口的实例化操作用到匿名内部类;
此省略增加和删除操作;

数据的查询操作:Retrieve;

查询里面最为关键的一个功能是需要将查询结果变为VO的形式返回。
1,根据数据表建立VO类:

package cn.mldn.vo;
import java.io.Serializable;
import java.util.Date;
@SuppressWarnings("serial")
public class Member implements Serializable {
	private String mid ;
	private String name ;
	private Integer age ;
	private String sex ;
	private Date birthday ;
	private Double salary ;
	private String note ;
	public String getMid() {
		return mid;
	}
	public void setMid(String mid) {
		this.mid = mid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public Double getSalary() {
		return salary;
	}
	public void setSalary(Double salary) {
		this.salary = salary;
	}
	public String getNote() {
		return note;
	}
	public void setNote(String note) {
		this.note = note;
	}
	@Override
	public String toString() {
		return "Member [mid=" + mid + ", name=" + name + ", age=" + age
				+ ", sex=" + sex + ", birthday=" + birthday + ", salary="
				+ salary + ", note=" + note + "]\n";
	} 
}

2,建立测试类:

package cn.mldn.demo;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import cn.mldn.vo.Member;
public class TestQueryDemoA {
	public static void main(String[] args) throws Exception {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		DriverManagerDataSource dataSource = ctx.getBean("dataSource",
				DriverManagerDataSource.class);
		JdbcTemplate jt = new JdbcTemplate(dataSource); // 取得JDBC模版对象
		String sql = "SELECT mid,name,age,sex,birthday,salary,note FROM member";
		List<Member> all = jt.query(sql, new RowMapper<Member>() {
			@Override 
			public Member mapRow(ResultSet rs, int rowNum) throws SQLException {
				System.out.println("当前处理行:" + rowNum);
				Member vo = new Member() ;
				vo.setMid(rs.getString(1));
				vo.setName(rs.getString(2));
				vo.setAge(rs.getInt(3));
				vo.setSex(rs.getString(4));
				vo.setBirthday(rs.getDate(5));
				vo.setSalary(rs.getDouble(6));
				vo.setNote(rs.getString(7));
				return vo;
			}}) ;
		System.out.println(all);
		dataSource.getConnection().close(); 	// 关闭数据库
	}
}

3,运行结果:
在这里插入图片描述
另一种查询:queryForObject()(单个对象)和queryForList()(单列数据);
范例:只查询一个member数据:

package cn.mldn.demo;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import cn.mldn.vo.Member;
public class TestQueryDemoB {
	public static void main(String[] args) throws Exception {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		DriverManagerDataSource dataSource = ctx.getBean("dataSource",
				DriverManagerDataSource.class);
		JdbcTemplate jt = new JdbcTemplate(dataSource); // 取得JDBC模版对象
		String sql = "SELECT mid,name,age,sex,birthday,salary,note FROM member WHERE mid=?";
		Member member = jt.queryForObject(sql, new RowMapper<Member>() {
			@Override 
			public Member mapRow(ResultSet rs, int rowNum) throws SQLException {
				System.out.println("当前处理行:" + rowNum);
				Member vo = new Member() ;
				vo.setMid(rs.getString(1));
				vo.setName(rs.getString(2));
				vo.setAge(rs.getInt(3));
				vo.setSex(rs.getString(4));
				vo.setBirthday(rs.getDate(5));
				vo.setSalary(rs.getDouble(6));
				vo.setNote(rs.getString(7));
				return vo;
			}},"mldn-hello") ;
		System.out.println(member);
		dataSource.getConnection().close(); 	// 关闭数据库
	}
}

在这里插入图片描述
范例:查询一列数据:

package cn.mldn.demo;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class TestQueryDemoC {
	public static void main(String[] args) throws Exception {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		DriverManagerDataSource dataSource = ctx.getBean("dataSource",
				DriverManagerDataSource.class);
		JdbcTemplate jt = new JdbcTemplate(dataSource); // 取得JDBC模版对象
		String sql = "SELECT mid FROM member";
		List<String> all = jt.queryForList(sql, String.class) ;
		System.out.println(all);
		dataSource.getConnection().close(); 	// 关闭数据库
	}
}

在这里插入图片描述
所以能提供VO查询的方法只有query()一个方法,而其他的都是辅助功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值