spring基础之JDBC配置

在spring配置文件配置数据库连接池

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mysql2209?userUnicode=true&amp;characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
<!--        配置jdbcTemplate对象,属性DataSource,将连接池组件注入-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

dao层使用jdbcTemplate实现数据库操作

注入jdbcTemplate
    @Resource(name = "jdbcTemplate")
    private JdbcTemplate jdbcTemplate;

1. upadte(String sql,Object args)方法实现单条增删改操作
    * 参数1.sql语句可传入预处理语句
    参数2:可变参数,替换sql语句值

    public int add(User user) {
        String sql="insert into user1 values(?,?,?)";
        Object[] args={user.getUserId(),user.getUserName(),user.getUserAge()};
   int update= jdbcTemplate.update(sql,args);
        return update;
    }
 @Override
    public int delete(int id) {
        String sql="delete from user1 where user_id=?";

         jdbcTemplate.update(sql,id);
        return  jdbcTemplate.update(sql,id);
    }

    @Override
    public int updateUserById(User user) {
       String sql="update user1 set user_name=?,user_age=? where user_id=?";
        Object[] args={user.getUserId(),user.getUserName(),user.getUserAge()};

        return jdbcTemplate.update(sql,args);
    }

.查询表中的某个数据,返回的是某个值

2.queryForObject(String sql,Class<T>requiredType)
    * 参数1:预处理的sql语句
    参数2:返回类型的class

  public Integer selectCount(){
        String sql="select count(*) from user1";
        Integer count=jdbcTemplate.queryForObject(sql,Integer.class);
   return count;
    }

 查询返回对象

 3. queryForObject(String sql,RowMapper<T> rowMapper,Object。。。args)
    参数1:预处理语句
    参数2:RowMapper接口,针对返回不同类型数据,使用该接口里边的实现类完成数据的封装
    参数3:替换sql语句值

  @Override
    public User selectUserById(int userId) {
       String sql="select*from user1 where user_id=?";
        RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
        User user=jdbcTemplate.queryForObject(sql,rowMapper,userId);
        return user;
    }

批量查询

4. query(String sql.RowMapper<T> rowMapper,Object....args)

参数1sql语句

参数2.实现数据的封装

参数3.sql的值

 

   public List<User> findAllUser() {
    
        String sql="select *from user1";
        List<User> userList=jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class));
        return userList;
    }

 批量增删改

5.batchUpdate(String sql,List<Object[]> batchArgs)
* 参数1sql语句
* 参数2:List集合,添加多条记录数据

1.pom.xml配置文件导入

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Spring_06_JDBC</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.22.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.21.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.22.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.2.22.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>5.2.22.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>5.2.22.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.16</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
    </dependencies>

</project>

2.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="com.dltt"/>
<!--    jdbcTemplate
spring框架对jdbc进行封装,使用jdbcTemplate方便的对数据库操作
-->
<!--在spring配置文件配置数据库连接池-->
<!--    数据库连接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mysql2209?userUnicode=true&amp;characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
<!--        配置jdbcTemplate对象,属性DataSource,将连接池组件注入-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

3.dao层数据持久层进行数据操作


package com.dltt.user.dao;

import com.dltt.user.vo.User;

import javax.jws.soap.SOAPBinding;

public interface UserDao {
    public int add(User user);
    public int delete(int id);
    public  int updateUserById(User user);
    public Integer selectCount();
    public  User selectUserById(int userId);
}







package com.dltt.user.dao.imp;

import com.dltt.user.dao.UserDao;
import com.dltt.user.vo.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;

@Repository
public class ImplUserDao implements UserDao {
    /*在dao层使用jdbcTemplate实现数据库操作
    upadte(String sql,Object args)方法实现单条增删改操作
    * 参数1.sql语句可传入预处理语句
    参数2:可变参数,替换sql语句值
    * */
//注入jdbcTemplate
    @Resource(name = "jdbcTemplate")
    private JdbcTemplate jdbcTemplate;
    @Override
    public int add(User user) {
        String sql="insert into user1 values(?,?,?)";
        Object[] args={user.getUserId(),user.getUserName(),user.getUserAge()};
   int update= jdbcTemplate.update(sql,args);
        return update;
    }

    @Override
    public int delete(int id) {
        String sql="delete from user1 where user_id=?";

         jdbcTemplate.update(sql,id);
        return  jdbcTemplate.update(sql,id);
    }

    @Override
    public int updateUserById(User user) {
       String sql="update user1 set user_name=?,user_age=? where user_id=?";
        Object[] args={user.getUserId(),user.getUserName(),user.getUserAge()};

        return jdbcTemplate.update(sql,args);
    }
    /*1.查询表中的某个数据,返回的是某个值
    2.使用queryForObject(String sql,Class<T>requiredType)
    * 参数1:预处理的sql语句
    参数2:返回类型的class
    * */
    public Integer selectCount(){
        String sql="select count(*) from user1";
        Integer count=jdbcTemplate.queryForObject(sql,Integer.class);
   return count;
    }


    /*查询返回对象
    queryForObject(String sql,RowMapper<T> rowMapper,Object。。。args)
    1:预处理语句
    参数2:RowMapper接口,针对返回不同类型数据,使用该接口里边的实现类完成数据的封装
    参数3:替换sql语句值
    *
    * */
    @Override
    public User selectUserById(int userId) {
       String sql="select*from user1 where user_id=?";
        RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
        User user=jdbcTemplate.queryForObject(sql,rowMapper,userId);
        return user;
    }
}

