前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

一、Spring对不同的持久化支持:

Spring为各种支持的持久化技术,都提供了简单操作的模板和回调

ORM持久化技术 模板类
JDBC org.springframework.jdbc.core.JdbcTemplate
Hibernate5.0 org.springframework.orm.hibernate5.HibernateTemplate
IBatis(MyBatis) org.springframework.orm.ibatis.SqlMapClientTemplate
JPA org.springfrmaework.orm.jpa.JpaTemplate

其实Spring的JDBCTemplate有点像DBUtils,但是有时候还没有DBUitls好用。这里来学习一下使用Spring的JDBCTemplate来玩一下CRUD。

二、使用JdbcTemplate需要的jar包

在这里使用Spring的JDBCTemplate的时候先要把轮子拿过来:

除此之外,在Java中操作数据库怎么能不要对应的驱动包呢:

三、JdbcTemplate使用的基本步骤

然后再看看Spring的JDBCTemplate的使用大体步骤,这里有一个小例子:

  1 package com.spring.test;2 3 import org.junit.Test;4 import org.springframework.jdbc.core.JdbcTemplate;5 import org.springframework.jdbc.datasource.DriverManagerDataSource;6 7 public class TestJDBCTemplate {8 9     @Test10     public void test1() {11 12         // JDBC模板依赖于连接池来获得数据的连接,所以必须先要构造连接池13         DriverManagerDataSource dataSource = new DriverManagerDataSource();14         dataSource.setDriverClassName("com.mysql.jdbc.Driver");15         dataSource.setUrl("jdbc:mysql://localhost:3306/spring");16         dataSource.setUsername("root");17         dataSource.setPassword("123456");18 19         // 创建JDBC模板20         JdbcTemplate jdbcTemplate = new JdbcTemplate();21         // 这里也可以使用构造方法22         jdbcTemplate.setDataSource(dataSource);23 24         // sql语句25         String sql = "select count(*)  from user";26         Long num = (long) jdbcTemplate.queryForObject(sql, Long.class);27 28         System.out.println(num);29 30     }31 32 }

四、进一步的考虑

其实这个例子本身没有什么的,只是演示了一下,其实在学Spring之后,感觉应该形成一种习惯,在new对象的时候我要想到IOC,在使用Set方法的时候,我要想到DI,再去要方便面(哦,不,是切面),我们应该想到用AOP的。这里可以在Spring中配置如下的引用链:

1. 我要有DataSource,DataSource的属性可以通过注入数据库的一些配置属性添加

2. 我要有JdbcTemplate,而Template依赖与DataSource,我要以ref的方式为我的JdbcTemplate注入引用

3. 有了JdbcTemplate之后,我要有Dao,此时我应该在Dao添加一个JdbcTemplate的成员,然后以ref的方式将JdbcTemplate引入到Dao中

4. 我在Action或者是Servlet中都会调用的是Serivce,所以,我在Serivce中要添加一个Dao作为成员,然后由ref在注入Dao到Service中

DataSource --> JdbcTemplate --> Dao --> Service --> Action/Servlet

"-->"表示将左边的对象注入到右边的对象当中

配置文件如下:

  1 <?xml version="1.0" encoding="UTF-8"?>2 <beans xmlns="http://www.springframework.org/schema/beans"3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4     xmlns:context="http://www.springframework.org/schema/context"5     xmlns:aop="http://www.springframework.org/schema/aop"6     xmlns:tx="http://www.springframework.org/schema/tx"7     xsi:schemaLocation="http://www.springframework.org/schema/beans8     http://www.springframework.org/schema/beans/spring-beans.xsd9     http://www.springframework.org/schema/context10     http://www.springframework.org/schema/context/spring-context.xsd11     http://www.springframework.org/schema/aop12     http://www.springframework.org/schema/aop/spring-aop.xsd13     http://www.springframework.org/schema/tx14     http://www.springframework.org/schema/tx/spring-tx.xsd">15 16     <!-- IOC和DI的注解扫描 -->17     <context:component-scan base-package="com.spring" ></context:component-scan>18 19     <!-- 打开AOP的注解 -->20     <!-- 这里用的是中间的横线而不是下划线 -->21     <aop:aspectj-autoproxy></aop:aspectj-autoproxy>22 23     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >24         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_03"></property>25         <property name="driverClass" value="com.mysql.jdbc.Driver"></property>26         <property name="user" value="root"></property>27         <property name="password" value="123456"></property>28     </bean>29 30     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">31         <property name="dataSource" ref="dataSource"></property>32     </bean>33 34     <bean id="userDao" class="com.spring.dao.UserDao">35         <property name="jdbcTemplate" ref="jdbcTemplate"></property>36     </bean>37 38     <bean id="userService" class="com.spring.service.UserService">39         <property name="userDao" ref="userDao"></property>40     </bean>41 42 </beans>

其中dataSource和jdbcTemplate都是直接配置的,不用写啥。

然后是UserDao.java

  1 package com.spring.dao;2 3 import org.springframework.jdbc.core.JdbcTemplate;4 5 import com.spring.domain.User;6 7 public class UserDao {8 9     private JdbcTemplate jdbcTemplate;10 11     public JdbcTemplate getJdbcTemplate() {12         return jdbcTemplate;13     }14 15     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {16         this.jdbcTemplate = jdbcTemplate;17     }18 19     public void addUser(User user) {20 21         String sql = "insert into user (username, password) values (?, ?)";22 23         jdbcTemplate.update(sql, user.getUsername(), user.getPassword());24 25     }26 27 }

UserSerice.java

  1 package com.spring.service;2 3 import com.spring.dao.UserDao;4 import com.spring.domain.User;5 6 public class UserService {7 8     // 加入userDao作为成员变变量9     private UserDao userDao;10 11     // 注意这里要增加get和set方法12     public UserDao getUserDao() {13         return userDao;14     }15 16     public void setUserDao(UserDao userDao) {17         this.userDao = userDao;18     }19 20     public void addUser(User user) {21         userDao.addUser(user);22     }23 }

上面的文件都是用的配置文件来获得对象的,而没有使用注解。

测试类:

  1 package com.spring.test;2 3 import org.junit.Test;4 import org.springframework.context.ApplicationContext;5 import org.springframework.context.support.ClassPathXmlApplicationContext;6 import com.spring.domain.User;7 import com.spring.service.UserService;8 9 public class TestJDBCTemplate {10 11     @Test12     public void test2() {13 14         ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");15         UserService userService = (UserService) ctx.getBean("userService");16 17         User user = new User();18         user.setPassword("111");19         user.setUsername("小王");20 21         userService.addUser(user);22 23     }24 25 }

哦,对了其中配置的数据源是C3P0的数据源,还要导入C3P0的包:

五、JdbcTemplate的CRUD方法

1. 插入数据

  1 public void addUser(User user) {2 3     String sql = "insert into user (username, password) values (?, ?)";4 5     jdbcTemplate.update(sql, user.getUsername(), user.getPassword());6 7 }

如上,插入代码用的是update方法,其实增删改用的都是update方法,而查询则是和query相关的方法。

2. 删除操作

  1 public void deleteUser( ) {2     String sql = "delete from user where username= ?";3     jdbcTemplate.update(sql, "小王");4 }

3. 修改操作

  1 public void updateUser(User user) {2     String sql = "update user set username=? where username= ?";3     jdbcTemplate.update(sql,  user.getUsername() + "_new", user.getUsername());4 }

4. 查询操作

上面三个都比较简单,查询倒是有些复杂。在使用比较基础的持久化工具的时候,比如DBUtils都会针对查询结果给我们提供一些封装的接口和类,但是JdbcTemplate只给我们提供了接口,并没有可用的类,所以我们需要自己写实现类来进行封装。这里会学习使用JdbcTemplate进行三种查询操作:

4.a. 查询表的记录数

  1 @Test2 public void test5() {3     ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");4     JdbcTemplate jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");5     String sql = "select count(*) from user";6     Long row = jdbcTemplate.queryForObject(sql, Long.class);7     System.out.println("查询出来的记录数为:" + row);8 }

4.b. 查询返回对象

  1 @Test2 public void test6() {3     // 获得jdbcTemplate对象4     ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");5     JdbcTemplate jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");6     String sql = "select username, password from user where username = ?";7     // 设定参数8     Object[] object = {"mary_new"};9     // 进行查询10     User user = jdbcTemplate.queryForObject(sql, object,  new UserMapper());11     System.out.println(user);12 }

除此之外要实现结构RowMapper来新建一个映射类:

  1 package com.spring.test;2 3 import java.sql.ResultSet;4 import java.sql.SQLException;5 6 import org.springframework.jdbc.core.RowMapper;7 8 import com.spring.domain.User;9 10 public class UserMapper implements RowMapper<User>{11 12     @Override13     public User mapRow(ResultSet resultSet, int rows) throws SQLException {14         User user = new User();15         user.setUsername(resultSet.getString(1));16         user.setPassword(resultSet.getString(2));17 18         return user;19     }20 21 }

要注意这个UserMapper.java应该要和具体的Sql语句对应。

4.c. 查询并返回List集合

  1 @Test2 public void test7() {3     // 获得jdbcTemplate对象4     ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");5     JdbcTemplate jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");6 7     // sql语句8     String sql = "select * from user";9     List<User> users = jdbcTemplate.query(sql, new UserMapper());10 11     for(User u: users) {12         System.out.println(u);13     }14 }

Spring之JDBCTemplate相关推荐

  1. Spring的jdbcTemplate 与原始jdbc 整合c3p0的DBUtils 及Hibernate 对比 Spring配置文件生成约束的菜单方法...

    以User为操作对象 package com.swift.jdbc;public class User {private Long user_id; private String user_code; ...

  2. Spring利用JDBCTemplate实现批量插入和返回id

    1.先介绍一下java.sql.Connection接口提供的三个在执行插入语句后可取的自动生成的主键的方法: //第一个是 PreparedStatement prepareStatement(St ...

  3. spring教程--JdbcTemplate详解

    Spring的JdbcTemplate JdbcTemplate模板与DbUtils工具类比较类似. 1 Spring对持久层技术支持: JDBC:org.springframework.jdbc.c ...

  4. Spring框架 JdbcTemplate类 @Junit单元测试,可以让方法独立执行 如:@Test

    1 package cn.zmh.PingCe; 2 3 import org.junit.Test; 4 import org.springframework.jdbc.core.BeanPrope ...

  5. Spring 学习 day3 : AOP,Spring中JdbcTemplate的使用

    1.AOP 1.1 什么是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方 式和运行期动态代理实现程序功能的统一维护的一种技术. ...

  6. Spring的JdbcTemplate的基本操作

    Spring的JdbcTemplate的基本操作入门 JdbcTemplate概述 : JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装.spr ...

  7. Spring中jdbcTemplate的用法实例

    一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作.通常情况下,有三种种方式得到JdbcTemplate 对象.        第一种方式:我们可以在自己 ...

  8. SSM-Spring-19:Spring中JdbcTemplate

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- Spring自带一个ORM持久化框架JdbcTemplate,他可以说是jdbc的加强版,但是对最细微的控制肯 ...

  9. Spring中JdbcTemplate中使用RowMapper

    转自:https://blog.csdn.net/u012661010/article/details/70049633 1 sping中的RowMapper可以将数据中的每一行数据封装成用户定义的类 ...

最新文章

  1. mysql单机多实例启动不了_mysql单机启用多实例的配置方法
  2. Activity动画效果笔记
  3. 使用 Cordova 打包 app
  4. unigui 导入导出数据
  5. IOS Core Image之二
  6. 玩转oracle 11g(46):图解oracle数据库
  7. 【Flink】Flink 提交任务到yarn报错 proxy provider ConfiguredFailoverProxyProvider NetUtils.getSocketAddressS
  8. 细说php一些常见的知识点
  9. 如何利用wordpress搭建自己独立的博客(个人网站)
  10. DOM操作style样式——link、style、p style=''的区别
  11. 多媒体计算机设备使用注意,多媒体电教设备常见问题与解决办法
  12. ArrayUtils
  13. java 多线程 原子_Java多线程:原子量
  14. 单片机中,intrins.h头文件中各函数详解:空指令_nop_(),移位函数_crol_、_cror_
  15. jQuery插件库超级好用库
  16. 红米手机开启开发者模式方法
  17. Mysql(三)Mysql索引基本原理
  18. 游戏辅助小助手框架构想
  19. 微信文件用qq浏览文件服务器,原来微信和QQ的文件是可以相互传输的!现在才知道,真是太可惜了...
  20. Kotlin中let、run、with、apply及also的差别

热门文章

  1. 由浅到深理解ROS(2)
  2. 【CodeForces - 361D】Levko and Array (二分,dp)
  3. 【牛客 - 318F】关于我转生变成史莱姆这档事(二分,搜索)
  4. 【51Nod - 1133】不重叠的线段 (贪心)
  5. 【HDU - 1083 】Courses (二分图)
  6. 【HDU - 1216 】Assistance Required (模拟,类似素数打表,不是素数问题!)
  7. VMware虚拟机下安装Ubuntu16.04镜像完整教程
  8. mysql居左查询abcd_数据库--查询语句
  9. javaweb jsp页面无法解析${message}
  10. rust 案例_RUST-X气相防锈产品落户中国,助力中国高端制造出口海外