spring JDBCTemplate 实现持久化操作的几种方式

一.spring jdbcTemplate

1.1 作用介绍

1.2 知识点

 

二. jdbcTemplate的开发步骤

三.新建工程

3.1 在pom文件配置依赖

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>

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

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
    </dependency>

3.2 工程结构如下:

四.实现案例的方式

4.1 第一种普通方式

package com.ljf.jdbctemplate.demo.test;

import com.ljf.jdbctemplate.demo.bean.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import java.util.List;

/**
 * @ClassName: JdbcTemplateDemo1
 * @Description: TODO
 * @Author: liujianfu
 * @Date: 2021/02/07 22:22:44 
 * @Version: V1.0
 **/
public class JdbcTemplateDemo1 {

        public static void main(String[] args) {
            //准备数据源:spring的内置数据源
            DriverManagerDataSource ds = new DriverManagerDataSource();
            ds.setDriverClassName("com.mysql.jdbc.Driver");
            ds.setUrl("jdbc:mysql://localhost:3306/nongda");
            ds.setUsername("root");
            ds.setPassword("1234");

            //1.创建JdbcTemplate对象
            JdbcTemplate jt = new JdbcTemplate();
            //给jt设置数据源
            jt.setDataSource(ds);
            //2.执行操作
          List<User> userList=  jt.query("select * from tb_user",new BeanPropertyRowMapper<User>(User.class));
            for(User u:userList){
                System.out.println("u:"+u.getUserName());
            }

        }

}

4.2 通过spring 容器的方式

1.jdbc配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/nongda
jdbc.username=root
jdbc.password=

2.bean.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:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
    <!--配置JdbcTemplate -->
    <bean id="jdbcTemplate-hhh" 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="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
</beans>

3.可以看到dataSource通过ioc注入到jdbcTemplate类中

4.demo案例

package com.ljf.jdbctemplate.demo.test;

import com.ljf.jdbctemplate.demo.bean.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * @ClassName: JdbcTemplateDemo2
 * @Description: TODO
 * @Author: liujianfu
 * @Date: 2021/02/07 23:27:53 
 * @Version: V1.0
 **/
public class JdbcTemplateDemo2 {
    public static void main(String[] args) {
        //1.获取容器
        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        //2.获取对象
        JdbcTemplate jt = ac.getBean("jdbcTemplate-hhh", JdbcTemplate.class);
        //3.执行操作
        //保存
         // jt.update("insert into tb_user(id,user_name,password)values(?,?,?)",23,"beijing","rrr345");
        //更新
        // jt.update("update tb_user set user_name=? where id=?","test",23);
        //删除
        //  jt.update("delete from tb_user where id=?",8);
        //查询所有
          List<User> accounts = jt.query("select * from tb_user where user_name=?",new AccountRowMapper(),"ljf");
        //   List<User> accounts = jt.query("select * from tb_user where id>=?",new BeanPropertyRowMapper<User>(User.class),1);
       for(User account : accounts){
            System.out.println(account);
        }
        //查询一个
       // List<User> accounts = jt.query("select * from tb_user where id = ?",new BeanPropertyRowMapper<User>(User.class),4);
        //System.out.println(accounts.isEmpty()?"没有内容":accounts.get(0));

        //查询返回一行一列(使用聚合函数,但不加group by子句)
        Long count = jt.queryForObject("select count(*) from tb_user where user_name=?",Long.class,"ljf");
        System.out.println(count);
    }

    /**
     * 定义Account的封装策略
     */
    static class AccountRowMapper implements RowMapper<User> {
        /**
         * 把结果集中的数据封装到Account中,然后由spring把每个Account加到集合中
         *
         * @param rs
         * @param rowNum
         * @return
         * @throws SQLException
         */
        @Override
        public User mapRow(ResultSet rs, int rowNum) throws SQLException {
            User account = new User();
            account.setId(rs.getInt("id"));
            account.setUserName(rs.getString("user_name"));
            return account;
        }

    }
}

