jdbcTemplate实现添加数据功能:
spring框架对jdbc框架进行封装,使用jdbcTemplate方便实现对数据库的操作
Java准备工作:
导入依赖:
<dependencies> <!-- 实现IOC容器--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.10.RELEASE</version> </dependency> <!-- 对象映射:将spring中实现持久化操作--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>5.3.1</version> </dependency> <!--spring的测试功能:spring整合Junit--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.8.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.31</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.16</version> </dependency> </dependencies>
JdbcTemplate实际上就是Springjdbc框架提供的一个类,而该类的作用能够实现数据的增删改查操作,既然它是一个对象,那么我们就可将其交给IOC容器管理
在XML中配置JdbcTemplate:
在之前的学习中,我们了解到将对象交给IOC容器管理配置方式有两种,我们可以通过注解加扫描的方式,也可以通过在XML文件中配置的方式,由于JdbcTemplate是第三方jar包提供的,因此我们需要在XML文件中进行配置
第一步在XML文件中配置JdbcTemplate类所对应的bean对象:
<bean class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="datasource"></property> </bean>
既然是想使用JdbcTemplate对数据库进行操作,那么必须先通过数据源连接数据库,因此第二步:创建数据源:
我们既可以直接将连接数据库的属性值写在property标签中,也可以通过引入外部配置文件的方式,一般情况下,我们选择后者,是因为其方灵活性和可配置性较好,如下所示
<bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driver" value="${driver}"></property> <property name="url" value="${url}"></property> <property name="name" value="${name}"></property> <property name="password" value="${password}"></property> </bean>
将连接数据库的部分写在外部的jdbc.poperties文件中
:
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/ssm name=root password=root
上述我们在数据源中的使用的属性值在外部的property文件中,那么如何将XML文件和property文件建立联系呢?第三步:通过context约束引入
<context:property-placeholder location=" classpath:jdbc.properties"></context:property-placeholder>
此时我们的配置工作就完成啦!
数据库准备工作:
在已有数据库中创建新的表:
create table t_user (id int,username varchar(20),password varchar(20),age int,gender char(2),email varchar(20));
插入数据:
insert into t_user values(1,"张三","12345",19,"男","2.com");
在Java中进行测试:
spring-test依赖是Spring整合Junit ,那么它如何进行整合的呢?它可以让spring的测试类在spring的环境中进行,这样一来,我们不需要每一次都获取IOC容器,我们可以直接通过依赖注入的方式获取IOC容器中的某个bean,具体做法:
1:在JdbcTemplate的测试类上加上@RunWith注解用来设置当前测试类的运行环境,并且将该注解的值设置为
SpringJUnit4ClassRunner.class,此时就可以直接通过注入的方式获取IOC容器中的bean
2:那么通过这种注入的方式如何获取IOC容器?通过@ContextConfiguration注解:设置Spring测试环境的配置文件,其注解值为XML文件名
3:通过自动装配的方式为jdbcTemplate属性赋值,以实现对数据库的操作
代码如下所示:
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring-transaction.xml") public class jdbcTemplateTest { @Autowired private JdbcTemplate jdbcTemplate; @Test public void TestInsert(){ String sql="insert into t_user (id,username,password,age,gender,email) values (?,?,?,?,?,?)"; jdbcTemplate.update(sql,1,"root","root",23,"女","5.@qq.com"); } }
控制台输出并无任何报错:
数据库中查询我们创建的表,如下所示:
数据被成功插入!
jdbcTemplate实现查询数据功能:
创建实体类:
package pojo; public class User { private Integer id; private String username; private String password; private Integer age; private String gender; private String email; public User() { } public User(Integer id,String username,String password,Integer age, String gender,String email) { this.id = id; this.username=username; this.password=password; this.age=age; this.gender=gender; this.email=email; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", age=" + age + ", gender='" + gender + '\'' + ", email='" + email + '\'' + '}'; } }
查询单条数据:
在测试类中新建TestSelect方法用来查询数据:
@Test public void selectTest(){ String sql="select * from t_user where id=?"; BeanPropertyRowMapper:用于将ResultSet的单行数据映射到Java对象,使用Java反射来将ResultSet的列与目标Java对象的属性进行匹配和设置值 User user = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(User.class),1); System.out.println(user); }
输出如下:
id为1的数据成功被查询
查询多条数据:
@Test public void TestSelect() { String sql = "select * from t_user";//查询当前表中的所有数据 List<User> user = jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class)); System.out.println(user); }
输出如下所示:
查询单行/单列数据:
@Test public void TestSelect() { String sql="select count(*) from t_user";//查询当前表中的记录数 Integer count=jdbcTemplate.queryForObject(sql,Integer.class); System.out.println(count); }
显示如下: