SpringJdbc操作練習

首先創建數據庫 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章