Java Spring JDBC

目录

1.Spring JDBC介绍

2.JDBCTemplate 快速入门

第一步:导入jar包(版本可不同)

第二步:创建JdbcTemplate

第三步:执行SQL语句

第四步:处理结果

完整代码

 3.JdbcTemplate常用方法

3.1 构造方法

3.2 普通方法

方法1 int update(String sql,@Nullable Object... args):

方法2: Map queryForMap()        ,>

方法3:List queryForList()

方法4:query(String sql, RowMapper rowMapper)

方法5:T queryForObject():

1.Spring JDBC介绍

Spring JDBC
        Spring的 JDBC 模块负责数据库资源管理和错误处理,大大简化了开发人员对数据库
的操作,使得开发人员可以从烦琐的数据库操作中解脱出来,从而将更多的精力投
入到编写业务逻辑中
Spring JDBCTemplate
        针对数据库的操作, Spring 框架提供了 JdbcTemplate 类,该类是 Spring 框架数据抽
象层的基础,其他更高层次的抽象类却是构建于 JdbcTemplate 类之上。
JdbcTemplate 类是 Spring JDBC 的核心类

2.JDBCTemplate 快速入门

测试数据

 工具类

/**
 * Druid工具类
 */
public class JDBCUtils {
    // 加载配置文件
    static DataSource ds;

