Spring之JdbcTemplate的使用

news/2024/5/18 21:49:34 标签: jdbc, spring

Spring之JdbcTemplate的使用

  • 一、什么是JdbcTemplate?
  • 二、基于XML方式使用JdbcTemplate
    • 1.添加依赖
    • 2.编写相关代码
    • 3.添加jdbc配置文件
    • 4.配置spring.xml
    • 5.执行测试
  • 二、基于注解方式使用JdbcTemplate
    • 1.添加依赖
    • 2.编写相关代码
    • 3.使用配置类代理spring.xml文件
    • 4.执行测试
  • 三、使用JdbcDaoSupport
    • 1.添加依赖
    • 2.编写相关代码
    • 3.配置spring.xml
    • 4.执行测试
    • 5.注意事项

一、什么是JdbcTemplate?

JdbcTemplate是Spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。

二、基于XML方式使用JdbcTemplate

1.添加依赖

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
    </dependencies>

2.编写相关代码

public interface IUserDao {
	
	
	/**
	 * 通过id查询用户
	 * @param id
	 * @return
	 */
	User selectUserById(Integer id);
	
	/**
	 * 修改用户信息
	 * @param user
	 */
	 void updateUser(User user);
}


public class UserDaoImpl implements IUserDao {
	
	private JdbcTemplate jdbcTemplate;
	
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
	
	@Override
	public User selectUserById(Integer id) {
		List<User> users =jdbcTemplate.query("select * from user where id = ?",new BeanPropertyRowMapper<User>(User.class),id);
		return users.isEmpty()?null:users.get(0);
	}
	
	@Override
	public void updateUser(User user) {
		jdbcTemplate.update("update user set name=? where id=?",user.getName(),user.getId());
		
	}
}

jdbc_70">3.添加jdbc配置文件

src/main/resources目录下新建jdbc.properties配置文件,并设置对应的配置信息

# 驱动名
jdbc.driver=com.mysql.cj.jdbc.Driver
# 数据库连接
jdbc.url=jdbc:mysql://localhost:3306/(数据库名称)?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
# 数据库用户名称
jdbc.user=(数据库账号)
# 数据库用户密码
jdbc.password=(数据库密码)

# 以下为可选配置

# 指定连接池的初始化连接数。取值应在minPoolSize 与 maxPoolSize 之间;Default:3
initialPoolSize=20
# 指定连接池中保留的最大连接数. Default:15
maxPoolSize=100
# 指定连接池中保留的最小连接数
minPoolSize=10
# 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。 Default:0
maxIdleTime=600
# 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数. Default:3
acquireIncrement=5
# JDBC的标准,用以控制数据源内加载的PreparedStatements数量。
maxStatements=5
# 每60秒检查所有连接池中的空闲连接.Default:0
idleConnectionTestPeriod=60

springxml_100">4.配置spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- 加载properties 配置文件,用来读取jdbc.properties文件中的数据 -->
	<context:property-placeholder location="jdbc.properties" />

    <!-- 配置持久层-->
    <bean id="userDao" class="cn.ybzy.dao.impl.UserDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>

   <!-- 配置JdbcTemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 配置数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/demo"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
</beans>

为什么要配置数据源?

由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放
在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

5.执行测试

    public static void main(String[] args) {
        
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
        IUserDao userDao = ac.getBean("userDao", IUserDao.class);
    
        User user = userDao.selectUserById(1);
        System.out.println("user = " + user);
    
        user.setName("jdbcTemplate");
        userDao.updateUser(user);
    }

二、基于注解方式使用JdbcTemplate

1.添加依赖

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
    </dependencies>

2.编写相关代码

public interface IUserDao {
	
	
	/**
	 * 通过id查询用户
	 * @param id
	 * @return
	 */
	User selectUserById(Integer id);
	
	/**
	 * 修改用户信息
	 * @param user
	 */
	 void updateUser(User user);
}

@Repository
public class UserDaoImpl implements IUserDao {

	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	@Override
	public User selectUserById(Integer id) {
		List<User> users =jdbcTemplate.query("select * from user where id = ?",new BeanPropertyRowMapper<User>(User.class),id);
		return users.isEmpty()?null:users.get(0);
	}
	
	@Override
	public void updateUser(User user) {
		jdbcTemplate.update("update user set name=? where id=?",user.getName(),user.getId());
		
	}
}

springxml_213">3.使用配置类代理spring.xml文件

@Configuration
@ComponentScan(value = "cn.ybzy")
public class SpringConfiguration {
	
	/**
	 * 配置jdbcTemple
	 * @return
	 */
	@Bean
	public JdbcTemplate getJdbcTemplate(){
		return new JdbcTemplate(getDatasource());
	}
	
	/**
	 * 配置数据源
	 * @return
	 */
	@Bean
	public DataSource getDatasource(){
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql://localhost:3306/demo");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		return dataSource;
	}
}

