Spring Boot 中使用 JdbcTemplate

1.什么是 JDBC Template 

    JDBC Template 的全限定名为 org.springframework.jdbc.core.JdbcTemplate 。它是Spring 框架中 对数据库访问技术JDBC 对封装的对象。
要使用它需要在pom.xml 中引入
      < dependency >
         < groupId > org.springframework </ groupId >
         < artifactId > spring- jdbc </ artifactId >
         </ dependency >

JdbcTemplate 提供的数据库操作方法主要分五类:
    execute 方法,它可以执行任何的SQL语句;
    update 与bathUpdate 方法,update它是用于新删改单条信息的,bathUpdate则是对于多条信息使用;
    query 与 queryFor** 方法,主要用于查询;
    call 方法,用于执行存储过程或一些函数。

2.配置数据源

    在这里使用HikariCP 这个数据库连接池 ,要使用它需要在pom.xml 中引入
      < dependency >
         < groupId > com.zaxxer </ groupId >
         < artifactId > HikariCP </ artifactId >
         </ dependency >

   本次使用的数据库为MySQL ,需要引入它的驱动类
      < dependency >
         < groupId > mysql </ groupId >
         < artifactId > mysql -connector-java </ artifactId >
         </ dependency >

     在src/main/resources 路径下创建一个名叫 appliction.properties 的文件,里面写上数据库的一些配置信息
datasource.url= jdbc:mysql://127.0.0.1:3306/hlm_test?useUnicode=true&characterEncoding=UTF-8
datasource.username= root
datasource.password= admin
datasource.driver-class= com.mysql.jdbc.Driver

    至此一些准备工作就做好了,接下来先要创建一个数据源。我们利用 Java Config 来创建。
package com.hlm.core.datasource;

import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import com.zaxxer.hikari.HikariDataSource;

@Configuration
public class DataSourceConfig {
    
    @Bean(name="dataSource")
    public DataSource datasource(Environment env){
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl(env.getProperty("datasource.url"));
        ds.setUsername(env.getProperty("datasource.username"));
        ds.setPassword(env.getProperty("datasource.password"));
        ds.setDriverClassName(env.getProperty("datasource.driver-class"));
        return ds ;
    }
}
    在写Config类的时候一个不注意在启动时就会报:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-06-18 14:21:11.128 ERROR 15984 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   :
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to auto-configure a DataSource: 'spring.datasource.url' is not specified and no embedded datasource could be auto-configured.
Reason: Failed to determine a suitable driver class
Action:
Consider the following:
     If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
     If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).
这是由于datasource 方法上漏写了Bean 注解。

3.查询例子

下面简单演示一个查询的例子:

        本例的调用顺序是:Controller——>Service——>Dao。数据库的相关操作都在Dao ,因为例子并无其他复杂逻辑,所以Service 只是单纯调一个Dao     而已。
        先看Dao 中的数据库相关操作的代码
    Dao接口
package com.hlm.dao;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;

import com.hlm.bo.User;


public  interface UserDao {
    
    /**
     * 查询用户总数
     * @return
     */
    public int countUser();

    /**
     * 查询所有用户
     * @return
     */
    public List<User> findAllUser();

}

    实现类
package com.hlm.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;

import com.hlm.bo.User;
import com.hlm.core.dao.BaseDao;
import com.hlm.dao.UserDao;
import com.hlm.mapper.UserMapper;


@Component
public  class UserDaoImpl extends BaseDao implements UserDao{
    
    @Override
    public int countUser() {

        int count = jdbcTemplate.queryForObject("select count(*) from hlm_users", Integer.class);
        return count;
    }
    @Override
    public List<User> findAllUser() {
        String sql = "select * from hlm_users ";
        List<User> users = jdbcTemplate.query(sql, new UserMapper());
        return users;
    }
    
}


    Mapper(一个将数据库查询得到的对象转为自己的对象的方法类)
package com.hlm.mapper;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

import com.hlm.bo.User;

public class UserMapper implements RowMapper<User>{

    @Override
    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
        User bo = new User();
        bo.setId(rs.getInt("id"));
        bo.setCreateTime(rs.getDate("create_time"));
        bo.setPassword(rs.getString("password"));
        bo.setSex(rs.getInt("sex"));
        bo.setToken(rs.getString("token"));
        bo.setTokenType(rs.getInt("token_type"));
        bo.setUserCode(rs.getString("user_code"));
        bo.setUserName(rs.getString("user_name"));
        
        return bo;
    }        
}

    数据表结构
CREATE TABLE `hlm_users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_code` varchar(40) NOT NULL COMMENT '用户唯一识别码',
  `user_name` varchar(50) NOT NULL COMMENT '用户姓名',
  `sex` int(3) DEFAULT NULL COMMENT '性别',
  `token` varchar(40) NOT NULL COMMENT '注册令牌,手机或邮箱',
  `create_time` date DEFAULT NULL COMMENT '注册时间',
  `token_type` int(3) NOT NULL COMMENT '令牌类型。0为手机,1为邮箱',
  `password` varchar(30) NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`,`user_code`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8


Controller 代码
package com.hlm.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.hlm.bo.User;
import com.hlm.service.UserService;

@Controller
@RequestMapping("/user")
public class HlmUserController {
    
    @Autowired
    private UserService userService;
    
    @RequestMapping("/count")
    public ModelAndView userCount(HttpServletRequest req ,HttpServletResponse resp){
        
        ModelAndView mv = new ModelAndView();
        int count = userService.countUser();
        List< User> list = userService.findAllUser();
        mv.addObject("count", count);
        mv.addObject("list", list);
        mv.setViewName("/usercount");
        return mv;
    }
}

页面代码,userCount.ftl
<html>
<body>
  <p> 用户总人数为:</p>
  <p> ${count }</p>
  <p>用户分别是:</p>
  <#if list?exists>
  <#list list as user>
  <p>用户名: ${user.userName }</p>
  <p>密码: ${user.password }</p>
  </#list>
  </#if>
</body>
</html>

运行结果:


猜你喜欢

转载自blog.csdn.net/mottohlm/article/details/80724031