    static {
        Properties pro = new Properties();
        try {
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接池的方法
     */
    public static DataSource getDataSource() {
        return ds;
    }

    /**
     * 获取连接的方法
     */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    /**
     * 关闭资源的方法
     */
    public static void close(ResultSet rs, Statement st, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

配置文件

 
 

第一步:导入jar包(版本可不同)

        导入必要jar 包到工程目录,导入 Spring 核心开发包到创建工程
                spring-beans-3.2.0.RELEASE.jar
                spring-context-3.2.0.RELEASE.jar
                spring-core-3.2.0.RELEASE.jar
                spring-expression-3.2.0.RELEASE.jar
        还需要下载commons-logging 日志包
                commons-logging-1.1.1.jar
        导入JDBC 模板开发包
                spring-jdbc-3.2.0.RELEASE.jar
                spring-tx-3.2.0.RELEASE.jar

        完整jar包截图如下:

 

 

第二步:创建JdbcTemplate

        创建JdbcTemplate ,并通过构造方法传入数据源 DataSource
JdbcTemplate jt = new JdbcTemplate(JDBCUtils.getDataSource());

第三步:执行SQL语句

String sql = "update user set username = ? where id = ?";
int count = jt.update(sql, "lisi", 2);

第四步:处理结果

因为是更新,这里取到执行后的 count ,直接输出即可

完整代码

public static void main(String[] args) {
        // 2.创建JdbcTemplate
        JdbcTemplate jt = new JdbcTemplate(JDBCUtils.getDataSource());
        // 3.执行SQL语句
        String sql = "update user set username = ? where id = ?";
        int count = jt.update(sql, "lisi", 2);
        // 4.处理结果
        System.out.println(count);
    }

运行结果(红色部分为日志)

 3.JdbcTemplate常用方法

3.1 构造方法

        public JdbcTemplate(DataSource datasojurce) 
        
构造方法传入数据源,可以使用C3PO或者Druid数据源

3.2 普通方法

 方法1 int update(String sql,@Nullable Object... args):

        update方法用于执行新增( insert)、修改(update)、删除(delete)等语句
                sql:执行的sql语句
                args:执行sql需要的参数

        代码示例:

JdbcTemplate jt = new JdbcTemplate(JDBCUtils.getDataSource());

    /**
     * 添加数据的方法
     */
    @Test
    public void insert() {
        String sql = "insert into user values(?,?,?,?)";
        int count = jt.update(sql, 1, "zhangsan", "321", "321@qq.com");
        System.out.println(count);
    }

    /**
     * 更新数据的方法
     */
    @Test
    public void update() {
        String sql = "update user set username = ? where id = ?";
        int count = jt.update(sql, "lisi2", 2);
        System.out.println(count);
    }

    /**
     * 删除数据的方法
     */
    @Test
    public void delete() {
        String sql = "delete from user where id = ?";
        int count = jt.update(sql, 10);
        System.out.println(count);
    }

        运行结果:

方法2: Map<String, Object> queryForMap()        

         将查询(单行)结果封装为Map集合,其中列名作为key,将值作为value

代码示例:

/**
     * 查询id为2 的数据,并将数据封装到map集合中
     *  其中key为列名,value为值
     */
    @Test
    public void selectId(){
        String sql= "select * from user where id = ?";
        Map<String, Object> map = jt.queryForMap(sql, 2);
        System.out.println(map);
    }

        运行结果:

方法3:List queryForList()

        查询(多行数据)结果将结果集封装为list集合

        代码示例:

/**
     * 查询多行数据
     * 将每一行数据都封装成map集合
     * 然后将每一行的map集合添加到list集合中
     */
    @Test
    public void selectAll() {
        String sql = "select * from user ";
        List<Map<String, Object>> list = jt.queryForList(sql);
        for (Map<String, Object> l : list) {
            System.out.println(l);
        }
    }

        运行结果:

方法4:query(String sql, RowMapper rowMapper)

        将结查询果封装为JavaBean 对象
        参数:
        rowMapper或BeanPropertyRowMapper:可以将查询到的值自动映射到JavaBean中
RowMapper接口
        RowMapper可以将数据中的每一行数据封装成用户定义的类 ,通过query() 方法进行查询时,可以传递 RowMapper 对象给 query() 方法,查询到数据后,会自动调用RowMapper 对象的 mapRow 方法(每行数据都会调用一次),通过mapRow方法的参数 ResultSet 即可获取查询到的某行数据,再将数据封装成指定的对象返回即可:

 代码示例:

public class User {
    private Integer id;
    private String username;
    private String password;
    private String email;
    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}
/**
     * 查询多行数据,将查询到的每行数据封装成User对象,并添加到List集合中
     */
    @Test
    public void selectUser1() {
        String sql = "select * from user ";
        List<User> users = jt.query(sql, (rt, i) -> {
            User user = new User();
            user.setId(rt.getInt("id"));
            user.setUsername(rt.getString("username"));
            user.setPassword(rt.getString("password"));
            user.setEmail(rt.getString("email"));
            return user;
        });
        for (User user : users) {
            System.out.println(user);
        }

    }

运行结果:

 

BeanPropertyRowMapper
        该类实现了RowMapper 接口,通过构造方法传入 Class 对象,会自动将数据库表字段
值映射到实体类属性上(列名和属性名必须一致)
用法: new BeanPropertyRowMapper(User.class)
代码示例:
/**
     * 查询多行数据,将查询到的每行数据封装成User对象,并添加到List集合中
     */
    @Test
    public void selectUser2() {
        String sql = "select * from user ";
        List<User> users = jt.query(sql, new BeanPropertyRowMapper<>(User.class));
        for (User user : users) {
            System.out.println(user);
        }
    }

运行结果:

 

方法5:T queryForObject()

        可以将查询结果封装为对象,一般用于聚合函数的查询
代码示例:
/**
     * 查询总行数
     */
    @Test
    public void selectCount() {
        String sql = "select count(*) from user ";
        Long l = jt.queryForObject(sql, Long.class);
        System.out.println(l);
    }

运行结果:

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于Java Spring框架中配置JDBC连接DataSource的问题。在Spring中,我们可以使用以下配置来连接数据源: 1. 配置数据源 ``` <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean> ``` 在这个配置中,我们使用了`DriverManagerDataSource`来创建数据源,你也可以使用其他的数据源,比如`BasicDataSource`、`C3P0DataSource`、`HikariDataSource`等。 2. 配置JdbcTemplate ``` <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> ``` 在这个配置中,我们使用了`JdbcTemplate`来执行SQL语句,这个类提供了一系列的方法,比如`queryForObject`、`queryForList`、`update`等,可以方便地执行SQL语句。 3. 使用JdbcTemplate ``` @Autowired private JdbcTemplate jdbcTemplate; public void someMethod() { String sql = "SELECT * FROM user WHERE id=?"; User user = jdbcTemplate.queryForObject(sql, new Object[]{1}, new BeanPropertyRowMapper<>(User.class)); } ``` 在这个示例中,我们使用了`JdbcTemplate`的`queryForObject`方法来执行SQL语句,并将结果转换为一个`User`对象。 希望这个回答能够帮到你,如果还有问题,可以继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值