javascript
Springboot 连接数据库
web項目連接數據庫在之前以及發過,但是在springboot中又有了其他的一些操作,簡化了連接過程
1.配置pom
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 添加jdbc與mysql --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>2.1.application.properties
spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=true spring.datasource.username=root spring.datasource.password=root2.2.application.yml(作用同上)
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=true username: rootpassword: root3.date.java
1 package com.example.Date; 2 3 public class Date { 4 private int id; 5 private String name; 6 private int age; 7 private String address; 8 9 public Date() { 10 11 } 12 public Date(int id,String name,int age,String address) { 13 super(); 14 this.id=id; 15 this.name=name; 16 this.age=age; 17 this.address=address; 18 } 19 public int getId() { 20 return id; 21 } 22 public void setId(int id) { 23 this.id = id; 24 } 25 public String getName() { 26 return name; 27 } 28 public void setName(String name) { 29 this.name = name; 30 } 31 public int getAge() { 32 return age; 33 } 34 public void setAge(int age) { 35 this.age = age; 36 } 37 public String getAddress() { 38 return address; 39 } 40 public void setAddress(String address) { 41 this.address = address; 42 } 43 @Override 44 public String toString() { 45 return "NewBean:[id=" + id + ", name=" + name + ", age=" + age + "address" + address + "]"; 46 } 47 }4.啟動類(連接數據庫)
1 package com.example.Date; 2 3 import java.sql.*; 4 5 import javax.sql.DataSource; 6 7 import org.springframework.boot.SpringApplication; 8 import org.springframework.boot.autoconfigure.SpringBootApplication; 9 import org.springframework.context.ConfigurableApplicationContext; 10 11 12 @SpringBootApplication 13 public class DateApplication { 14 15 public static void main(String[] args) throws SQLException{ 16 ConfigurableApplicationContext context=SpringApplication.run(DateApplication.class, args); 17 DataSource ds=context.getBean(DataSource.class); 18 Connection connection = ds.getConnection(); 19 //System.out.println(connection.getCatalog()); 20 connection.close(); 21 } 22 }?5.控制類(數據庫數據的增刪改查)
1 package com.example.Date; 2 3 import java.util.Iterator; 4 import java.util.List; 5 import java.util.Map; 6 import java.util.Set; 7 import java.util.Map.Entry; 8 9 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.jdbc.core.JdbcTemplate; 11 import org.springframework.stereotype.Repository; 12 import org.springframework.web.bind.annotation.RequestMapping; 13 import org.springframework.web.bind.annotation.RestController; 14 15 @RestController 16 @Repository 17 @RequestMapping("Dao") 18 public class DateDao { 19 20 @Autowired 21 private JdbcTemplate jdbcTemplate; 22 23 @RequestMapping("add") 24 public String addDate(String name,int age,String address) { 25 String sql = "insert into person value(?,?,?,?)"; 26 //表結構:id(int、自增),name(varchar 10),age(int 10),address(varchar 10) 27 //int rows = jdbcTemplate.update(sql, null, name, age, address); 28 jdbcTemplate.update(sql, null, name, age, address); 29 return "數據添加成功"; 30 } 31 @RequestMapping("reduce") 32 public String reduceDate(String name) { 33 String sql = "DELETE FROM person WHERE name = ?"; 34 //表結構:id(int、自增),name(varchar 10),age(int 10),address(varchar 10) 35 //int rows = jdbcTemplate.update(sql, null, name, age, address); 36 jdbcTemplate.update(sql,name); 37 return "數據刪除成功"; 38 } 39 40 @RequestMapping("changebyname") 41 public String changeDate(String name,String change) { 42 String sql ="UPDATE person SET name= ? WHERE name = ?"; 43 //jdbcTemplate.execute(sql); 44 jdbcTemplate.update(sql, change, name); 45 return "數據修改成功"; 46 } 47 48 @RequestMapping("findbyname") 49 public Date findDate(String name) { 50 String sql = "select * from person where name = ?"; 51 //新建MyRowMapper類實現RowMapper接口,重寫mapRow方法,指定返回User對象 52 Date date = jdbcTemplate.queryForObject(sql, new MyRowMapper(), name); 53 return date; 54 } 55 56 @RequestMapping("find") 57 public List<Map<String, Object>> findDate() { 58 String sql = "select * from person"; 59 List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); 60 for (Map<String, Object> map : list) { 61 Set<Entry<String, Object>> entries = map.entrySet( ); 62 if(entries != null) { 63 Iterator<Entry<String, Object>> iterator = entries.iterator( ); 64 while(iterator.hasNext( )) { 65 Entry<String, Object> entry =(Entry<String, Object>) iterator.next( ); 66 Object key = entry.getKey( ); 67 Object value = entry.getValue(); 68 System.out.println(key+":"+value); 69 } 70 } 71 } 72 return list; 73 } 74 }6.實現RowMapper接口,返回Date對象(用于DAO中數據查詢返回)
1 package com.example.Date; 2 3 import org.springframework.jdbc.core.RowMapper; 4 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 8 /** 9 * 實現RowMapper接口,返回Date對象 10 * */ 11 public class MyRowMapper implements RowMapper<Date>{ 12 13 @Override 14 public Date mapRow(ResultSet resultSet, int i) throws SQLException { 15 // 獲取結果集中的數據 16 String name = resultSet.getString("name"); 17 int age = resultSet.getInt("age"); 18 String address = resultSet.getString("address"); 19 // 把數據封裝成User對象 20 Date date = new Date(); 21 date.setName(name); 22 date.setAge(age); 23 date.setAddress(address); 24 return date; 25 } 26 }附 :1.?Spring JdbcTemplate方法詳解
? ?JdbcTemplate主要提供以下五類方法:
- execute方法:可以用于執行任何SQL語句,一般用于執行DDL語句;
- update方法及batchUpdate方法:update方法用于執行新增、修改、刪除等語句;batchUpdate方法用于執行批處理相關語句;
- query方法及queryForXXX方法:用于執行查詢相關語句;
- call方法:用于執行存儲過程、函數相關語句。
? ?JdbcTemplate類支持的回調類:
- 預編譯語句及存儲過程創建回調:用于根據JdbcTemplate提供的連接創建相應的語句;
? ? ? ? ?PreparedStatementCreator:通過回調獲取JdbcTemplate提供的Connection,由用戶使用該Conncetion創建相關的PreparedStatement;
? ? ? ? ?CallableStatementCreator:通過回調獲取JdbcTemplate提供的Connection,由用戶使用該Conncetion創建相關的CallableStatement;
- 預編譯語句設值回調:用于給預編譯語句相應參數設值;
? ? ? ? ?PreparedStatementSetter:通過回調獲取JdbcTemplate提供的PreparedStatement,由用戶來對相應的預編譯語句相應參數設值;
? ? ? ? ?BatchPreparedStatementSetter:;類似于PreparedStatementSetter,但用于批處理,需要指定批處理大小;
- 自定義功能回調:提供給用戶一個擴展點,用戶可以在指定類型的擴展點執行任何數量需要的操作;
? ? ? ? ?ConnectionCallback:通過回調獲取JdbcTemplate提供的Connection,用戶可在該Connection執行任何數量的操作;
? ? ? ? ?StatementCallback:通過回調獲取JdbcTemplate提供的Statement,用戶可以在該Statement執行任何數量的操作;
? ? ? ? ?PreparedStatementCallback:通過回調獲取JdbcTemplate提供的PreparedStatement,用戶可以在該PreparedStatement執行任何數量的操作;
? ? ? ? ?CallableStatementCallback:通過回調獲取JdbcTemplate提供的CallableStatement,用戶可以在該CallableStatement執行任何數量的操作;
- 結果集處理回調:通過回調處理ResultSet或將ResultSet轉換為需要的形式;
? ? ? ? ?RowMapper:用于將結果集每行數據轉換為需要的類型,用戶需實現方法mapRow(ResultSet rs, int rowNum)來完成將每行數據轉換為相應的類型。
? ? ? ? ?RowCallbackHandler:用于處理ResultSet的每一行結果,用戶需實現方法processRow(ResultSet rs)來完成處理,在該回調方法中無需執行rs.next(),該操作由JdbcTemplate來執行,用戶只需按行獲取數據然后處理即可。
? ? ? ? ?ResultSetExtractor:用于結果集數據提取,用戶需實現方法extractData(ResultSet rs)來處理結果集,用戶必須處理整個結果集;
2. getJdbcTemplate中execute和update的區別
1、update可以帶參數,而execute不可以。例如:
jdbcTemplate.update("update TableA set name = 'Andy’ where id=?", new Object[] {new Integer(3)}); jdbcTemplate.execute("update TableA set name = 'Andy’ where id=3"); 2、update背后是借助于java.sql.PreparedStatement完成,而execute是基于java.sql.Statement。
3、update返回int, 即受影響的行數。execute返回void
4、execute不接受參數,無返回值,適用于create和drop table。
? ? ?update可以接受參數,返回值為此次操作影響的記錄數,適合于insert, update, 和delete等操作。
?
轉載于:https://www.cnblogs.com/superslow/p/9108348.html
總結
以上是生活随笔為你收集整理的Springboot 连接数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git错误fatal: remote o
- 下一篇: virtualBox linux操作系统