一、首先要在Maven工程中的pom.xml文件中导入依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itheima</groupId>
<artifactId>day02_eesy_SpringXmlAnnoDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
</project>
二、其次我们创建一个实体类Account:
package com.ysw.web.domain;
import java.io.Serializable;
public class Account implements Serializable {
private Integer id;
private String name;
private Float money;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Float getMoney() {
return money;
}
public void setMoney(Float money) {
this.money = money;
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("Account{");
sb.append("id=").append(id);
sb.append(", name='").append(name).append('\'');
sb.append(", money=").append(money);
sb.append('}');
return sb.toString();
}
}
三、创建好实体类之后,我们先写Service业务层的Interface接口代码:
package com.ysw.web.service;
import com.ysw.web.domain.Account;
import java.util.List;
/**
* 业务层接口
*/
public interface IAccountService {
/**
* 查询所有的方法
* @return
*/
List<Account> findAll();
/**
* 通过id查询一个
* @return
*/
Account findById(Integer id);
}
四、实现Service业务层的接口的代码:
package com.ysw.web.service.impl;
import com.ysw.web.dao.IAccountDao;
import com.ysw.web.domain.Account;
import com.ysw.web.service.IAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("accountService")
public class AccountServiceImpl implements IAccountService {
//自动注入存在于Spring-IoC容器中的对象
@Autowired
private IAccountDao accountDao;
//这里主要是想通过xml中的set方法进行依赖注入
// public void setAccountDao(IAccountDao accountDao) {
// this.accountDao = accountDao;
// }
public List<Account> findAll() {
return accountDao.findAll();
}
public Account findById(Integer id) {
return accountDao.findById(id);
}
}
五、继续写dao层的接口代码
package com.ysw.web.dao;
import com.ysw.web.domain.Account;
import java.util.List;
public interface IAccountDao {
/**
* 查询所有的方法
* @return
*/
List<Account> findAll();
/**
* 通过id查询一个
* @return
*/
Account findById(Integer id);
}
六、编写dao层实现Interface接口的代码:
package com.ysw.web.dao.impl;
import com.ysw.web.dao.IAccountDao;
import com.ysw.web.domain.Account;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository("accountDao")
public class AccountDaoImpl implements IAccountDao {
//自动注入在bean.xml中的runner对象
@Autowired
private QueryRunner runner;
// //这里也是想通过set的方式来进行依赖注入
// public void setRunner(QueryRunner runner) {
// this.runner = runner;
// }
/**
* 查询所有的方法
* @return
*/
public List<Account> findAll() {
try {
return runner.query("select * from account", new BeanListHandler<Account>(Account.class));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 通过id查询一个的方法
* @param id
* @return
*/
public Account findById(Integer id) {
try {
return runner.query("select * from account where id = ?",new BeanHandler<Account>(Account.class),id);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
七、开始编写我们的bean.xml进行依赖注入,这里如果我们使用了注解方式进行依赖注入的话,我们就需要导入相对应的头部索引文件,并且要对我们的全局包进行扫描操作:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--
注意,<construct-arg>标签一般用于带参数的构造方法,一定要带参数的构造方法才能用
一般全限定类名都是指定到我们的impl实现层,而不是接口
-->
<!--对全局的包进行扫描-->
<context:component-scan base-package="com.ysw"></context:component-scan>
<!--service层对象通过全限定类名进行反射创建唯一的id对象-->
<!--<bean id="accountService" class="com.ysw.web.service.impl.AccountServiceImpl">-->
<!--<property name="accountDao" ref="accountDao"></property>-->
<!--</bean>-->
<!--<bean id="accountDao" class="com.ysw.web.dao.impl.AccountDaoImpl">-->
<!--<property name="runner" ref="runner"></property>-->
<!--</bean>-->
<bean id="runner" class="org.apache.commons.dbutils.QueryRunner">
<constructor-arg name="ds" ref="dataSource"></constructor-arg>
</bean>
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!--注册驱动-->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<!--url路径-->
<property name="jdbcUrl" value="jdbc:mysql:///account"></property>
<!--用户名-->
<property name="user" value="root"></property>
<!--密码-->
<property name="password" value="123456"></property>
</bean>
</beans>
八、使用Junit来进行单元测试:
package com.ysw.web;
import com.ysw.web.domain.Account;
import com.ysw.web.service.IAccountService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class TestService {
@Test
public void findAll() {
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
IAccountService accountService = (IAccountService)ac.getBean("accountService");
List<Account> accounts = accountService.findAll();
for (Account account : accounts) {
System.out.println(account);
}
}
}
至此,运行即可完成。