发表于: 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)
最后,麻烦师兄批阅了...
评论