Spring4.x❸ Dao层解决方案JdbcTemplate

更多Spring开发在框架开发


1 JDBCTemplate?

已经说过,Spring是一站式开发,针对javaEE三层,每一层都有解决技术,而针对dao层的不同技术,Spring提供了以下的解决技术:

这里写图片描述

本文主要讲解JdbcTemplate,这有点类似dbUtils技术中的RunnerQuery类。

2 JDBCTemplate案例

案例目标: 对User类进行增删改查(crud)操作,

项目环境:导入jar包,导入spring相关包(ioc基本包,jdbcTemplate包),mysql相关包,日志相关包,c3p0相关包。

这里写图片描述
项目数据库创建:

create database db_springJdbcTemplate;
create table tb_user( 
    user_name varchar(50) primary key,
    user_password varchar(50) default null
);

2.1 分析

  • test类中使用ioc方式创建UserService对象,UserService里面有UserDao对象属性,所以需要注入UserDao对象。
  • UserDao对象中有JdbcTemplate对象属性,所以UserDao对象中需要注入JdbcTemplate对象。
  • JdbcTemplate对象中有DataSource对象,所以JdbcTemplate对象中需要注入DataSource对象
  • DataSource对象中有数据库连接所需要的属性,所以DataSource对象中需要注入数据库连接所需要的属性。

2.2 service

package edu.kmust.user.service;
import edu.kmust.user.dao.UserDao;
import edu.kmust.user.entity.User;
public class UserService {
    /*
     * 使用ioc的方式获取UserDao对象
     */
    private UserDao userDao ;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    /**
     * 添加用户
     * @param user
     */
    public void add(User user){
        userDao.add(user);
    }
    /**
     * 根据用户名修改其密码
     * @param user
     */
    public void update(User user) {
        userDao.update(user);
    }
    /**
     * 根据name删除user
     * @param user
     */
    public void delete(User user) {
        userDao.delete(user);
    }
    /**
     * 查询所有用户个数
     */
    public void queryCount() {
        userDao.queryCount();
    }
    /**
     * 根据name查询某一对象
     * @param user
     */
    public void queryObject(User user) {
        userDao.queryObject(user);
    }
    /**
     * 查询所有对象
     */
    public void queryList() {
        userDao.queryList();
    }
}

2.3 dao

package edu.kmust.user.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import edu.kmust.user.entity.User;
public class UserDao {
    /*
     * 通过ioc的方式获取jdbcTemplate对象(该对象已经在配置文件中注入了数据库和c3p0的信息)
     */
    private JdbcTemplate jdbcTemplate ;
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    /**
     * 添加用户
     * @param user
     */
    public void add(User user) {
        String sql = "insert into tb_user values(?,?)" ;
        //使用update(String sql,Object...args):int - JdbcTemplate
        System.out.println(user.getUsername());
        int rows = jdbcTemplate.update(sql, user.getUsername(),user.getPassword());
        System.out.println("添加成功,影响记录数="+rows);
    }
    /**
     * 根据用户名修改其密码
     * @param user
     */
    public void update(User user) {
        String sql = "update tb_user set user_password=? where user_name=?" ;
        //使用update(String sql,Object...args)
        int rows = jdbcTemplate.update(sql,user.getPassword(),user.getUsername());
        System.out.println("修改成功,影响记录数="+rows);
    }
    /**
     * 根据用户名删除该用户
     * @param user
     */
    public void delete(User user) {
        String sql="delete from tb_user where user_name=?";
        //使用update(String sql,Object...args)
        int rows = jdbcTemplate.update(sql, user.getUsername());
        System.out.println("删除成功,影响记录数="+rows);
    }
    /**
     * 查询所有记录的行数
     */
    public void queryCount() {
        String sql = "select count(*) from tb_user";
        //使用的是queryForObject(String sql,Class<T> requiredType)
        int count = jdbcTemplate.queryForObject(sql,Integer.class);
        System.out.println("查询成功,所有累计行数="+count);
    }
    /**
     * 根据用户名查询该用户
     * @param user
     */
    public void queryObject(User user) {
        String sql = "select * from tb_user where user_name=?" ;
        /*
         * 使用queryForObject(String sql,RowMapper<T> rowMapper,Object...args)
         *  第二参数是接口RowMapper,需要自己写类实现接口,自己做数据封装
         */
        User user1 = jdbcTemplate.queryForObject(sql, new MyRowMapper(), user.getUsername());
        System.out.println("查询成功:"+user1);
    }
    /**
     * 返回所有用户的集合
     */
    public void queryList() {
        String sql = "select * from tb_user" ;
        //使用query(String sql,RowMapper<T> rowMapper,Object...args)
        List<User> userList = jdbcTemplate.query(sql, new MyRowMapper());
        System.out.println("查询成功:"+userList);
    }
}
/**
 * 自己写的接口封装
 * @author zhaoyuqiang
 *
 */
class MyRowMapper implements RowMapper<User>{

    @Override
    public User mapRow(ResultSet rs, int num) throws SQLException {
        //1. 从结果集里面得到数据,注意:user_name是数据库中的字段名称
        String username = rs.getString("user_name");
        String userpassword = rs.getString("user_password");
        //2.把得到的数据封装到对象里面
        User user = new User();
        user.setUsername(username);
        user.setUsername(userpassword);
        return user;
    }
}

2.4 test

package edu.kmust.user.test;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import edu.kmust.user.entity.User;
import edu.kmust.user.service.UserService;
public class UserTest {
    @Test
    public void test01() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) context.getBean("userService");
        User user = new User();
        user.setUsername("黄思");
        user.setPassword("123");
        /*User user1 = new User();
        user1.setUsername("赵玉强");
        user1.setPassword("123456");*/
        /*userService.add(user1);*/
        /*userService.update(user);*/
        /*userService.delete(user);*/
        /*userService.queryCount();*/
        /*userService.queryObject(user);*/
        userService.queryList();
    }
}

2.5 Spring配置文件

<?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置c3p0数据库连接池  -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
       <!-- 注入属性 -->
       <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
       <property name="jdbcUrl" value="jdbc:mysql:///db_springJdbcTemplate"></property>
       <property name="user" value="root"></property>
       <property name="password" value="root"></property>
    </bean>

    <!--创建JdbcTemplate(模板对象)  -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <!-- 将dataSource注入到模板对象中 -->
       <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 创建service,在service中注入dao对象-->
    <bean id="userService" class="edu.kmust.user.service.UserService">
         <property name="userDao" ref="userDao"></property>
    </bean>
    <!-- 创建dao -->
    <bean id="userDao" class="edu.kmust.user.dao.UserDao">
       <!-- 在dao中注入JdbcTemplate对象 -->
       <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
</beans>

3 代码案例可参考:

https://download.csdn.net/download/g425680992/10656971

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤旅青山迷情人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值