前言
我的上篇文章中有关于java项目创建,下边开始建立SpringJdbcTemplate配置连接数据库
SpringJDBCTemplate简介
Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。
JdbcTemplate主要提供以下五类方法:
- execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
- update方法:update方法用于执行新增、修改、删除等语句;
- batchUpdate方法:batchUpdate方法用于执行批处理相关语句;
- query方法及queryForXXX方法:用于执行查询相关语句;
- call方法:用于执行存储过程、函数相关语句。
案例
- *在mysql创建一张学生表
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`student_id` varchar(11) NOT NULL,
`name` varchar(255) NOT NULL,
`age` int(11) NOT NULL,
`birthday` date DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `student_id` (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 创建一个学生实体类
package cn.java.db;
public class studentEntity {
/**
* 实体类
*/
private String student_id;
private String name;
private String age;
private String birthday;
public String getStudent_id() {
return student_id;
}
public void setStudent_id(String student_id) {
this.student_id = student_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "student [student_id=" + student_id + ", name=" + name + ", age=" + age + ", birthday=" + birthday + "]";
}
}
- 创建一个类并继承JdbcDaoSupport
package cn.java.db;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
public class TestDao extends JdbcDaoSupport {
}
- 创建一个实现dao的类
package cn.java.data;
import cn.java.db.TestDao;
/**
* @author wang
*
*/
public class DataReaDao {
private static TestDao dao;
public static TestDao getDao() {
return dao;
}
public static void setDao(TestDao dao) {
DataReaDao.dao = dao;
}
}
- 在src下创建一个名为属性配置文件 jdbc.properties(名字最好浅俗易懂),通常我们会将数据连接方式放到一个单独的文件中,方便后期维护
# MySQL database connection drive configuration
mysql.driverClassName=com.mysql.jdbc.Driver
mysql.url=jdbc\:mysql\://127.0.0.1\:3306/student_manage?useUnicode\=true&characterEncoding\=UTF-8
mysql.username=root
mysql.password=123456
mysql.initialSize=1
mysql.maxActive=500
mysql.maxIdle=2
mysql.minIdle=1
- 配置Spring配置文件applicationContext-mysql.xml(将数据源单独写一个xml文件方便分离理解)
<!-- 获取配置资源 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 数据源 -->
<bean id="mysqlDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${mysql.driverClassName}" />
<property name="url" value="${mysql.url}" />
<property name="username" value="${mysql.username}" />
<property name="password" value="${mysql.password}" />
<!-- 连接池启动时的初始值 -->
<property name="initialSize" value="${mysql.initialSize}" />
<!-- 连接池的最大值 -->
<!-- <property name="maxActive" value="${mysql.maxActive}" /> -->
<!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
<property name="maxIdle" value="${mysql.maxIdle}" />
<!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
<property name="minIdle" value="${mysql.minIdle}" />
</bean>
<!-- The original JdbcTemplate definition -->
<!-- 引入数据源,ref 引入一个名为*mysqlDataSource*的bean对象 -->
<bean id="mysqlJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="mysqlDataSource" />
</bean>
- 配置Spring配置文件applicationContext.xml
<!-- 获取配置资源 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 导入配置文件 -->
<import resource="applicationContext-mysql.xml" />
<bean id="studentDao" class="cn.java.db.TestDao">
<property name="dataSource" ref="mysqlDataSource" />
</bean>
<bean id="DataServer" class="cn.java.data.DataClient">
<property name="studentDao" ref="studentDao" />
</bean>
- 创建一个测试类,运行update方法插入一条数据
package cn.java.data;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class mainRun {
public static void main(String arg[]) {
//启动IOC容器
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取dao
DataReaDao dataReaDao = (DataReaDao) ctx.getBean("DataReaDao");
String sql = "insert into student(student_id,name,age,birthday) values(?,?,?,?)";
int res = dataReaDao.getDao().getJdbcTemplate().update(sql,"00006","zhaoqi","21","1997-07-21");
if(res>0) {
System.out.println("成功插入一条数据!");
}else {
System.out.println("数据插入失败!");
}
}
}
运行main方法,输出成功插入
查看数据库
- 批量处理数据,batchUpdate方法第二参数是一个元素为Object[]数组类型的List集合
package cn.java.data;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class mainRun {
public static void main(String arg[]) {
//启动IOC容器
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取dao
DataReaDao dataReaDao = (DataReaDao) ctx.getBean("DataReaDao");
String sql="update student set name = \"zhang\" where id = ?";
List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add(new Object[]{1});
batchArgs.add(new Object[]{2});
batchArgs.add(new Object[]{3});
dataReaDao.getDao().getJdbcTemplate().batchUpdate(sql, batchArgs);
}
}