Spring整合JDBC

Spring整合JDBC

首先Spring框架中提供了一个可以操作数据库的对象,这个对象翻转过来JDBC的细节,提供了一套模板,这个模板类就是JdbcTemplate 该类在Spring-jdbc jar包中.
就是说我们可以使用这个然后就可以不用取使用jdbc了

接下来就是如何使用这个JdbcTemplate的步骤

1.首先是要在pom.xml中到ar包 没有这些包你是没办法完成接下来的操作的

     <dependencies>

        <!--Spring核心jar包,使用Spring就必须导入这个包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>



        <!--jdbc的jar包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>


        <!--数据库驱动jar包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
            <scope>runtime</scope>
        </dependency>



        <!--连接池jar包(C3P0连接池)-->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <!--德鲁伊连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.2</version>
        </dependency>


        <!--spring-test测试包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>

        <!--junit测试包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

2.准备数据库 user表,给你一个截图,自己对照着写一个数据库表吧
在这里插入图片描述
插入:先把建包的样子发给你们看一哈,然后接着说,
在这里插入图片描述

3.书写dao层接口,因为我们的抽象方法都是在dao层的哦,所以要先写一个dao层的接口

// dao接口
public interface UserDao {

    // 添加用户
    void addUser(User user);
    // 删除用户 根据id值
    void deleteUserById(int uid);
    // 修改用户信息 根据id值
    void updateUserById(User user);
    // 查询所有用户
    List<User> queryAllUsers();
    // 查询单个用户 根据id值
    User queryUserById(int uid);
    // 分页+模糊查询
    List<User> queryFuzzyUserByUsername(String u_name,int beginIndex);
    // 查询总记录值
    int queryUserCount();

4.先来看看我们主配置文件里面的信息和配置

 <!--组件扫描:目的就是一下吧com.zhiyou100这个包里面的所有类也接口对象全部扫描进来,就可以不用一个一个的去bean对象了-->
   <context:component-scan base-package="com.zhiyou100"/>


    <!--content:property   这个是需要强写的在Spring内存之中引入文件格式-->
    <!--引入db.properties文件到Spring容器-->
    <context:property-placeholder location="classpath:db.properties"/>

    <!--配置数据源-->
    <!--采用数据库连接池 C3p0 依赖于数据源DataSource   ComboPooledDataSource  -->
    <!--把ComboPooledDataSource该对象注入到Spring的容器中-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  <!--引入对象并取别名为dataSource-->
       <property name="driverClass" value="${jdbc.driverClass}"/>
       <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
       <property name="user"  value="${jdbc.user}"/>
       <property name="password" value="${jdbc.password}"/>
    </bean>

