zoukankan      html  css  js  c++  java
  • Spring实战读书笔记 第五章 征服数据库

    1,Spring DAO类模板负责通用访问数据库功能:
        -1,准备资源。
        -2,开始事务。
        -3,在事务中执行。
        -4,返回数据。
        -5,提交、回滚事务
        -6,关闭资源和处理错误。
    2,使用JDBC
        -1,Spring提供三类JDBC模板
        JdbcTemplate:最基本的Spring JDBC模板,这个模板支持最简单的JDBC数据库访问功能以及简单的索引参数查询。
        NamedParameterJdbcTemplate:使用该模板类查询时,可以将查询值以命名参数的形式绑定到SQL中,而不是简单的使用索引参数。
        SimpleJdbcTempleate:该模板利用Java 5的一些特性,如自动装箱、泛型以及可变参数来简化JDBC模板的使用。
    3,配置JDBC
    <bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName"
    value="oracle.jdbc.driver.OracleDriver" />
    <property name="url"
    value="jdbc:oracle:thin:@ip:1521:xxxxx" />
    <property name="username" value="xxxxx" />
    <property name="password" value="xxxxxx" />
    </bean>
    public class JDBCTest {
     
    public static void main(String[] args) throws Exception {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("chp05/dao/spring.xml");
     
     
    DataSource ds = (DataSource) ctx.getBean("dataSource");
    System.out.println(ds.getConnection().toString());
    }
    }
    4,使用SimpleJdbcTempleate访问数据库
        配置XML文件
    <bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName"
    value="oracle.jdbc.driver.OracleDriver" />
    <property name="url"
    value="jdbc:oracle:thin:@172.19.188.163:1521:isqcdev" />
    <property name="username" value="isqc" />
    <property name="password" value="isqc" />
    </bean>
     
    <bean id="jdbcTemplate"
    class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
    <constructor-arg ref="dataSource" />
    </bean>
    Dao
    package chp05.dao;
     
    import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
     
    /**
    * 类描述:JDBC连接测试类
    *
    * @author: Jing
    * History: Jan 12, 2015 1:54:47 PM Jing Created.
    *
    */
    @SuppressWarnings("deprecation")
    public class JdbcDao {
    private SimpleJdbcTemplate jdbcTemplate;
     
    public void setJdbcTemplate(SimpleJdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
    }
    /**
    *
    * 方法说明:新增学生
    *
    * Author: Jing
    * Create Date: Jan 12, 2015 2:01:31 PM
    */
    public int addStudent(Student s){
    String sql = "INSERT INTO student (s_name, s_age) VALUES(?, ?)";
    int result = jdbcTemplate.update(sql, s.getSName(), s.getAge());
    return result;
    }
     
    }
    <bean id="jdbcDao" class="chp05.dao.JdbcDao">
    <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    单元测试:
    package chp05.dao;
     
     
    import org.junit.Assert;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
     
    /**
    * 类描述:
    *
    * @author: Jing
    * History: Jan 12, 2015 2:01:54 PM Jing Created.
    *
    */
    public class JdbcDaoTest {
    @Test
    public void testAddStudet(){
    ApplicationContext ctx = new ClassPathXmlApplicationContext("chp05/dao/spring.xml");
     
    JdbcDao dao = (JdbcDao) ctx.getBean("jdbcDao");
    Student s = new Student();
    s.setAge(1);
    s.setSName("Lisi");
    int result = dao.addStudent(s);
    Assert.assertEquals(1, result);
    }
    }
    查询方法模拟:
    public class JdbcDao {
     
    private SimpleJdbcTemplate jdbcTemplate;
     
    /**
    * ResultSet和Student匹配对象
    */
    private ParameterizedRowMapper<Student> rowMapper = new ParameterizedRowMapper<Student>() {
     
    @Override
    public Student mapRow(ResultSet rs, int arg1) throws SQLException {
    Student s = new Student();
    s.setSName(rs.getString(1));
    s.setAge(rs.getInt(2));
    return s;
    }
    };
    /**
    *
    * 方法说明:根据学生姓名查询学生信息
    *
    * Author: Jing Create Date: Jan 12, 2015 2:19:30 PM
    */
    public Student getStudentByName(Student s) {
     
    String sql = "SELECT s_name,s_age from student WHERE s_name = ? and rownum = 1";
    s = jdbcTemplate.queryForObject(sql, rowMapper, s.getSName());
    return s;
    }
     
    @Test
    public void testGetStudentByName(){
    ApplicationContext ctx = new ClassPathXmlApplicationContext("chp05/dao/spring.xml");
     
    JdbcDao dao = (JdbcDao) ctx.getBean("jdbcDao");
    Student s = new Student();//Student类重写equals方法
    s.setSName("Lisi");
    s.setAge(1);
    Student sTemp = dao.getStudentByName(s);
    Assert.assertEquals(s, sTemp);
    }
    5,使用命名参数
    /**
    *
    * 方法说明:通过命名参数增加学生信息
    *
    * Author: Jing Create Date: Jan 12, 2015 3:58:06 PM
    */
    public int addStudentbyNameParameter(Student s) {
     
    String sql = "INSERT INTO student (s_name, s_age) VALUES(:username, :age)";
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("username", s.getSName());
    params.put("age", s.getAge());
    return jdbcTemplate.update(sql, params);
    }
    欢迎转载,但转载请注明原文链接[博客园: http://www.cnblogs.com/jingLongJun/]
    [CSDN博客:http://blog.csdn.net/mergades]。
    如相关博文涉及到版权问题,请联系本人。
  • 相关阅读:
    vim 末行模式简单练习
    末行模式
    vim 简单用法
    sed用法
    在原有的基础之上,启用NAT模型
    启用隔离模型
    一个前端的自我修养
    如何提升我的HTML&CSS技术,编写有结构的代码
    MVC缓存
    MVC分页
  • 原文地址:https://www.cnblogs.com/jingLongJun/p/4491057.html
Copyright © 2011-2022 走看看