- 创建1个Table
2.导入相关依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.0.6</version>
</dependency>
</dependencies>
3.JdbcTemplate
JdbcTemplate 是 Spring 对 JDBC 的封装,目的是使JDBC更加易于使用,JdbcTemplate是Spring的一部分。JdbcTemplate 处理了资源的建立和释放,它帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果即可。
Spring为了简化数据库访问,主要做了以下几点工作:
提供了简化的访问JDBC的模板类,不必手动释放资源;
提供了一个统一的 DAO 类以实现 Data Access Object 模式;
把SQLException封装为DataAccessException,这个异常是一个RuntimeException,并且让我们能区分SQL异常的原因,例如,DuplicateKeyException表示违反了一个唯一约束;
能方便地集成Hibernate、JPA和MyBatis这些数据库访问框架。
java代码
/*
public void testForJava(){
//创建一个连接池对象
DruidDataSource druidDataSource=new DruidDataSource();
druidDataSource.setUrl("jdbc:mysql:///spring_practice");
druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
druidDataSource.setUsername("root");
druidDataSource.setPassword("root");
//实例化对象即可
JdbcTemplate jdbctemplate=new JdbcTemplate();
jdbctemplate.setDataSource(druidDataSource);
//jdbcTemplate.update() 非查询语句
//jdbcTemplate.queryForObject() 查询单个对象
//jdbcTemplate.query() 查询集合
}
*/
IoC方式
<context:property-placeholder location="jdbc.properties"></context:property-placeholder>
<bean id="DataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="${jdbc.url}"></property>
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="DataSource"></property>
</bean>
properties文件
jdbc.url=jdbc:mysql://localhost:3306/spring_practice
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.username=root
jdbc.password=root
1、spring 中的 RowMapper
sping中的RowMapper可以将数据中的每一行数据封装成用户定义的类。
我们在数据库查询中,如果返回的类型是用户自定义的类型(其实我们在数据库查询中大部分返回的都是自定义的类)则需要包装,如果是Java自定义的类型,如:String则不需要。
如果sping与hibernate 相结合了,基本上是用不到,大多数都是在spring单独使用时用到,常见的情况就是与JdbcTemplate一起使用。
可以通过建立内部类实现RowMapper接口,RowMapper中有一个mapRow方法,所以实现RowMapper接口一定要实现mapRow方法,而对自定义类的包装就在mapRow方法中实现。
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-01.xml");
JdbcTemplate jdbcTemplate = applicationContext.getBean(JdbcTemplate.class);
String sql="select * from students where id=?";
Student student = jdbcTemplate.queryForObject(sql, new RowMapper<Student>() {
@Override
public Student mapRow(ResultSet rs, int rowNum) {
//rs 结果记
//rowNum 行数
Student stu = new Student();
try {
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setGender(rs.getString("gender"));
stu.setAge(rs.getInt("age"));
stu.setClasses(rs.getString("class"));
} catch (SQLException e) {
throw new RuntimeException(e);
}
return stu;
}
}, 2002);
执行结果:

原文链接: https://blog.csdn.net/qq_53568730/article/details/135296332