4.Test进行测试

package com.dltt.test;

import com.dltt.user.dao.UserDao;
import com.dltt.user.vo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test01 {
    @Test
    public void test01(){
        ApplicationContext app=new ClassPathXmlApplicationContext("app.xml");
        UserDao userDao=(UserDao) app.getBean("implUserDao");
        int result=userDao.add(new User(1002,"李四",19));
        System.out.println(result);
    }
    public void test02(){
        ApplicationContext app=new ClassPathXmlApplicationContext("app.xml");
        UserDao userDao=(UserDao) app.getBean("implUserDao");
        int result=userDao.updateUserById(new User(1002,"王五",22));
        System.out.println(result);
    }
    public void test03(){
        ApplicationContext app=new ClassPathXmlApplicationContext("app.xml");
        UserDao userDao=(UserDao) app.getBean("implUserDao");
        int result=userDao.delete(1002);
        System.out.println(result);
    }
    @Test
    public void test04(){
        ApplicationContext app=new ClassPathXmlApplicationContext("app.xml");
        UserDao userDao=(UserDao) app.getBean("implUserDao");
        System.out.println(userDao.selectCount());
    }
    @Test
    public void test05(){
        ApplicationContext app=new ClassPathXmlApplicationContext("app.xml");
        UserDao userDao=(UserDao) app.getBean("implUserDao");
        System.out.println(userDao.selectUserById(1001));
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring作为实现J2EE的一个全方位应用程序框架,为我们开发企业级应用提供了一个健壮、高效的解决方案。所谓全方位,不得不说以下几个特点: 1 非侵入式:对于写代码从来不考虑复用和移植的程序员来说,这一点根本就没有吸引力,那么请跳过。所谓非侵入式是指Spring框架的API不会在业务逻辑上出现,也就是说我们的业务逻辑应该是纯净的,不能出现与业务逻辑无关的代码。首先针对应用而言,这样我们才能将业务逻辑从当前应用中剥离出来,从而在其他的应用中实现复用;其次针对框架而言,由于业务逻辑中没有Spring的API,所以业务逻辑也可以从Spring框架快速的移植到其他框架。 2 容器:Spring提供容器功能,容器可以管理对象的生命周期,对象与对象之间的依赖关系。你可以写一个配置文件(通常是xml文件),在上面定义对象的名字,是否是单例,以及设置与其他对象的依赖关系。那么在容器启动之后,这些对象就被实例化好了,你直接去用就好了,而且依赖关系也建立好了。 3 IOC:控制反转,谓之“依赖关系的转移”,如果以前都是依赖于实现,那么现在反转为依赖于抽象吧,其实它的核心思想就是要面向接口编程,至于何谓接口何谓抽象,以及它们的好处,多看看设计模式吧,这里就不费口舌了。 4 依赖注入:建立对象与对象之间依赖关系的实现,包括接口注入、构造注入、set注入,在Spring中只支持后两种 5 AOP:面向方面编程,我们可以把日志、安全、事务管理等服务(或功能)理解成一个“方面”,那么以前这些服务一直是直接写在业务逻辑的代码当中的,这有两点不好;首先业务逻辑不纯净,其次这些服务被很多业务逻辑反复使用,完全可以剥离出来做到复用。那么AOP就是这些问题的解决方案,我们可以把这些服务剥离出来形成一个“方面”,以期做到复用;然后将“方面”动态的插入到业务逻辑中让业务逻辑能够享受到此“方面”的服务 其他还有一些特点不是Spring的核心,这里只做简单陈述,如:对JDBC的封装与简化,提供事务管理功能,对O/R mapping工具(hibernate、iBATIS)的整合;提供MVC解决方案,也可以与其他web框架(Struts、JSF)进行整合;还有对JNDI、mail等服务进行封装。
Spring-jdbcSpring框架提供的一种数据库访问方式,它基于JDBC API实现,但在使用上比JDBC更加简洁和易用。下面是Spring-jdbc的使用方法: 1. 配置数据源:在Spring配置文件中配置一个数据源,可以使用Spring-jdbc内置的数据源或者自己实现数据源。 2. 编写DAO类:使用Spring-jdbc访问数据库需要编写DAO类。DAO类需要继承Spring提供的JdbcDaoSupport类,这样就能够获得一个JdbcTemplate对象,用于执行SQL语句。 3. 编写SQL语句:在DAO类中编写SQL语句,可以使用JdbcTemplate对象提供的方法执行SQL语句。 4. 对SQL语句的结果进行处理:对于查询语句,JdbcTemplate提供了可以返回结果集的方法,可用于遍历结果集、映射结果集到Java对象、统计结果集等操作。 下面是一个简单的使用Spring-jdbc访问MySQL数据库的示例: 首先在Spring配置文件中配置MySQL数据源: ``` <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="123456"/> </bean> ``` 然后编写DAO类,此示例中使用JdbcTemplate对象执行SQL语句并返回结果: ``` public class UserDao extends JdbcDaoSupport { public User getUserById(int id) { String sql = "SELECT id,name,age FROM user WHERE id=?"; return getJdbcTemplate().queryForObject(sql, new Object[]{id}, new RowMapper<User>() { @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setAge(rs.getInt("age")); return user; } }); } } ``` 最后在需要使用数据库的地方调用DAO类中的方法即可完成数据库操作。 ``` UserDao userDao = new UserDao(); User user = userDao.getUserById(1); System.out.println(user.getName()); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值