spirng_3_代理模式

1.Spring JDBC 数据访问

Spring JDBC是Spring所提供的持久层技术,它的主要目标是降低使用JDBC API的门槛,以一种更直接,更简介,更简单的方式使用JDBC API, 在Spring JDBC里,仅需做那些与业务相关的DML操作,而将资源获取,Statment创建,资源释放以及异常处理等繁杂而乏味的工作交给Spring JDBC..

虽然ORM的框架已经成熟丰富,但是JDBC的灵活,直接的特性,依然让他拥有自己的用武之地,如在完全依赖查询模型动态产生查询语句的综合查询系统中,Hibernaye,MyBatis,JPA等框架都无法使用,这里JDBC是唯一的选择.

2.JdbcTemplate 的使用

1.导入jar包

 <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.37</version>
    </dependency>
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>
    <!-- 配置的 spring-jdbc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.18.RELEASE</version>
    </dependency>

2.测试 JdbcTemplate的使用

public void test() {

    //创建一个连接池
    ComboPooledDataSource comboPooledDataSource=new ComboPooledDataSource();
    try {
        comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
        comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/ssm");
        comboPooledDataSource.setUser("root");
        comboPooledDataSource.setPassword("123");

        //2.创建JdbcTemplate对象
        JdbcTemplate jdbcTemplate=new JdbcTemplate(comboPooledDataSource);


        //3.执行sql
        String sql="insert into users values(null,?,?)";

       jdbcTemplate.update(sql,"daimenglaoshi","123");


    } catch (PropertyVetoException e) {
        e.printStackTrace();
    }

}

3.用spring 创建ComboPooledDataSource和JdbcTemplate对象

3.1添加ioc相关jar包

<!-- 导入spring的核心jar包 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
  <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-expression</artifactId>
  <version>4.3.18.RELEASE</version>
</dependency>

 

3.2创建db.properties文件

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssm
user=root
password=123

3.3在applicationContext.xml文件中创建对象

<!-- 导入db.properties文件 -->
<context:property-placeholder location="db.properties"></context:property-placeholder>

<!-- 创建一个连接池对象 -->
<bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
   <property name="driverClass" value="${driverClass}" />
    <property name="jdbcUrl" value="${url}"/>
    <property name="user" value="${user}" />
    <property name="password" value="${password}" />
</bean>
<!-- 创建一个jdbcTemplate对象 并且通过构造函数 将连接池对象 注入到jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
    <constructor-arg name="dataSource" ref="comboPooledDataSource" />
</bean>

3.4 修改dao 层

@Component
public class UsersDao implements IUsersDao {

    //注入jdbcTemplate对象
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    //update方法 (增 删 改)
    @Override
    public void add(Users user) {

        String sql = "insert into users values(null,?,?)";

        jdbcTemplate.update(sql, user.getUname(), user.getPassword());

    }

3.5测试

@Test
public void test()
{
    ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

    IUsersDao usersDao=  applicationContext.getBean("usersDao",IUsersDao.class);

    Users user=new Users("xiaowanglaoshi","123");

    usersDao.add(user);
}

4.JdbcTemplate 常用方法

update:

实现增删改

 //update方法 (增 删 改)
    @Override
    public void add(Users user) {

        String sql = "insert into users values(null,?,?)";

        jdbcTemplate.update(sql, user.getUname(), user.getPassword());

    }

queryForObject:

查询的结果是一个对象或单个值

 

//测试 根据id号查询
public Users selectUsersById(int uid)
{
    String sql="select * from users where uid=?";

    //查询 单行数据
    Users user= jdbcTemplate.queryForObject(sql, new Object[]{uid}, new RowMapper<Users>() {

        @Override
        public Users mapRow(ResultSet resultSet, int i) throws SQLException {
            return rowMapHandler(resultSet);
        }
    });

    return user;

}

 //自己组装对象
    public Users rowMapHandler(ResultSet resultSet) throws SQLException {
          Users user=new Users();
          user.setUid(resultSet.getInt("uid"));
          user.setUname(resultSet.getString("uname"));
          user.setPassword(resultSet.getString("password"));
          return user;
    }

查询的结果是一个数值

 public int selectUsersCount() {
        String sql = "select count(*) from users";

        int num = jdbcTemplate.queryForObject(sql, Integer.class);

        return num;
    }

query

  //查询  返回集合
    public List<Users> selectUsers() {
        String sql = "select * from users";

        List<Users> usersList= jdbcTemplate.query(sql, new RowMapper<Users>() {

            //遍历结果集 将结果集中的每条数据 组装成Users对象
            @Override
            public Users mapRow(ResultSet resultSet, int i) throws SQLException {
                return rowMapHander(resultSet);
            }
        });

        return usersList;
    }

    //自己组装对象
    public Users rowMapHander(ResultSet resultSet) throws SQLException {
          Users user=new Users();
          user.setUid(resultSet.getInt("uid"));
          user.setUname(resultSet.getString("uname"));
          user.setPassword(resultSet.getString("password"));
          return user;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章