初见Spring之JDBC

初见Spring之JDBC

    Spring是具有重要的特性就是提供对了JDBC的支持,Spring对JDBC的支持简化了java中JDBC操作,降低的开发难度,本文主要介绍如何利用Spring完成数据库连接以及增删改查等操作。

    一丶Spring JDBC的基本概述

    Spring操作数据库的主要和两个类相关:

    1.DriverManagerDataSource:主要管理和数据的连接,包括数据库驱动,目标数据库url,登录数据的用户名以及密码,这个类交由Spring管理,我们只需要在配置文件中配置这个对象即可。

    2.JdbcTemplate:是操作数据的核心类,这个类依赖DriverManagerDataSource这个类,对外提供访问数据库的一系列方法,其中常用的包括如下:

    (1)JdbcTemplate.update(Stringsql)可以完成对数据的增删改的操作

    (2)JdbcTemplate.execute(Stringsql)执行sql代表的数据操作,通过用来建表,建库。

    (3)JdbcTemplate.quertyForObject(Strigsql,RowMapper map,Object...)

    这个函数用来完成对数据库的查询操作,其返回值是一个单个的对象。

    (4)JdbcTemplate.query(String sql,RowMappermap,object...)

    这个函数也是完成对数据的查询操作,其返回值不是单个对象,而是一个List集合,当查询对象结果有多个的时候采用这个方法。

二丶Spring JDBC的基本操作

    下面利用一个增删改查的操作来介绍Spring JDBC的基本操作。

1.SpringJDBC配置文件书写,利用Spring JDBC操作数据库的时候,一定要在Spring的配置文件中配置DataSource和JdbcTemplate这两个Bean对象,配置文件内容如下:

  <!-- 指定需要扫描的包,使注解生效 -->
  <!-- 指定需要扫描的包,使注解生效 -->
      <context:component-scan base-package="jdbc"/>
      <!--AOP注解生效-->
      <aop:aspectj-autoproxy />
      <!-- 1配置数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <!--数据库驱动 -->
       <property name="driverClassName"value="com.mysql.jdbc.Driver" />
       <!--连接数据库的url -->
       <property name="url" value="jdbc:mysql://localhost:3306/spring"/>
       <!--连接数据库的用户名 -->
       <property name="username"value="root" />
       <!--连接数据库的密码 -->
       <property name="password"value="123456" />
    </bean>
    <!-- 2配置JDBC模板 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <!-- 默认必须使用数据源 -->
       <property name="dataSource"ref="dataSource" />
    </bean>

      <context:component-scan base-package="jdbc"/>
      <!--AOP注解生效-->
      <aop:aspectj-autoproxy />
      <!-- 1配置数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <!--数据库驱动 -->
       <property name="driverClassName"value="com.mysql.jdbc.Driver" />
       <!--连接数据库的url -->
       <property name="url" value="jdbc:mysql://localhost:3306/spring"/>
       <!--连接数据库的用户名 -->
       <property name="username"value="root" />
       <!--连接数据库的密码 -->
       <property name="password"value="123456" />
    </bean>
    <!-- 2配置JDBC模板 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <!-- 默认必须使用数据源 -->
       <property name="dataSource"ref="dataSource" />
    </bean>

2.User对象设计,这里一定需要特别注意,在将设计实体类的时候,必须要给属性值提供get和set方法并且提供不带参数的构造函数,否则Spring JDBC在返回查询的实体对象的时候会报错。

publicclass User {
    publicString name;
    publicint age;
    publicUser(String name,int age){
       this.name= name;
       this.age= age;
    }
    publicUser(){
      
    }
    publicString getName() {
       returnname;
    }
    publicvoid setName(String name) {
       this.name= name;
    }
    publicint getAge() {
       returnage;
    }
    publicvoid setAge(int age) {
       this.age= age;
    }  
} 

3.UserDaoImple的设计:

@Repository("userDao")
public class userDaoImpl implements userDao{
    @Resource(name="jdbcTemplate")
    publicJdbcTemplate JdbcTemplate;
    @Override
    publicint insert(User user) {
       // TODO Auto-generated method stub
       String sql = "insert intouser(name,age) value(?,?)";
       intresult= JdbcTemplate.update(sql,user.name,user.age);
       returnresult;
    }
    @Override
    publicint deleteByName(String name) {
       // TODO Auto-generated method stub
       String sql = "delete from user wherename=?";
       returnJdbcTemplate.update(sql,name);
    }
 
    @Override
    publicint updataByName(User user) {
       // TODO Auto-generated method stub
       String sql = "update user set age=?where name=?";
       returnJdbcTemplate.update(sql,user.age,user.name);
    }
   
   
    @Override
    publicUser queryByName(String name) {
       // TODO Auto-generated method stub
       String sql = "select * from userwhere name=?";
       RowMapper<User> rowMapper = newBeanPropertyRowMapper<User>(User.class);
       returnJdbcTemplate.queryForObject(sql,rowMapper,name);
    }
    @Override
    publicList<User> queryAll() {
       // TODO Auto-generated method stub
       String sql = "select * fromuser";
       RowMapper<User> rowMapper = newBeanPropertyRowMapper<User>(User.class);
       returnJdbcTemplate.query(sql,rowMapper);
    }
    @Test
    @Override
    publicvoid createUserTable() {
       // TODO Auto-generated method stub
       String sql = "create tableuser("+
                    "id int primary keyauto_increment,"+
                    "name char(50),"+
                    "age int)";
       //指向一条建标语句
       JdbcTemplate.execute(sql);
    }
}

4.测试代码设计,在这个测试代码中加入了Junit4这个单元测试框架。

public class MainJDBC {
    @Test
    publicvoid mainTest(){
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
       userDao userDao  =(userDao) context.getBean("userDao");
       userDao.createUserTable();
    }
    @Test
    publicvoid insertTest(){
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
       userDao userDao  =(userDao) context.getBean("userDao");
       User user = new User("jason2", 22);
       userDao.insert(user);
    }
    @Test
    publicvoid deleteTest(){
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
       userDao userDao  =(userDao) context.getBean("userDao");
       User user = new User("jason", 22);
       userDao.deleteByName("jason");
    }
    @Test
    publicvoid updateTest(){
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
       userDao userDao  =(userDao) context.getBean("userDao");
       User user = new User("jason", 100);
       userDao.updataByName(user);
    }
    @Test
    publicvoid queryTest(){
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
       userDao userDao  =(userDao) context.getBean("userDao");
       User user = userDao.queryByName("jason1");
       System.out.println("name="+user.name+"age="+user.age);
    }
    @Test
    publicvoid queryAllTest(){
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
       userDao userDao  =(userDao) context.getBean("userDao");
      
       List<User> userList =userDao.queryAll();
       for(int i =0;i<userList.size();i++){
           System.out.println("name ="+userList.get(i).name+"age="+userList.get(i).age);
       }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值