• 使用JdbcTemplate访问数据库


    参考源端:https://blog.csdn.net/liaodehong/article/details/76974827

    今天用Spring Boot访问一下数据库,并且把数据返回到页面中,进行增删改查操作。主要介绍springboot通过jdbc访问关系型MySQL,通过spring的JdbcTemplate去访问。

    创建mysql:

    [sql] view plain copy
     
    1. CREATE TABLE `users` (  
    2.   `id` INT(11) NOT NULL AUTO_INCREMENT,  
    3.   `name` VARCHAR(20) NOT NULL,  
    4.   `age` INT,  
    5.   PRIMARY KEY (`id`)  
    6. ) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;  
    7. INSERT INTO `users` VALUES ('1', 'aaa', 18);  
    8. INSERT INTO `users` VALUES ('2', 'bbb', 19);  

    数据源配置

    在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式。

    首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置:

    [java] view plain copy
     
    1. <dependency>  
    2.     <groupId>org.springframework.boot</groupId>  
    3.     <artifactId>spring-boot-starter-jdbc</artifactId>  
    4. </dependency>  

    连接生产数据源

    以MySQL数据库为例,先引入MySQL连接的依赖包,在pom.xml中加入:

    [java] view plain copy
     
    1. <dependency>  
    2.     <groupId>mysql</groupId>  
    3.     <artifactId>mysql-connector-java</artifactId>  
    4.     <version>5.1.21</version>  
    5. </dependency>  
    src/main/resources/application.properties中配置数据源信息
    创建实体类
    [java] view plain copy
     
    1. public class Users {  
    2.     private Integer id;  
    3.     private String name;  
    4.     private Integer age;  
    创建service接口
    [java] view plain copy
     
    1. public interface UserServices {  
    2.     int add(Users users);  
    3.   
    4.     int update(Users users);  
    5.   
    6.     int delete(int id);  
    7.   
    8.     Users findUsersById(int id);  
    9.   
    10.     List<Users> findAccountList();  
    11.   
    12. }  
    创建dao实现
    [java] view plain copy
     
    1. @Repository  
    2. public class UserDao implements UserServices{  
    3.     @Autowired  
    4.     <span style="white-space:pre;"> </span>private JdbcTemplate jdbcTemplate;  
    5.     @Autowired  
    6.     private NamedParameterJdbcTemplate namedParameterJdbcTemplate_love;  
    7.     @Override  
    8.     public int add(Users users) {  
    9.         return jdbcTemplate.update("insert into users(name, age) values(?, ?)",users.getName(),users.getAge());  
    10.     }  
    11.   
    12.     @Override  
    13.     public int update(Users users) {  
    14.         return jdbcTemplate.update(" update users set name=?,age=? where id=?",users.getName(),users.getAge(),users.getId());  
    15.     }  
    16.   
    17.     @Override  
    18.     public int delete(int id) {  
    19.         // TODO Auto-generated method stub  
    20.         return 0;  
    21.     }  
    22.   
    23.     @Override  
    24.     public Users findUsersById(int id) {  
    25.         // TODO Auto-generated method stub  
    26.         return null;  
    27.     }  
    28.   
    29.     @Override  
    30.     public List<Users> findAccountList() {  
    31.         return namedParameterJdbcTemplate_love.query("select *from users",new BeanPropertyRowMapper(Users.class));  
    32.     }  
    33.       
    34.   
    35. }  
    创建controller
    [java] view plain copy
     
    1. @RestController  
    2. @RequestMapping("/users")  
    3. public class UsersController {  
    4.     @Autowired  
    5.     UserServices userServices;  
    6.       
    7.     @RequestMapping(value = "/list",method = RequestMethod.GET)  
    8.     public  List<Users> getUsers(){  
    9.        return userServices.findAccountList();  
    10.     }  
    11.       
    12. }  

    最后访问一下,看页面效果

     

    Spring Boot中使用JdbcTemplate访问数据库

    之前介绍了很多Web层的例子,包括构建RESTful API使用Thymeleaf模板引擎渲染Web视图,但是这些内容还不足以构建一个动态的应用。通常我们做App也好,做Web应用也好,都需要内容,而内容通常存储于各种类型的数据库,服务端在接收到访问请求之后需要访问数据库获取并处理成展现给用户使用的数据形式。

    本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例。

    数据源配置

    在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式。

    首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置:

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    嵌入式数据库支持

    嵌入式数据库通常用于开发和测试环境,不推荐用于生产环境。Spring Boot提供自动配置的嵌入式数据库有H2、HSQL、Derby,你不需要提供任何连接配置就能使用。

    比如,我们可以在pom.xml中引入如下配置使用HSQL

    <dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <scope>runtime</scope>
    </dependency>

    连接生产数据源

    以MySQL数据库为例,先引入MySQL连接的依赖包,在pom.xml中加入:

    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
    </dependency>

    src/main/resources/application.properties中配置数据源信息

    spring.datasource.url=jdbc:mysql://localhost:3306/test
    spring.datasource.username=dbuser
    spring.datasource.password=dbpass
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    连接JNDI数据源

    当你将应用部署于应用服务器上的时候想让数据源由应用服务器管理,那么可以使用如下配置方式引入JNDI数据源。

    spring.datasource.jndi-name=java:jboss/datasources/customers

    使用JdbcTemplate操作数据库

    Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用。

    举例:我们在创建User表,包含属性nameage,下面来编写数据访问对象和单元测试用例。

    • 定义包含有插入、删除、查询的抽象接口UserService
    public interface UserService {

    /**
    * 新增一个用户
    * @param name
    * @param age
    */
    void create(String name, Integer age);

    /**
    * 根据name删除一个用户高
    * @param name
    */
    void deleteByName(String name);

    /**
    * 获取用户总量
    */
    Integer getAllUsers();

    /**
    * 删除所有用户
    */
    void deleteAllUsers();

    }
    • 通过JdbcTemplate实现UserService中定义的数据访问操作
    @Service
    public class UserServiceImpl implements UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void create(String name, Integer age) {
    jdbcTemplate.update("insert into USER(NAME, AGE) values(?, ?)", name, age);
    }

    @Override
    public void deleteByName(String name) {
    jdbcTemplate.update("delete from USER where NAME = ?", name);
    }

    @Override
    public Integer getAllUsers() {
    return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class);
    }

    @Override
    public void deleteAllUsers() {
    jdbcTemplate.update("delete from USER");
    }
    }
    • 创建对UserService的单元测试用例,通过创建、删除和查询来验证数据库操作的正确性。

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringApplicationConfiguration(Application.class)
    public class ApplicationTests {

    @Autowired
    private UserService userSerivce;

    @Before
    public void setUp() {
    // 准备,清空user表
    userSerivce.deleteAllUsers();
    }

    @Test
    public void test() throws Exception {
    // 插入5个用户
    userSerivce.create("a", 1);
    userSerivce.create("b", 2);
    userSerivce.create("c", 3);
    userSerivce.create("d", 4);
    userSerivce.create("e", 5);

    // 查数据库,应该有5个用户
    Assert.assertEquals(5, userSerivce.getAllUsers().intValue());

    // 删除两个用户
    userSerivce.deleteByName("a");
    userSerivce.deleteByName("e");

    // 查数据库,应该有5个用户
    Assert.assertEquals(3, userSerivce.getAllUsers().intValue());

    }

    }

    上面介绍的JdbcTemplate只是最基本的几个操作,更多其他数据访问操作的使用请参考:JdbcTemplate API

    通过上面这个简单的例子,我们可以看到在Spring Boot下访问数据库的配置依然秉承了框架的初衷:简单。我们只需要在pom.xml中加入数据库依赖,再到application.properties中配置连接信息,不需要像Spring应用中创建JdbcTemplate的Bean,就可以直接在自己的对象中注入使用。

    本文完整示例

  • 相关阅读:
    HihoCoder#1513 : 小Hi的烦恼(五维数点 bitset 分块)
    cf914F. Substrings in a String(bitset 字符串匹配)
    BZOJ4503: 两个串(bitset字符串匹配)
    HDU5972Regular Number(ShiftAnd算法 bitset)
    BZOJ1563: [NOI2009]诗人小G(决策单调性 前缀和 dp)
    cf868F. Yet Another Minimization Problem(决策单调性 分治dp)
    BZOJ4709: [Jsoi2011]柠檬(决策单调性)
    cf633F. The Chocolate Spree(树形dp)
    BZOJ1044: [HAOI2008]木棍分割(dp 单调队列)
    2、RenderScript的计算(2013.05.07)
  • 原文地址:https://www.cnblogs.com/pejsidney/p/8969319.html
Copyright © 2020-2023  润新知