发表于: 2018-04-04 21:06:32

1 640


day17.


今天完成的事情:

1.bean容器

在spring容器内拼凑bean叫作装配。装配bean的时候,你是在告诉容器,需要哪些bean,以及容器如何使用依赖注入将它们配合在一起。理论上,bean装配可以从任何资源获得,包括属性文件,关系数据库等,但xml是最常见的spring 应用系统配置源。Spring中的几种容器都支持使用XML装配bean,包括:    XMLBeanFactory ,

    ClassPathXMLApplicationContext ,

    FileSystemXMLApplicationContext ,

    XMLWebApplicationContext ;

学习了基本的XML配置包括如下几个方面:  

    1.添加一个bean

    2.设置bean的属性

        2.1 手动设置

            2.1.1 通过Setter方法

            2.1.2 通过构造器

        2.2 自动设置

    其中bean的属性即为bean里的成员变量,这些成员变量值的获得可以通过setter方法,例如某个属性为name,则setter方法为setName(String name);

    或者通过构造器在类被实例化时初始化。Setter方法(例如setName方法)或者构造器的调用都可以通过在XML文件里进行配置,从而实现让spring容器来自动进行。

             

   1)添加一个bean,以下是一个例子:

    <beanid = “mybean”Class = “blog.spring.MyBean”

        Singleton = “false”

        init-method = “initMethod”

        destroy-method = “destroyMethod”

        autowire = “autowire type”

    />

    下面是对该标签里各个属性的解释:

    Id : 标识该bean的名称,通过factory.getBean(“id”)来获得实例。

    Class : 该bean的类路径。

    Singleton : 默认为true,即单实例模式,每次getBean(“id”)时获取的都是同一个实例,如果设置为false,即原型模式,则每次获取的是新创建的实例。

    Init-method : 在bean实例化后要调用的方法(bean里定义好的方法)。

    Destroy-method : bean从容器里删除之前要调用的方法。

    Autowire : 其属性要通过何种方法进行属性的自动装配。

    对于上述的各个属性,id和class是必要的,其他的则可以省略。例如如果设置了autowire的值,则表明需要自动装配,否则是手动装配。

   

2)通过Setter方法手动设置bean里的属性

    Bean里的属性通过<property>标签来标识。有以下几种情况:

    ● 简单类型属性

        <bean id = “mybean”

            <property name = “name”>

                <value>springTest</value>

            </property>

        </bean>

  ● 引用其他bean

        <bean id = “mybean”

        <bean id = “mybean1”

            <property name = “name”>

                <ref bean = “mybean” />

            </property>

        </bean>

也可以将<ref>改为

    <bean

这样叫做内部bean,缺点是无法在其他地方重用这个bean的实例。

2.用了几天的时间终于完成了jdbcTemplate

结构:

配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

       <property name="driverClassName" value="com.mysql.jdbc.Driver" />

       <property name="url" value="jdbc:mysql://localhost:3306/zyy" />

       <property name="username" value="root" />

       <property name="password" value="8520963." />

   </bean>

   <bean id="jdbcTemplate"  class="org.springframework.jdbc.core.JdbcTemplate">

       <property name="dataSource">

           <ref bean="dataSource"/>

       </property>

   </bean>

   <bean id="Dao" class="com.vae.daoimpl.DaoImpl">

       <property name="jdbcTemplate">

           <ref bean="jdbcTemplate" />

       </property>

   </bean>

</beans>

Person类:

package com.vae.domain;

public class Person {

    private int id;

    private String username;

    private int age;

    private String password;

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

    public Person(int id, String username, int age, String password) {

        super();

        this.id = id;

        this.username = username;

        this.age = age;

        this.password = password;

    }

    public Person(String username, int age, String password) {

        super();

        this.username = username;

        this.age = age;

        this.password = password;

    }

    public Person() {

        super();

        // TODO Auto-generated constructor stub

    }

    @Override

    public String toString() {

        return "Person [id=" + id + ", username=" + username + ", age=" + age

                + ", password=" + password + "]";

    }

    

    

}

DAO:

package com.vae.DAO;

import java.util.List;

import com.vae.domain.Person;

public interface Dao {

void addPerson(Person person);

   void updatePerson(Person person);

   void deletePerson(int id);

   String searchUsername(int id );

   Person searchPerson(int id);

   List<Person> findAllPerson();

}

