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=root

2.2.application.yml(作用同上)

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=true
    username: root
    password: root

3.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等操作。

 

posted @ 2018-05-29 22:35  阿衰问问  阅读(463)  评论(0编辑  收藏  举报