zoukankan      html  css  js  c++  java
  • 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等操作。

  • 相关阅读:
    Cheat Engine 创建线程
    Cheat Engine 人造指针
    Cheat Engine 特征码
    Cheat Engine 自动注入
    Cheat Engine 作弊表框架代码
    Cheat Engine 修改汇编指令
    Shell 选择排序
    Shell 冒泡排序
    Selenium API常用方法
    Selenium数据驱动
  • 原文地址:https://www.cnblogs.com/superslow/p/9108348.html
Copyright © 2011-2022 走看看