JdbcTemplate

概述

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

2、相关 jar 包

(1)mysql-connector-java:Java 提供一套用于数据库操作的接口

(2)druid:数据库连接池

(3)spring-jdbc:包含 Spring 对 JDBC 数据访问进行封装的所有类

(4)spring-tx:负责在 Spring 框架中实现事务管理功能

(5)spring-orm:插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,包括 Hibernate,JPA,JDO,Oracle Toplink、iBATIS

 

前置

1、开启组件扫描

2、配置数据库连接池

3、配置 JdbcTemplate 对象,注入 DataSource

(1)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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 开启注解(组件)扫描 -->
    <context:component-scan base-package="包路径"></context:component-scan>

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="${jdbc_url}" />
        <property name="username" value="${jdbc_user}" />
        <property name="password" value="${jdbc_password}" />

        <property name="filters" value="stat" />

        <property name="maxActive" value="20" />
        <property name="initialSize" value="1" />
        <property name="maxWait" value="6000" />
        <property name="minIdle" value="1" />

        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <property name="minEvictableIdleTimeMillis" value="300000" />

        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />

        <property name="poolPreparedStatements" value="true" />
        <property name="maxOpenPreparedStatements" value="20" />

        <property name="asyncInit" value="true" />
    </bean>

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

(2)配置类 + 注解;@Bean 将方法产生对象注入到 IOC 容器

@Configuration
//开启组件扫描
@ComponentScan(basePackages = {"包路径"})
public class ConfigTX {
    //创建数据库连接池
    @Bean
    public DruidDataSource getDruidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl("jdbc:mysql://localhost:3306:druid");
        druidDataSource.setUsername("用户名");
        druidDataSource.setPassword("密码");
        //其余配置略
        return druidDataSource;
    }

    //创建JdbcTemplate对象
    @Bean
    public JdbcTemplate getJdbcTemplate(DataSource dataSource) {
        //到IOC容器中找到dataSource
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        //注入dataSource
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }
}

4、创建 Service 类、Dao 类,在 Dao 类注入 JdbcTemplate 对象

@Service
class TestService{
    @Autowired
    private Dao dao;
}

interface BaseDao {
}

@Repository
class Dao implements BaseDao {
    //注入JdbcTemplate对象
    @Autowired
    private JdbcTemplate jdbcTemplate;
}

 

创建对应表(users)的实体类(示例)

class User {
    private String id;
    private String name;
    private String status;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

 

添加、修改、删除(单条)

1、sql:SQL 语句;args:可变参数,设置 SQL 语句值

update(String sql, @Nullable Object... args)

2、在 Dao 进行添加、修改、删除操作

@Service
class TestService {
    @Autowired
    private Dao dao;

    public void add(User user) {
        dao.add(user);
    }

    public void update(User user) {
        dao.update(user);
    }

    public void delete(String id) {
        dao.delete(id);
    }
}

interface BaseDao {
    void add(User user);

    void update(User user);

    void delete(String id);
}

@Repository
class Dao implements BaseDao {
    //注入JdbcTemplate对象
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void add(User user) {
        String sql = "insert into users value(?,?,?)";
        Object[] args = {user.getId(), user.getName(), user.getStatus()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }

    @Override
    public void update(User user) {
        String sql = "update users set name=?, set status=? where id=?";
        Object[] args = {user.getName(), user.getStatus(), user.getId()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println(update);
    }

    @Override
    public void delete(String id) {
        String sql = "delete from users where id=?";
        int update = jdbcTemplate.update(sql, id);
        System.out.println(update);
    }
}

 

查询

1、方法

(1)sql:SQL 语句;requiredType:返回类型 Class

<T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException;

(2)sql:SQL 语句;rowMapper:该接口的实现类,封装不同返回数据类型;args:可变参数,设置 SQL 语句值 

<T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args) throws DataAccessException;

(3)sql:SQL 语句;rowMapper:该接口的实现类,封装不同返回数据类型;args:可变参数,设置 SQL 语句值 

<T> List<T> query(String sql, RowMapper<T> rowMapper, @Nullable Object... args) throws DataAccessException;

2、返回数据类型

(1)值

(2)对象

(3)集合

3、示例

@Service
class TestService {
    @Autowired
    private Dao dao;

    public int selectCount() {
        return dao.selectCount();
    }

    public User selectUser(String id) {
        return dao.selectUser(id);
    }

    public List<User> selectUsers() {
        return dao.selectUsers();
    }
}

interface BaseDao {
    int selectCount();

    User selectUser(String id);

    List<User> selectUsers();
}

@Repository
class Dao implements BaseDao {
    //注入JdbcTemplate对象
    @Autowired
    private JdbcTemplate jdbcTemplate;

    //查询表的记录个数
    @Override
    public int selectCount() {
        String sql = "select count(*) from users";
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
    }

 

添加、修改、删除(批量)

1、sql:SQL 语句;batchArgs:添加多条记录

public int[] batchUpdate(String sql, List<Object[]> batchArgs) throws DataAccessException

2、示例

@Service
class TestService {
    @Autowired
    private Dao dao;

    public void batchAdd(List<Object[]> batchArgs) {
        dao.batchAdd(batchArgs);
    }

    public void batchUpdate(List<Object[]> batchArgs) {
        dao.batchUpdate(batchArgs);
    }

    public void batchDelete(List<Object[]> batchArgs) {
        dao.batchDelete(batchArgs);
    }
}

interface BaseDao {
    void batchAdd(List<Object[]> batchArgs);

    void batchUpdate(List<Object[]> batchArgs);

    void batchDelete(List<Object[]> batchArgs);
}

@Repository
class Dao implements BaseDao {
    //注入JdbcTemplate对象
    @Autowired
    private JdbcTemplate jdbcTemplate;

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

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

    //批量删除
    @Override
    public void batchDelete(List<Object[]> batchArgs) {
        String sql = "delete from users where id=?";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }
}
posted @   半条咸鱼  阅读(70)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示