初见Spring之JDBC

来源:互联网 发布:电玩游戏平台源码 编辑:程序博客网 时间:2024/05/21 11:55

初见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);       }    }}

原创粉丝点击