作者 | 阿文,責編 | 郭芮
頭圖 | CSDN 下載自視覺中國
作為一名程式設計師,CURD(增刪改查)是一件必不可少的事情,甭管你是初級程式設計師還是高級程式設計師都會和資料庫打交道。那麼在Java中如何通過Spring 框架來對資料庫進行操作呢?本文將帶你一起來學習。
Spring框架針對資料庫提供了JdbcTemplate 類,JdbcTemplate 是Spring 數據抽象層的基礎,其他更高層次的抽象類都是構建在其基礎之上,JdbcTemplate 是Spring JDBC的核心類。JdbcTemplate 繼承自抽象類JdbcAccessor,同時實現了JdbcOperations 接口,JdbcTemplate定義在了JdbcTemplate類中從而可以使用增刪改查來對資料庫進行操作。JdbcTemplate 的直接父類是JdbcAccessor,它提供了一些訪問資料庫時所需要使用的公共屬性,包括DataSource以及SQLExceptionTranslator 等。前者用於獲取資料庫連接以及引入對資料庫連接的緩衝池以及分布式事務等支出。後者是對SQLException 進行轉譯工作。
首先,我來說下本次文檔所需要準備的工具,具體如下:
idea 社區版maven,idea 自帶的mysql 或Mariadb接下來,我們先簡單介紹下Spring JDBC 模塊,它主要包括core、dataSource、object、support四個包,分別提供的功能如下:
core 包括JDBC的核心功能,例如JdbcTemplate類、simpleJdbcInsert類、simpleJdbcCall 類以及NamedParameterJdbcTemplate類。dataSource 包括了訪問資料庫的實用工具類。object 以OOP的方式訪問資料庫,它允許執行查詢操作並將返回結果作為業務對象,可以在數據表和業務對象的屬性直接映射查詢關係。support 包括core 和object包的支持類,例如提供一些SQLException類。我們了解了這些模塊的功能,接來下我們看看怎麼去配置JDBC,下面是 JDBC的XML配置文件:
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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配置數據源 --><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><!--資料庫驅動 --><propertyname="driverClassName"value="com.mysql.jdbc.Driver" /><!--連接資料庫的ur1 --><propertyname="url"value="jdbc:mysql://localhost:3306/spring_db" /><!--連接資料庫的用戶名 --><propertyname="username"value="root" /><!--連接資料庫的密碼 --><propertyname="password"value="root" /></bean><!--2配置JDBC模板 --><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"><!--默認必須使用數據源 --><propertyname="dataSource"ref="dataSource" /></bean></beans>
在上述xml 文件中的beans 中定義了兩個bean,分別是dataSource、jdbcTemplate。
其中dataSource的類是由org.springframework.jdbc.datasource.DriverManagerDataSource 提供,包含了4個屬性分別對應的是:
driverClassName,它是資料庫的驅動,值是com.mysql.jdbc.Driver;url 資料庫的訪問地址,如上所示,jdbc:mysql://localhost:3306/spring_db 中的localhost 為你的資料庫地址 3306 為資料庫的連接斷開,斜槓後面的spring_db 表示需要連接的資料庫名稱;username 資料庫的用戶名;password 資料庫的密碼;下面我們通過實例的方式來講解如何通過JDBC來對資料庫進行操作,我們需要進行以下準備工作。
首先,我們需要配置maven的pom.xml 下載所需要的jar包,包括spring-jdbc、mysql-connector-java:
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.6.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency>
第二步,需要有一個可以反問的資料庫,比如我的資料庫設置密碼為root
mysqladmin -u root password root
第三步.創建一個spring_db 的表,並且需要授權用戶遠程訪問,如果是本地這一步可以不用做
MariaDB [(none)]> create database spring_db;Query OK, 1 row affected (0.000 sec)
第四步,在idea 工程中新建一個com.ssm.jdbc 的包,並在該包中創建一個JdbcTempTest的測試類,首先我們加載xml 配置,配置文件就是上面的xml配置文件,我們創建一個數據表為user_table,使用jdbctemp.execute(String s) 方法執行SQL語句。
@TestpublicvoidTestJdbcTemplate(){//加載配置 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取JdbcTemplate實例 JdbcTemplate jdbctemp = (JdbcTemplate) applicationContext.getBean("jdbcTemplate"); jdbctemp.execute("create table user_table(" +"id int primary key auto_increment," +"username varchar(80)," +"password varchar(40))"); }
我們執行該測試類,然後進入資料庫,我們可以看到該表已經被創建出來了:
MariaDB [(none)]> use spring_db;Reading table information for completion of table and column namesYou can turn off this feature toget a quicker startup with -ADatabase changedMariaDB [spring_db]> show tables;+---------------------+| Tables_in_spring_db |+---------------------+| user_table |+---------------------+1 row inset (0.000 sec)MariaDB [spring_db]>
下面,我們通過jdbc 來實現增刪改查操作,首先,我們要創建一個類,名字為User,這個User 類中包含了用戶的id、用戶名和密碼信息,並設置其set和get屬性:
package com.ssm.jdbc;publicclassUser{private Integer id;private String username;private String password;public Integer getId(){return id; }publicvoidsetId(Integer id){this.id = id; }public String getUsername(){return username; }publicvoidsetUsername(String username){this.username = username; }public String getPassword(){return password; }publicvoidsetPassword(String password){this.password = password; }public String toString(){return"User [id=" + id + ", username=" + username + ", password=" + password + "]"; }}
然後我們創建一個UserDao 接口,該接口定義了添加、更新、刪除、根據ID查詢和查詢所有用戶的方法:
package com.ssm.jdbc;import java.util.List;publicinterfaceUserDao{publicintaddUser(User user);publicintupdateUser(User user);publicintdeleteUser(int id);//通過id查詢用戶public User findUserById(int id);//查詢所有用戶public List<User> findAllUser();}
接下來,我們來對UserDao的接口進行實現,在這個方法中我們對具體的增刪改查邏輯進行設置,直接看代碼吧:
package com.ssm.jdbc;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import java.util.List;public classUserDaoImplimplementsUserDao{ private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate; }@Override public int addUser(User user) {String sql="insert into user_table(username,password) value(?,?)";Object[] obj=newObject[]{ user.getUsername(), user.getPassword() };intnum=this.jdbcTemplate.update(sql,obj);returnnum; }@Override public int updateUser(User user) {String sql="update user_table set username=?,password=? where id=?";Object[] params=newObject[]{ user.getUsername(), user.getPassword(), user.getId() };intnum=this.jdbcTemplate.update(sql,params);returnnum; }@Override public int deleteUser(int id) {String sql="delete from user_table where id=?";intnum=this.jdbcTemplate.update(sql,id);returnnum; }@Override public User findUserById(int id) {String sql="select * from user_table where id=?"; RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);returnthis.jdbcTemplate.queryForObject(sql,rowMapper,id); }@Override public List<User> findAllUser() {String sql="select * from user_table"; RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);returnthis.jdbcTemplate.query(sql,rowMapper); }}
然後我們在jdbc.xml 中加入bean,加入UserDao:
<!-- 定義id為userDao的Bean --><beanid="userDao"class="com.ssm.jdbc.UserDaoImpl"><!--將 jdbcTemplate注入到 userDao實例中 --><propertyname="jdbcTemplate"ref="jdbcTemplate" /></bean>
好了,一切準備就緒,我們接來下通過測試類來測試下具體的增刪改查。
首先來測試下添加用戶方法,如圖下所示:
@TestpublicvoidaddUserTest(){//加載jdbc.xml 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取UserDao實例 UserDao userDao = (UserDao) applicationContext.getBean("userDao");//創建user實例 User user = new User();//設置屬性 user.setUsername("張三"); user.setPassword("123");//添加用戶int num = userDao.addUser(user);if (num > 0) { System.out.println("Success insert "+num+" data"); }else { System.out.println("erro"); } }
更新用戶:
@TestpublicvoidupdateUserTest(){//加載jdbc.xml 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取UserDao實例 UserDao userDao = (UserDao) applicationContext.getBean("userDao");//創建user實例 User user = new User();//設置屬性 user.setId(1); user.setUsername("李四"); user.setPassword("12345");//更新用戶信息int num = userDao.updateUser(user);if (num > 0) { System.out.println("Success update "+num+" data"); }else { System.out.println("erro"); } }
刪除用戶:
@TestpublicvoiddelUserTest(){//加載jdbc.xml 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取UserDao實例 UserDao userDao = (UserDao) applicationContext.getBean("userDao");//刪除,傳入ID值int num = userDao.deleteUser(1);if (num > 0) { System.out.println("Success delete "+num+" data"); }else { System.out.println("erro"); } }
查詢用戶信息,包括了根據ID查詢和查詢所有:
@TestpublicvoidfindUserTest(){//加載jdbc.xml 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取UserDao實例 UserDao userDao = (UserDao) applicationContext.getBean("userDao");//根據ID查詢用戶 User user = userDao.findUserById(2); System.out.println(user);}@TestpublicvoidfindAllUserTest(){//加載jdbc.xml 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//獲取UserDao實例 UserDao userDao = (UserDao) applicationContext.getBean("userDao");//根據ID查詢用戶 List<User> list = userDao.findAllUser();for (User user:list){ System.out.println(user); }}
好了,以上就是關於如果使用Spring JDBC 操作資料庫實現增刪改查的方法。