   <!--配置JdbcTemplate对象-->
   <!--该对象也依赖于数据源DataSource-->
   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <!--属性注入 采用set方式-->
       <property name="dataSource" ref="dataSource"/>
       <!-- <constructor-arg -->
   </bean>

下面是里面会用到的文件db.properties

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/db_spring?characterEncoding=UTF-8
jdbc.user=root
jdbc.password=root```

5.写dao层接口的实现类,并写增删改查的方法,因为接口里面的方法没有方法体,所以写实现类来实现他们需要的方法实现
注意在jdbcTemplate对象里面 增删改都是用方法update 只有查询才使用query 如果查询的事单个数据就使用方法 queryForObject 如果查询的是一个集合就使用方法 query

@Repository("userDao")//该注解的目的就是把该对象交给Spring内存,这样就能在内存中找到该对象并使用它
public class UserDaoImpl implements UserDao {

    @Autowired //前提是Spring容器含有该对象,我们之前已经吧对象存到内存空间里面了,在执着配置文件里面
    private JdbcTemplate jdbcTemplate;

    // 对于数据库来说  增删改 都是更新
    @Override
    public void addUser(User user) {
        // 添加用户                                                    
        int num = jdbcTemplate.update("insert into user values(null,?,?,?)", user.getU_name(), user.getU_age(), user.getU_salary());
        if (num > 0) {
            System.out.println("数据添加成功!");
        } else {
            System.out.println("数据添加失败!");
        }
    }

    @Override
    public void deleteUserById(int uid) {
        int num = jdbcTemplate.update("delete from user where u_id = ?", uid);
        if (num > 0) {
            System.out.println("数据删除成功!");
        } else {
            System.out.println("数据删除失败!");
        }
    }

    // 更新用户名和年龄
    @Override
    public void updateUserById(User user) {
        int num = jdbcTemplate.update("update user set u_name = ?,u_age = ? where u_id = ?", user.getU_name(), user.getU_age(), user.getU_id());
        if (num > 0) {
            System.out.println("数据更新成功!");
        } else {
            System.out.println("数据更新失败");
        }
    }

    @Override
    public List<User> queryAllUsers() {
        List<User> users = null;
         try {
             // BeanPropertyRowMapper 装配多条记录
            users = jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<>(User.class));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return users;
    }

    @Override
    public User queryUserById(int uid) {
        // 根据用户id值查询一条记录  queryForObject方法
        User user = null;
        try {
             user = jdbcTemplate.queryForObject("select * from user where u_id = ?", new BeanPropertyRowMapper<>(User.class), uid);
        }catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }

    // 分页+模糊查询
    @Override
    public List<User> queryFuzzyUserByUsername(String u_name, int beginIndex) {
        List<User> users = null;
        try {
            users = jdbcTemplate.query("select * from user where u_name like '%' ? '%' limit ?,3", new BeanPropertyRowMapper<>(User.class),u_name,beginIndex);
        }catch (Exception e){
            e.printStackTrace();
        }
        return users;
    }

    @Override
    public int queryUserCount() {
        // 需要返回一个数值  queryForObject   后面传入Integer.class字节码对象
        int count = jdbcTemplate.queryForObject("select count(*) from user", Integer.class);
        return count;
    }

6.最后junit的单元测试

@RunWith(SpringJUnit4ClassRunner.class)//目的是让我们的测试类运行与Spring内存之后,
@ContextConfiguration("classpath:applicationContext.xml")//这一步是为了读取主配置文件中的数据,读取之后就能得到里面的数据在测试后的时候能使用
public class JdbcTemplateTest {

    // 进行dao接口的属性注入
    @Autowired  //因为只有一个单独的userDao对象所以能够直接使用 @Autowired从spring内存中读取对象并注入
    private UserDao userDao;

    @Autowired
    private User user;// 此时user值就从容器注入进来

    /**
     * 测试 查询总记录值
     */
    @Test
    public void testQueryCount() {
        int count = userDao.queryUserCount();
        System.out.println(count);// 9
    }

    /**
     * 测试 分页+模糊查询
     */
    @Test
    public void testQueryFuzzyUserByUsername() {
        List<User> users = userDao.queryFuzzyUserByUsername("小", 0);
        for (User user1 : users) {
            System.out.println(user1);
        }
    }

    /**
     *  测试 queryUserById
     */
    @Test
    public void testQueryUserById() {
        // 周八 id值为 7
        User user = userDao.queryUserById(7);
        System.out.println(user);//User{u_id=7, u_name='周八', u_age=29, u_salary=6000.0}
    }

    /**
     * 测试 queryAllUsers
     */
    @Test
    public void testQueryALllUsers(){
        List<User> users = userDao.queryAllUsers();
        for (User user1 : users) {
            System.out.println(user1);
        }
    }

    /**
     * 测试  deleteUser
     */
    @Test
    public void testDeleteUser() {
        userDao.deleteUserById(11);// 数据删除成功!
    }

    /**
     * 测试  updateUser
     */
    @Test
    public void testUpdateUser() {
        // 更新用户名字和年龄 根据id值 --->把小孙的信息更改为小强的信息
        User user = new User();
        user.setU_age(40);
        user.setU_name("小强");
        user.setU_id(11);
        userDao.updateUserById(user);// 数据更新成功!
    }

    /**
     * 测试 addUser
     */
    @Test
    public void testAddUser(){
        userDao.addUser(user);
    }
}

总结:Spring整合JDBC最终目的就是简化jdbc操作数据库的步骤,为用户带来便利.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值