知识大全 Spring中使用JDBC
Posted 知
篇首语:少年意气强不羁,虎胁插翼白日飞。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Spring中使用JDBC相关的知识,希望对你有一定的参考价值。
Spring中使用JDBC 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
首先要获得DataSource连接池 要对数据库执行任何的JDBC操作 需要有一个Connection 在Spring中 Connection对象是通过DataSource获得的 有几种方法可以得到DataSource 其中一种方法是使用Spring提供的轻量级 springframework jdbc datasource DriverManagerDataSource 第二种方法是使用mons dbcp BasicDataSource类 一 使用DriverMangerDataSource 这种方法是轻量级的 方便测试 public class DataSoureProvider public static DriverManagerDataSource dataSource = new DriverManagerDataSource() public static DriverManagerDataSource getInstance() dataSource setDriverClassName( mysql jdbc Driver ) dataSource setUrl( jdbc:mysql://localhost: /book ) dataSource setUsername( y**** ) dataSource setPassword( h******* ) return dataSource; @Test public void test() DataSoureProvider getInstance() try dataSource getConnection() catch (SQLException e) e printStackTrace() 第 ~ 行是配置连接数据库所需的信息 二 使用BasicDataSouce创建一个连接池 应为BasicDataSource所有属性都是通过setter方法暴露在外面的 我们可以像配置其他Srping Bean那样配置它 我将数据库连接信息配置在properties文件中 利用spring的 springframewonfig PropertyPlaceholderConfigurer类进行读取装载 可以查看spring_装配Bean一文 书写配置文件applicationContext xml: <?xml version= encoding= UTF ?> <beans xmlns= xmlns:xsi= instance xmlns:p= xsi:schemaLocation= beans xsd > <bean id= dbproperty class= springframewonfig PropertyPlaceholderConfigurer > <property name= location > <value>connect properties</value> </property> </bean> <bean id= myDataSource class= mons dbcp BasicDataSource > <property name= driverClassName > <value>$db driver</value> </property> <property name= url > <value>$db url</value> </property> <property name= username > <value>$db username</value> </property> <property name= password > <value>$db password</value> </property> </bean> </beans> 第 ~ 行配置BasicDataSource参数 其中<value>中的参数是在connect propertices配置文件中拿到的 进行测试 public class DataSourceProvider @Test public void connectTest() ApplicationContext context = new ClassPathXmlApplicationContext( applicationContext xml ) BasicDataSource dataSource = (BasicDataSource) context getBean( myDataSource ) try dataSource getConnection() System out println( connect successful ) catch (SQLException e) e printStackTrace() 使用mons dbcp BasicDataSource需要引入额外的jar包 分别是mons collections jar mons dbcp jar mons pool jar 为了方便大家 这里有这三个jar包的下载地址 Spring把JDBC中重复的操作建立成了一个模板类 sprire JdbcTemplate 使用JdbcTemplate: 要使用JdbcTemplate 需要为每一个DAO配置一个JdbcTemplate实例 public class StudentDaoImp implements StudentDao private JdbcTemplate jdbcTemplate; @Override public void setJdbcTemplate(JdbcTemplate jdbcTemplate) this jdbcTemplate = jdbcTemplate; 如上 StudentDaoImp内配置了一个JdbcTemplate对象和它对应的setter方法 这样就可以在Spring配置文件中对其进行赋值 <?xml version= encoding= UTF ?> <beans xmlns= xmlns:xsi= instance xmlns:p= xsi:schemaLocation= beans xsd > <bean id= dbproperty class= springframewonfig PropertyPlaceholderConfigurer > <property name= location > <value>connect properties</value> </property> </bean> <bean id= myDataSource class= mons dbcp BasicDataSource > <property name= driverClassName > <value>$db driver</value> </property> <property name= url > <value>$db url</value> </property> <property name= username > <value>$db username</value> </property> <property name= password > <value>$db password</value> </property> </bean> <bean id= jdbcTemplate class= sprire JdbcTemplate > <property name= dataSource > <ref bean= myDataSource /> </property> </bean> <bean id= studentDao class= sunflower dao StudentDaoImp > <property name= jdbcTemplate > <ref bean= jdbcTemplate /> </property> </bean> </beans> 第 ~ 行是装配JdbcTemplate这个Bean 其中需要为其设置dataSource这个参数 就是我们上面的到的DataSource 使用JdbcTemplate插入数据 public class StudentDaoImp implements StudentDao private JdbcTemplate jdbcTemplate; @Override public void setJdbcTemplate(JdbcTemplate jdbcTemplate) this jdbcTemplate = jdbcTemplate; public void insert(Student student) String sql = insert into student (cno name score) values(? ? ?) ; //设置传递给通配符的参数 Object[] params = new Object[]student getCno() student getName() student getScore(); jdbcTemplate update(sql params) 第 ~ 行为插入一条学生记录的方法 第 行中 JdbcTemplate为我们提供了update(String sql Object… args)方法 方便我们进行数据的插入 进行测试 public class InsertTest @Test public void insertTest() Student student = new Student() student setCno( ) student setName( 张飞 ) student setScore( ) ApplicationContext context = new ClassPathXmlApplicationContext( applicationContext xml ) StudentDaoImp studentDao = (StudentDaoImp) context getBean( studentDao ) studentDao insert(student) 数据库中多了一条记录 mysql> select * from student; + + + + + | sno | cno | name | score | + + + + + | | | 地心 | | | | | 华雄 | | | | | 孝慈 | | | | | 必须 | | | | | 华雄 | | | | | 地心 | | | | | 横切 | | | | | 横切 | | | | | 横切 | | | | | 张飞 | | + + + + + rows in set 批量插入数据 批量插入数据需要用到 sprire BatchPreparedStatementSetter接口 修改StudentDaoImp: public class StudentDaoImp implements StudentDao private JdbcTemplate jdbcTemplate; @Override public void setJdbcTemplate(JdbcTemplate jdbcTemplate) this jdbcTemplate = jdbcTemplate; public int insert(Student student) String sql = insert into student (cno name score) values(? ? ?) ; //设置传递给通配符的参数 Object[] params = new Object[]student getCno() student getName() student getScore(); return jdbcTemplate update(sql params) public int[] batchInsert(final List<Student> list) String sql = insert into student (cno name score) values(? ? ?) ; BatchPreparedStatementSetter setter = new BatchPreparedStatementSetter() @Override public void setValues(PreparedStatement ps int index) throws SQLException Student student = (Student) list get(index) ps setInt( student getCno()) ps setString( student getName()) ps setDouble( student getScore()) //有多少条记录要处理 @Override public int getBatchSize() return list size() ; return jdbcTemplate batchUpdate(sql setter) 第 ~ 行为批量插入的方法 BatchPreparedStatementSetter接口的两个方法 其中getBatchSize()方法是得到需要插入的记录的个数 setValues(PreparedStatement ps int index)方法是实际进行插入的方法 进行测试 @Test public void batchInsert() Student student = null student = null student = null; student = new Student() student = new Student() student = new Student() student setCno( ) student setName( 刘备 ) student setScore( ) student setCno( ) student setName( 关羽 ) student setScore( ) student setCno( ) student setName( 张飞 ) student setScore( ) List<Student> list = new ArrayList<Student>() list add(student ) list add(student ) list add(student ) ApplicationContext context = new ClassPathXmlApplicationContext( applicationContext xml ) StudentDaoImp studentDao = (StudentDaoImp) context getBean( studentDao ) studentDao batchInsert(list) 插入结果 mysql> select * from student; + + + + + | sno | cno | name | score | + + + + + | | | 刘备 | | | | | 关羽 | | | | | 张飞 | | + + + + + rows in set 查询一条记录 执行一条数据的查询 需要使用 sprire RowCallbackHandler接口的实现 修改StudentDaoImp: /** * 查询一条记录 */ public Student getStudent(final int id) // 装载查询结果 final Student student = new Student() String sql = select o s name s score from student s where sno = ? ; // 设置查询参数 final Object[] params = new Object[] new Integer(id) ; // 进行查询 jdbcTemplate query(sql params new RowCallbackHandler() @Override public void processRow(ResultSet rs) throws SQLException student setCno(rs getInt( cno )) student setName(rs getString( name )) student setScore(rs getDouble( score )) ) return student; 进行测试 @Test public void selectTest() ApplicationContext context = new ClassPathXmlApplicationContext( applicationContext xml ) StudentDaoImp studentDao = (StudentDaoImp) context getBean( studentDao ) Student student = studentDao getStudent( ) System out println( cno: + student getCno() + name: + student getName() + score: + student getScore()) 查询多条记录 这里需要用到 sprire RowMapper接口的实现 修改StudentDaoImp: /** * 查询多条记录 */ public List<Student> getAllStudent() String sql = select o s name s score from student s ; return jdbcTemplate query(sql new RowMapper<Student>() @Override public Student mapRow(ResultSet rs int index) throws SQLException Student student = new Student() student setCno(rs getInt( cno )) student setName(rs getString( name )) student setScore(rs getDouble( score )) return student; ) RowMapper接口负责把Result中的一条记录映射成一个对象 进行测试 @Test public void getAllStudent() ApplicationContext context = new ClassPathXmlApplicationContext( applicationContext xml ) StudentDaoImp studentDao = (StudentDaoImp) context getBean( studentDao ) List<Student> list = new ArrayList<Student>() list = studentDao getAllStudent() for (int i = ; i < list size() i++) System out println( name is: + list get(i) getName()) 也可以使用这种方法查询一条记录 只要附加查询参数即可 /** * 查询一条记录 */ public Student getStudent(final int id) // 装载查询结果 final Student student = new Student() String sql = select o s name s score from student s where sno = ? ; // 设置查询参数 final Object[] params = new Object[] new Integer(id) ; List<Student> list = jdbcTemplate query(sql params new RowMapper<Student>() @Override public Student mapRow(ResultSet rs int index) throws SQLException Student student = new Student() student setCno(rs getInt( cno )) student setName(rs getString( name )) student setScore(rs getDouble( score )) return student; ) return list get( ) cha138/Article/program/Java/hx/201311/25910相关参考
SpringDAO之JDBC 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SpringDAO之
知识大全 spring中的jdbc访问类JdbcTemplate使用
spring中的jdbc访问类JdbcTemplate使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
可能大家也都习惯了spring和hibernate对CLOB字段的处理在spring中配置c
加快JDBC中JSP数据库的访问速度 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JSP程序都
在JDBC设计中加速JSP访问数据库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JSP程序都
Hibernate基于JDBC的事务 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hibern
配置JBoss4JDBC连接 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Jboss的开发人员
Hibernate基于JDBC的事务[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hib
Hibernate基于JDBC的事务[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Jav
Hibernate基于JDBC的事务[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Jav