资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Springboot集成jdbcTemplate的用法

这篇文章主要讲解了Springboot集成jdbcTemplate的用法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

在长沙等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、网站设计 网站设计制作按需搭建网站,公司网站建设,企业网站建设,高端网站设计,全网营销推广,外贸营销网站建设,长沙网站建设费用合理。

一 说明

实际工作中其实很少会用到jdbcTemplate去操作数据库,因为其使用方式不是很灵活,sql的拼接能力不强;实际上jdbcTemplate是属于spring自带的数据层模板,在spring中可以说是比较失败的一个案例,原因是当代流行mybatis当做持久层访问数据库,其优越的sql拼接能力、动态sql、半自动化映射、和易于sql优化的特性,深受广大互联网公司的喜爱,并且mybatis的市场占有率不断的上升,hibernate的市场不断缩水,可以说hibernate已经这种强映射关系的持久层模型已经走到互联网时代的尽头了。

本文写jdbcTemplate只是当作大家的一个入门学习,可以说以后你很难用到这门技术,所以不会深入研究,有兴趣的朋友可以专栏我其他关于springboot的集成系列。本次演示使用jdk1.8,MySQL5.6,springboot2.1。​

二数据库建表和实体

user表,里面有三个属性 用户id、 用户名和电话号码。

CREATE TABLE `user` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
 `name` varchar(255) DEFAULT NULL COMMENT '用户名',
 `telephone` varchar(255) DEFAULT NULL COMMENT '用户电话',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

user表对应的实体:

/**
 * @Author lsc
 * @Description 

pojo

* @Date 2019/11/2 10:16 */ public class User { // id private Long id; // 姓名 private String name; // 电话 private String telephone; // 省略 set get }

三 dao层

对于使用jdbcTemplate,我们的dao层需要接口定义crud操作方法,其实现类则进行具体的sql操作,很多开发人员没有这种解耦的思想,往往就直接在servic层操作sql,可以说没有完整的一个知识体系,往往会造成后期维护困难,项目无法进行下去;

3.1 dao接口

/**
 * @Author lsc
 * @Description 

user dao 接口

* @Date 2019/11/2 10:19 */ public interface UserDao { // 添加 int addUser(User user); // 改 int updateUser(User user); // 删 int deleteUser(Long id); // 通过id查询 User findUserbyId(Long id); }

3.2 dao层实现类

dao层的实现类才是具体操作sql的地方。

/**
 * @Author lsc
 * @Description 

user 持久层

* @Date 2019/11/2 10:22 */ @Repository public class UserDaoImpl implements UserDao { // 注入jdbc模板 @Autowired private JdbcTemplate jdbcTemplate; @Override public int addUser(User user) { // sql String sql = "insert into user (name,telephone) values (?,?)"; // jdbc insert return jdbcTemplate.update(sql,user.getName(),user.getTelephone()); } @Override public int updateUser(User user) { // sql String sql = "update user set name = ?, telephone = ? where id = ?"; // jdbc updae return jdbcTemplate.update(sql,user.getName(),user.getTelephone(),user.getId()); } @Override public int deleteUser(Long id) { // sql String sql = "delete from user where id = ?"; // delete return jdbcTemplate.update(sql,id); } @Override public User findUserbyId(Long id) { // sql String sql = "select * from user where id = ?"; // params Object[] params = new Object[]{id}; // rowMapper BeanPropertyRowMapper rowMapper = new BeanPropertyRowMapper(User.class); // jdbc query List query = jdbcTemplate.query(sql, params, rowMapper); // return user return query.get(0); } }

四 service层

4.1 service层接口

service层接口定义业务的方法,提供给控制层调用。

public interface UserService {

  // 添加
  int addUser(User user);
  // 改
  int updateUser(User user);
  // 删
  int deleteUser(Long id);
  // 通过id查询
  User findUserbyId(Long id);
}

4.2 service层实现类

service层的实现类才是具体写业务逻辑代码的地方。

/**
 * @Author lsc
 * @Description 

user service

* @Date 2019/11/2 10:37 */ @Service public class UserServiceImpl implements UserService { @Autowired UserDao userDao; @Override public int addUser(User user) { return userDao.addUser(user); } @Override public int updateUser(User user) { return userDao.updateUser(user); } @Override public int deleteUser(Long id) { return userDao.deleteUser(id); } @Override public User findUserbyId(Long id) { return userDao.findUserbyId(id) ; } }

五 controller

这是一个简单的restful层的api,实现crud功能。

/**
 * @Author lsc
 * @Description 

user 控制层

* @Date 2019/11/2 10:43 */ @RestController public class UserController { @Autowired UserService userService; // 查询user @GetMapping("user/{id}") public User getUser(@PathVariable Long id){ return userService.findUserbyId(id); } // 添加user @PostMapping("user") public int addUser(@RequestBody User user){ return userService.addUser(user); } //修改 user @PutMapping("user/{id}") public int updateUser(@PathVariable Long id,@RequestBody User user){ user.setId(id); return userService.updateUser(user); } // 删除user @DeleteMapping("user/{id}") public int deleteUser(@PathVariable Long id){ return userService.deleteUser(id); } }

六 配置文件

配置文件不使用properties的原因是yml文件的语法格式更加简练明了,在配置文件中的注解已经很详细,所以不会赘述。

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver #数据库驱动
url: jdbc:mysql://192.168.0.105:3306/springboot?useUnicode=true&characterEncoding=utf-8 #数据库地址
username: root #数据库账号
password: 123456 # 数据密码
type: com.alibaba.druid.pool.DruidDataSource # 连接池类型
druid:
#初始化连接池的连接数量
initial-size: 5
# 最小
min-idle: 5
# 最大
max-active: 20
#配置获取连接等待超时的时间
max-wait: 6000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 6000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 3000

七 pom.xml

很抱歉我把xml放在最后面了

	 
	    org.springframework.boot
	    spring-boot-starter-parent
	    2.1.1.RELEASE
	    
	  
	 
    
    
      org.springframework.boot
      spring-boot-starter-jdbc
    
    
    
      mysql
      mysql-connector-java
    
    
    
      com.alibaba
      druid
      1.1.15
    
    
      org.springframework.boot
      spring-boot-starter-web
    
    

  

八 测试工具说明

大家可以通过postman等开发工具进行restful风格接口测试,作为后端开发者,就别去写页面了。

九 测试链接池说明

如果大家想知道怎么测试连接池是否连接成功可以实现ApplicationContextAware接口进行测试,具体的代码如下:

/**
 * @Author lsc
 * @Description 

实现spring bean 生命周期接口

* @Date 2019/11/2 10:08 */ @Component public class DatabaseVision implements ApplicationContextAware { ApplicationContext applicationContext = null; // spring ioc 初始化 bean 的时候调用 @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { // 获得applicationContext this.applicationContext = applicationContext; // 获得dataSource DataSource dataSource = applicationContext.getBean(DataSource.class); // 启动 springboot application print com.alibaba.druid.pool.DruidDataSource System.out.println(dataSource.getClass().getName()); } }

看完上述内容,是不是对Springboot集成jdbcTemplate的用法有进一步的了解,如果还想学习更多内容,欢迎关注创新互联行业资讯频道。


分享题目:Springboot集成jdbcTemplate的用法
文章地址:http://cdkjz.cn/article/jhchpo.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220