首先創建數據庫 test01
/創建學生表
CREATE TABLE `student` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`studentName` VARCHAR(30) DEFAULT NULL COMMENT '姓名',
`email` VARCHAR(30) DEFAULT NULL COMMENT '郵箱',
`deptId` INT(11) DEFAULT NULL COMMENT '宿舍號',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
在eclipse 中創建 maven項目 jdk1.8.0_181 + 4.3.20.RELEASE + mysql5.1.38
pom.xml文件內容如下 裏面最主要是spring 和 mysql 和 junit的依賴 必須保證添加
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bocan</groupId>
<artifactId>test01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>test01</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.3.20.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- spring 核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring 上下文對象 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring 集成的jdbc 操作數據庫 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!-- 日誌 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.5</version>
<scope>test</scope>
</dependency>
<!-- mysql 依賴 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<!-- 統一jdk版本爲jdk1.8 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
接下來是dataSource.properties的內容 文件保存在 src/main/resources目錄下
jdbc.user=root
jdbc.password=123456
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///test01
#jdbc.initPoolSize=5
#jdbc.maxPoolSize=10
接下來就是applicationContext.xml 的內容 文件保存在 src/main/resources目錄下
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 導入資源文件 -->
<context:property-placeholder location="classpath:dataSource.properties"></context:property-placeholder>
<!-- 配置數據源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClass}"></property>
<property name="url" value="${jdbc.jdbcUrl}"></property>
<property name="username" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<!-- <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property> -->
</bean>
<!-- 配置jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="mainJdbc" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
</beans>
接下來創建student實體類
package com.bocan.test01;
/**
* 學生實體類
*/
public class Student {
private int id;
private String studentName;
private String email;
private int deptId;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getDeptId() {
return deptId;
}
public void setDeptId(int deptId) {
this.deptId = deptId;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", studentName='" + studentName + '\'' +
", email='" + email + '\'' +
", deptId=" + deptId +
'}';
}
}
接下來 創建一個測試的基類
package com.bocan.test01;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* spring 測試基類
* @author asus
*
*/
@RunWith(SpringJUnit4ClassRunner.class) //使用junit4進行測試
@ContextConfiguration(locations={"classpath:applicationContext.xml"}) //加載配置文件
public class BaseJunit4Test {
}
接下來寫測試類
package com.bocan.test01;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
/**
* 測試類
* @author asus
*
*/
public class JdbcTest01 extends BaseJunit4Test {
//自動注入
@Autowired
private DataSource dataSource;
//自動注入
@Autowired
private JdbcTemplate jdbcTemplate;
//自動注入
@Autowired
private NamedParameterJdbcTemplate mainJdbc;
@Test
public void testConnection(){
try {
System.out.println(dataSource.getConnection());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void testUpdate(){
String sql = "UPDATE student SET email = ?,deptId=? WHERE id = ?";
jdbcTemplate.update(sql,"[email protected]",2,2);
System.out.println("test complete");
}
/**
* 從數據庫中獲取一條記錄,實際得到一個對象
* 需要調用中這個方法: queryForObject(java.lang.String sql,@NotNull org.springframework.jdbc.core.RowMapper<T> rowMapper,java.lang.Object... args)
* 1.其中的RowMapper指定如何去映射結果集的行,常用的實現類爲BeanPropertyRowMapper<>(Student.class);
* 2.使用SQL中的列的別名完成列名和類的屬性名的映射
* 3.不支持級聯屬性
*/
@Test
public void testQueryForObject(){
String sql = "SELECT id,studentName,email ,deptId FROM student WHERE id = ?";
RowMapper<Student> rowMapper = new BeanPropertyRowMapper<>(Student.class);
Student student = jdbcTemplate.queryForObject(sql, rowMapper,1);
System.out.println(student);
}
/**
* 查找實體類集合
*/
@Test
public void testQueryForList(){
//編寫sql語句
String sql ="SELECT id,studentName,email ,deptId FROM student WHERE id > ?";
RowMapper<Student> rowMapper = new BeanPropertyRowMapper<>(Student.class);
List<Student> list = jdbcTemplate.query(sql, rowMapper,0);
System.out.println(list);
}
/**
* 統計
*/
@Test
public void testQueryForCount(){
String sql = "SELECT COUNT(id) FROM student";
int count = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println("記錄數:"+count);
}
@Test
public void testNamedParameterJdbcTemplate(){
//sql語句 id 是自增的
String sql = "INSERT INTO student(studentName,email,deptId) VALUES(:name,:email,:deptId)";
//存儲參數 鍵值對 的字典
Map<String,Object> paramMap = new HashMap<String,Object>();
//將要賦予的鍵值對 存儲到paramMap 不考慮插入參數的順序 但是要保證類型正確
paramMap.put("email", "[email protected]");
paramMap.put("deptId", 2);
paramMap.put("name", "Harden");
mainJdbc.update(sql, paramMap);
}
/**
* 將java代碼創建的實體類對象 直接插入到數據庫表中
*/
@Test
public void testNamedParameterJdbcTemplate2(){
//這裏要注意 插入的sql語句中 value中的參數名:studentName,:email,:deptId 必須與 Student類中的變量一致
String sql = "INSERT INTO student(studentName,email,deptId) VALUES(:studentName,:email,:deptId)";
//創建實體類
Student student = new Student();
//student.setId(5); 主鍵自增 可不寫
student.setStudentName("Tom");
student.setEmail("[email protected]");
student.setDeptId(1);
SqlParameterSource paramSource = new BeanPropertySqlParameterSource(student);
mainJdbc.update(sql, paramSource);
}
@Test
public void testDelete(){
//刪除 類似這種刪除對象 通常直接 寫完整語句就行 在方法名後的括號 傳入參數,然後拼接到SQL語句後面
String sql = "DELETE FROM student WHERE id = 4";
//method1 方法1
//mainJdbc.update(sql, new HashMap<String,Object>());
//方法2 方便點
mainJdbc.getJdbcOperations().update(sql);
}
}
這個我參考這大神的代碼在結合自己的理解 https://blog.csdn.net/a1610770854/article/details/51914147