JdbcTemplate

83 阅读2分钟

JdbcTemplate(概念和准备)

1、什么是JdbcTemplate ?


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

2、准备工作


(1)引入相关的jar包
(2)在spring配置文件配置数据库连接池

<!-- 数据库连接池 -->
<bean destroy-method="close" class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
<property value="jdbc:mysql:///user_db" name="url"/>
<property value="root" name="username"/>
<property value="fx13488321363" name="password"/>
<property value="com.mysql.jdbc.Driver" name="driverClassName"/>
</bean>

(3)配置JdbcTemplate对象,注入DataSource

<!-- JdbcTemplate对象 -->
<bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
    <!-- 注入datasource -->
    <property name="dataSource" ref="dataSource"></property>
</bean>

(4)创建service类,创建dao类,在dao注入JdbaTemplate对象

  • 配置文件
<!-- 组件扫描 -->
<context:component-scan base-package="com.spring5"></context:component-scan>
  • Service
@Service
public class BookService {
    // 注入dao
    @Autowired
    private BookDao bookDao;
}
  • Dao
@Repository
public class BookDaoImpl implements BookDao {
    // 注入JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
}

3、JdbcTemplate操作数据库(添加)

1、对应数据库创建实体类

public class User {
    private String userId;
    private String username;
    private String ustatus;

    public String getUserId() {
        return userId;
    }

    public String getUsername() {
        return username;
    }

    public String getUstatus() {
        return ustatus;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setUstatus(String ustatus) {
        this.ustatus = ustatus;
    }
}

2、编写service和dao
(1)在dao进行数据库添加操作
(2)调用JdbcTemplate对象里面的update方法实现添加操作

4、JdbcTemplate操作数据库(查询返回某个值)

1、查询表中有多少条记录,返回某个值
2、使用JdbcTemplate实现查询返回某个值 配置文件中进行数据库连接池的设置以及JdbcTemplate对象的创建

<!-- 数据库连接池 -->
<bean destroy-method="close" class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
<property value="jdbc:mysql://localhost:3306/user_db" name="url"/>
<property value="root" name="username"/>
<property value="fx13488321363" name="password"/>
<property value="com.mysql.cj.jdbc.Driver" name="driverClassName"/>
</bean>

<!-- JdbcTemplate对象 -->
<bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
    <!-- 注入datasource -->
    <property name="dataSource" ref="dataSource"></property>
</bean>
// 查询表中记录数
@Override
public int selectCount() {
    String sql = "select count(*) from t_book";
    Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
    return count;
}

进行结果的测试

public class TestBook {
    @Test
    public void testJdbcTemplate(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");
        BookService bookService = context.getBean("bookService",BookService.class);

        int count = bookService.findCount();
        System.out.println(count);
    }
}

5、JdbcTemplate操作数据库(查询返回对象)

(1)场景:查询图书详情
(2)JdbcTemplate实现查询返回对象

// 查询返回对象
@Override
public Book findBookInfo(String id) {
    String sql = "select * from t_book where user_id=?";
    // 调用方法进行实现
    Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
    return book;
}

6、JdbcTemplate操作数据库(查询返回集合)

(1)查询图书列表分页...
(2)调用JdbcTemplate模板中的方法实现查询返回集合

// 查询返回集合
@Override
public List<Book> findAllBook() {
    String sql = "select * from t_book";
    // 调用方法
    List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
    return bookList;
}

(3)JdbcTemplate操作数据库(批量操作)
1、批量操作:操作表中的多条记录
2、JdbcTemplate实现批量添加操作

// 批量添加
public void batchAdd (List<Object[]> batchArgs){
bookDao.batchAddBook(batchArgs);
}
// 批量添加
@Override
public void batchAddBook(List<Object[]> batchArgs) {
    String sql = "insert into t_book values(?,?,?)";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}

测试

// 批量添加
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"4","admin","e"};
Object[] o2 = {"5","fex","r"};
Object[] o3 = {"6","mysql","t"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
// 调用批量添加方法
bookService.batchAdd(batchArgs);

3、JdbcTemplate实现批量修改操作

// 批量修改
@Override
public void batchUpdateBook(List<Object[]> batchArgs) {
    String sql = "update t_book set username = ?,ustatus = ? where user_id = ?";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}

测试

// 批量修改
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"admin","e","1"};
Object[] o2 = {"fex","r","2"};
Object[] o3 = {"mysql","t","3"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
// 调用批量修改方法
bookService.batchUpdate(batchArgs);

4、JdbcTemplate实现批量删除操作

// 批量删除
@Override
public void batchDeleteBook(List<Object[]> batchArgs) {
    String sql = "delete from t_book where username = ?";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}

测试

// 批量删除
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"admin"};
Object[] o2 = {"fex"};
Object[] o3 = {"mysql"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
// 调用批量删除方法
bookService.batchDelete(batchArgs);