4.3  使用实际业务接口UserDao+ioc注入的方式,交个spring容器进行处理

 

4.3.1  编写user的接口

package com.ljf.jdbctemplate.demo.dao;

import com.ljf.jdbctemplate.demo.bean.User;

public interface IUserDao  {
    /**
     * 根据Id查询账户
     * @param UserId
     * @return
     */
    User findUserById(Integer UserId);

    /**
     * 根据名称查询账户
     * @param UserName
     * @return
     */
    User findUserByName(String UserName);

    /**
     * 更新账户
     * @param User
     */
    void updateUser(User User);
}

4.3.2 编写实现类

package com.ljf.jdbctemplate.demo.dao;

import com.ljf.jdbctemplate.demo.bean.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;

import java.util.List;

/**
 * @ClassName: UserDaoImpl
 * @Description: TODO
 * @Author: liujianfu
 * @Date: 2021/02/08 00:20:57 
 * @Version: V1.0
 **/
public class UserDaoImpl extends JdbcDaoSupport implements IUserDao{
    @Override
    public User findUserById(Integer UserId) {
        List<User> Users = super.getJdbcTemplate().query("select * from tb_user where id = ?",new BeanPropertyRowMapper<User>(User.class),UserId);
        return Users.isEmpty()?null:Users.get(0);
    }

    @Override
    public User findUserByName(String UserName) {
        List<User> Users = super.getJdbcTemplate().query("select * from tb_user where name = ?",new BeanPropertyRowMapper<User>(User.class),UserName);
        if(Users.isEmpty()){
            return null;
        }
        if(Users.size()>1){
            throw new RuntimeException("结果集不唯一");
        }
        return Users.get(0);
    }

    @Override
    public void updateUser(User User) {
        super.getJdbcTemplate().update("update User set user_name=?where id=?",User.getUserName(),User.getId());
    }
}

4.3.3 编写ioc的注入类

1.编写注入ioc类

package com.ljf.jdbctemplate.demo.dao;

import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

/**
 * @ClassName: JdbcDaoSupport
 * @Description: TODO
 * @Author: liujianfu
 * @Date: 2021/02/08 00:28:29 
 * @Version: V1.0
 **/
public class JdbcDaoSupport {
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }


    public void setDataSource(DataSource dataSource) {
        System.out.println("setDataSource...");
        if(jdbcTemplate == null){
            jdbcTemplate = createJdbcTemplate(dataSource);
        }
    }

    private JdbcTemplate createJdbcTemplate(DataSource dataSource){
        System.out.println("createJDBCtEMPLATE...");
        return new JdbcTemplate(dataSource);
    }
}

两种方式:

通过jdbctemplate的属性注入:

    <!-- 配置账户的持久层  第一种方式注入jdbctemplate
    <bean id="accountDao" class="com.ljf.jdbctemplate.demo.dao.UserDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate-hhh"></property>
    </bean>
    -->

通过datasouce属性注入   :

   <!--第二种方式 只注入datasource    -->
    <bean id="accountDao" class="com.ljf.jdbctemplate.demo.dao.UserDaoImpl">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

 

4.3.4 查看结果

 

package com.ljf.jdbctemplate.demo.test;

import com.ljf.jdbctemplate.demo.bean.User;
import com.ljf.jdbctemplate.demo.dao.IUserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @ClassName: JdbcTemplateDemo3
 * @Description: TODO
 * @Author: liujianfu
 * @Date: 2021/02/08 00:39:57 
 * @Version: V1.0
 **/
public class JdbcTemplateDemo3 {
    public static void main(String[] args) {
            //1.获取容器
            ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
            //2.获取对象
            IUserDao accountDao = ac.getBean("accountDao",IUserDao.class);

             User account = accountDao.findUserById(1);
            System.out.println(account);
        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值