六、JdbcTemplate (Jdbc模板)

6. JdbcTemplate (Jdbc模板)

6.1 概述

Ⅰ、什么是JdbcTemplate

Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作

Ⅱ、所需依赖的引入

在这里插入图片描述

Ⅲ、Spring配置文件中,Druid数据库连接池的配置

<context:property-placeholder location="jdbc.properties"></context:property-placeholder>
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    <property name="url" value="${prop.url}" />
    <property name="username" value="${prop.username}" />
    <property name="password" value="${prop.password}" />
    <property name="driverClassName" value="${prop.driverClass}" />
</bean>

<!-- context:property-placeholder 用来引入properties文件
	${} EL表达式,可以直接获取properties文件中的内容
 	prop.key 关键是为了防止命名冲突,其他使用完全相同
-->
prop.driverClass=com.mysql.jdbc.Driver
prop.url=jdbc:mysql:///user_db
prop.username=root
prop.password=root

Ⅳ、配置JdbcTemplate对象,并且注入dataSource

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <!-- 需要注入dataSource-->
    <property name="dataSource" ref="dataSource"></property>
</bean>

<!--
	<constructor-arg name="dataSource" ref="dataSource"></constructor-arg>
	也可以使用构造器方式初始化dataSource
-->

在这里插入图片描述

Ⅴ、创建Service类与Dao类,在Dao中注入JdbcTemplate

@Service
public class BookService {
 //注入 dao
 @Autowired
 private BookDao bookDao;
}


@Repository
public class BookDaoImpl implements BookDao {
 //注入 JdbcTemplate
 @Autowired
 private JdbcTemplate jdbcTemplate;
}

6.2 CRUD的实现

Ⅰ、添加——insert

// 添加的方法
@Override
public void add(Book book) {
    //创建sql语句
    String sql = "insert into t_book values(?,?,?)";
    int update = jdbcTemplate.update(sql, book.getUserId(), book.getUsername(), book.getUstatus());

    System.out.println(update); //影响行数
}
/*  
具体实现:使用JdbcTemplate中的update
 第一个参数:sql语句
 后面参数:PreparedStatement占位符填充的参数
 
 返回:影响行数
*/

Ⅱ、删除——delete

@Override
public void deleteBookById(String id) {
    String sql = "delete from t_book where user_id=?";
    jdbcTemplate.update(sql,id);
}
/*
	 同样使用update方法,根据参数的不同传入的可变参数数量也不同
*/

Ⅲ、修改——update

@Override
public void update(Book book) {
    String sql = "update t_book set username=?,ustatus=? where user_id=?";
    jdbcTemplate.update(sql,book.getUsername(),book.getUstatus(),book.getUserId());
}

Ⅳ、查询——select

单个值的查询

@Override
public int selectCount() {
	String sql = "select count(*) from t_book";
	return jdbcTemplate.queryForObject(sql,Integer.class);
}

/*
	 单个值的查询,比如查询总记录数
	 使用方法:queryForObject
	 第一个参数:sql语句
	 第二个参数:返回的类型

*/

单个对象的查询

@Override
public Book findOne(String id) {
    String sql = "select user_id userId,username,ustatus from t_book where user_id=?";
    return jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class),id);
}

/*
	单个对象的查询
	应用场景:在前端页面点击查看某个商品的详情页面,需要通过id查询商品的详细信息返回前端展示使用
	使用方法:queryForObject
	第一个参数:sql语句
	第二个参数:RowMapping接口的实现类对象,使用BeanPropertyRowMapper<Book>(Book.class)
	第三个参数:参数

*/

对象集合的查询

@Override
public List<Book> findAll() {
    String sql = "select user_id userId,username,ustatus from t_book";
    return jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class));
}

/*
	对象集合的查询
	应用场景:分页查询
	使用方法:query
	第一个参数:sql语句
	第二个参数:RowMapping接口的实现类对象,使用BeanPropertyRowMapper<Book>(Book.class)
	第三个参数:参数

*/

6.3 批量CRUD的实现(Batch)

Ⅰ、批量添加

@Override
public void addBatch(List<Object[]> batchArgs) {
    String sql = "insert into t_book values(?,?,?)";
    jdbcTemplate.batchUpdate(sql,batchArgs);
}

/*
	使用场景:大批量数据的插入
	使用方法:batchUpdate
	第一个参数:sql语句
	第二个参数:List集合中包含Object对象数组,为参数
	
	执行流程:从List中逐个取出数组参数,通过ps对象的setObject将参数注入到其中,调用ps.addBatch()方法,将sql语句添加到缓冲池中,可以设置缓冲池中累计的sql语句的个数。比如设置计数器,进行取模,每当为整数值时,将调用ps.execute()方法,一次性执行所有的缓冲池中的sql语句,但是需要注意的是缓冲池并不会自动清空,需要调用clear()语句。

*/

Ⅱ、批量删除

@Override
public void deleteBatch(List<Object[]> batchArgs) {
    String sql = "delete from t_book where user_id=?";
    jdbcTemplate.batchUpdate(sql,batchArgs);
}

Ⅲ、批量修改

@Override
public void updateBatch(List<Object[]> batchArgs) {
    String sql = "update t_book set username=?,ustatus=? where user_id=?";
    jdbcTemplate.batchUpdate(sql,batchArgs);
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用JDBC模板进行模糊查询,您可以使用SQL语句的LIKE操作符和JDBC模板提供的方法来实现。以下是一个示例: ```java import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; public class EmployeeDao { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public List<Employee> searchEmployees(String keyword) { String sql = "SELECT * FROM employees WHERE name LIKE ?"; // 使用?占位符来避免SQL注入攻击 String searchString = "%" + keyword + "%"; // 在关键字前后添加% // 使用RowMapper将查询结果映射为Employee对象 RowMapper<Employee> rowMapper = new RowMapper<Employee>() { @Override public Employee mapRow(ResultSet rs, int rowNum) throws SQLException { Employee employee = new Employee(); employee.setId(rs.getInt("id")); employee.setName(rs.getString("name")); // 其他属性的映射... return employee; } }; // 执行查询并返回结果 return jdbcTemplate.query(sql, new Object[]{searchString}, rowMapper); } } ``` 在上面的示例中,`searchEmployees`方法接收一个关键字作为参数,并在SQL语句中使用LIKE操作符进行模糊查询。通过在关键字前后添加通配符`%`,可以实现模糊匹配。然后,使用`jdbcTemplate.query`方法执行查询,并使用`RowMapper`将结果集映射为Employee对象。 请注意,上述示例中的`Employee`类是一个自定义的Java类,您需要根据自己的实际情况进行调整和完善。另外,还需要在Spring配置文件中配置JDBC模板和数据源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值