4.执行测试


    public static void main(String[] args) {
        
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
        IUserDao userDao= applicationContext.getBean("userDaoImpl",IUserDao.class);
    
        User user = userDao.selectUserById(1);
        System.out.println("user = " + user);
    
    
        user.setName("jdbcTemplate");
        userDao.updateUser(user);
    }

三、使用JdbcDaoSupport

JdbcDaoSupport是Spring框架提供的一个类,该类中定义了一个jdbcTemplate对象,可以直接获取使用,但前提是需要为JdbcDaoSupport对象注入数据源,然后只需要持久层对象继续JdbcDaoSupport即可。

1.添加依赖

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
    </dependencies>

2.编写相关代码

public interface IUserDao {
	
	
	/**
	 * 通过id查询用户
	 * @param id
	 * @return
	 */
	User selectUserById(Integer id);
	
	/**
	 * 修改用户信息
	 * @param user
	 */
	 void updateUser(User user);
}


public class UserDaoImpl extends JdbcDaoSupport implements IUserDao {
	
	@Override
	public User selectUserById(Integer id) {
		List<User> users =getJdbcTemplate().query("select * from user where id = ?",new BeanPropertyRowMapper<User>(User.class),id);
		return users.isEmpty()?null:users.get(0);
	}
	
	@Override
	public void updateUser(User user) {
		getJdbcTemplate().update("update user set name=? where id=?",user.getName(),user.getId());
		
	}
}

springxml_321">3.配置spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置持久层-->
    <bean id="userDao" class="cn.ybzy.dao.impl.UserDaoImpl">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 配置数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/demo"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
</beans>

4.执行测试

    public static void main(String[] args) {
        
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
        IUserDao userDao = ac.getBean("userDao", IUserDao.class);
    
        User user = userDao.selectUserById(1);
        System.out.println("user = " + user);
    
        user.setName("jdbcTemplate");
        userDao.updateUser(user);
    }

5.注意事项

1.使用JdbcDaoSupport,需要为其提供数据源或提供JdbcTemplate对象
2. 继承 JdbcDaoSupport 的方式,只适用于 XML配置的方式
在这里插入图片描述


http://www.niftyadmin.cn/n/876711.html

相关文章

IDEA中启动项目报错 Error:java: Compilation failed: internal java compiler error

IDEA中启动项目报错 Error:java: Compilation failed: internal java compiler error (默认maven项目)确认File-Project structure-Modules-对应的module使用的jdk版本正确 若正常,则去看Setting-Java Compiler-右侧per-module bytecode version列表中jdk版本是否正确

Spring之Spring的事务控制

Spring之Spring的事务控制一、Spring中的事务PlatformTransactionManagerTransactionDefinitionTransactionStatus事务的隔离级别事务的传播行为二、基于 XML 的声明式事务控制1.添加依赖2.配置spring.xml3.编写代码4.执行测试三、基于注解的声明式事务控制1.添加依赖2.配置spr…

Java编程思想--抽象类的具体使用

之前只是知道抽象类是什么,但是具体在项目中如何用到还是一知半解,今在项目中发现抽象类的其中一种用法--用于抽象返回类型:(感觉是很基础的东西,但是惭愧之前写代码并未用上) 定义为抽象类型为父类Model返回类型,其属性为子类Model返回类型的共有属性,具体查询时根据不同的条件…

RabbitMQ之快速入门(一)

RabbitMQ之快速入门&#xff08;一&#xff09;一、消息队列&#xff08;MQ&#xff09;概述什么是消息队列&#xff1f;AMQP和JMSAMQP和JMS的区别常见的 MQ 产品二、RabbitMq概述什么是RabbitMqRabbitMQ的特点RabbitMq的架构及相关概念RabbitMq的工作模式RabbitMq运行过程三、…

IDEA之--idea快捷键整理

只列举目前用到的&#xff0c;不断补充....... 常用Window快捷键&#xff1a; 1.windowsL 锁屏 2.AltTab 调到之前的应用 3.CtrlTab 应用内跳转到下一页 4.WindowsD 桌面。。。。 代码层次操作&#xff1a;1.Alt Enter 补全代码2.CtrlD 复制到下一行3.AltInsert …

IDEA之--idea同一窗口打开多个项目

很简单&#xff0c;将多个项目放在同一个文件夹下&#xff0c;File-Open直接打开共同的父文件夹 再根据项目来导入module,&#xff08;File-Project Structure-Modules-""-Import Module&#xff09;或者配置不同的maven或tomcat

RabbitMQ之六种工作模式的使用

RabbitMQ之六种工作模式的使用RabbitMQ工作模式一、简单模式1.引入依赖2.编写生产者3.编写消费者4.执行测试1.启动生产者2.启动消费者二、work模式1.引入依赖2.编写生产者3.编写消费者13.编写消费者24.执行测试1.启动两个消费者2.启动生产者三、Publish/Subscribe发布与订阅模式…

反射解析jar包后无法删除本地文件

在解析完jar包之后需要classLoader.close()释放jar后再进行删除;