DAO的实现类:

package com.vae.daoimpl;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.RowCallbackHandler;

import org.springframework.jdbc.core.RowMapper;

import com.vae.DAO.Dao;

import com.vae.domain.Person;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

public class DaoImpl implements Dao {

private JdbcTemplate jdbcTemplate ;

   public void setJdbcTemplate(JdbcTemplate jdbcTemplate1 )

{

this.jdbcTemplate =jdbcTemplate1 ;

   }

public void addPerson(Person person)

{

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

       this.jdbcTemplate.update(sql,person.getId(),person.getUsername(),person.getPassword(),person.getAge() );

    }

    public void updatePerson(Person person){

    String sql="update user set username=?,password=?,age=? where id=?";

        this.jdbcTemplate.update(sql,person.getId(), person.getUsername(), person.getPassword(),person.getAge());

   }

public void deletePerson(int id)

{

String sql="delete from user where id=?";

       this.jdbcTemplate.update(sql,id);

   }

// 简单查询,按照ID查询,返回字符串

   public String searchUsername(int id)

{

String sql="select username from user where id=?";

       // 返回类型为String(String.class)

       return this.jdbcTemplate.queryForObject(sql,String.class,id);

   }

public Person searchPerson(int id)

{

String sql="select * from user";

       return this.jdbcTemplate.queryForObject(sql, new UserRowMapper(), id);

   }

// 复杂查询返回List集合

   public List<Person> findAllPerson() {

String sql = "select * from user";

       final List<Person> listAllUser = new ArrayList<Person>();

       jdbcTemplate.query(sql, new RowCallbackHandler() {

public void processRow(ResultSet resultSet) throws SQLException {

Person u=new Person();

               u.setUsername(resultSet.getString("username"));

               u.setPassword(resultSet.getString("password")) ;

               u.setAge(resultSet.getInt("age"));

               u.setId(resultSet.getInt("id"));

               listAllUser.add(u);

           }

});

       return listAllUser ;

       //return this.jdbcTemplate.query(sql, new UserRowMapper());

   }

}

class UserRowMapper implements RowMapper<Person>

{

//rs为返回结果集,以每行为单位封装着

   public Person mapRow(ResultSet rs, int rowNum) throws SQLException

{

  Person stu = new Person();

       stu.setId(rs.getInt("id"));

       stu.setUsername(rs.getString("username"));

       stu.setPassword(rs.getString("password")) ;

       stu.setAge(rs.getInt("age"));

       return stu;

   }

}

测试类:

package com.vae.test;

import com.vae.DAO.Dao;

import com.vae.domain.Person;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

public class Test021 {

@Test

  public void add()

{

Person stu=new Person();

      stu.setId(1);

      stu.setUsername("张三");

      stu.setAge(33);

      stu.setPassword("45645312");

  ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

      Dao dao=(Dao) applicationContext.getBean("Dao");

      dao.addPerson(stu);

  }

@Test

  public void add2()

{

Person stu=new Person();

      stu.setUsername("六六");

      stu.setAge(23);

      stu.setPassword("528131251");

      ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

      Dao dao=(Dao) applicationContext.getBean("Dao");

      dao.addPerson(stu);

  }

@Test

  public void update()

{

Person stu=new Person();

      stu.setId(1);

      stu.setUsername("五五");

      stu.setAge(32);

      stu.setPassword("121652316");

      ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

      Dao dao=(Dao) applicationContext.getBean("Dao");

      dao.updatePerson(stu) ;

  }

@Test//删

  public void delete(){

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

      Dao dao=(Dao) applicationContext.getBean("Dao");

      dao.deletePerson(11);

  }

@Test//查(复杂查询,返回对象集合)

  public void search2(){

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

      Dao dao=(Dao) applicationContext.getBean("Dao");

      List<Person> list=dao.findAllPerson();

      System.out.println(list);

}

}

78xcvn运行结果如下:

明天计划的事情:

20.编写单元测试的代码,注意,你也可以尝试一下,先写单元测试的代码,再写接口,再写实现类。

21.查看日志,并转成Debug模式,练习调试,学会查看单步执行时的变量值。


遇到的问题:(很多琐碎的问题,自己百度解决,忘记截图) 
收获:(认识并学习了jdbctemplate)



最后,麻烦师兄批阅了...


返回列表 返回列表
评论

    分享到