Во-первых, новые инструкции аннотаций
1, @ Конфигурация
Роль: Указывает текущий класс конфигурации представляет собой класс действий и bean.xml то же самое.
Примечание: Если параметр класс конфигурации в качестве объекта AnnotationConfigApplicationContext создан, комментарий не может писать.
2, @ ComponentScan
Действие: указывает пружину, когда контейнер создается с помощью аннотаций пакета для сканирования;
Атрибут: значение определяет контейнер при создании пакета для сканирования (basePackages же значение атрибута). Эквивалентно конфигурации в XML: <контексте: компонент сканирования базового пакета = «com.wedu.spring» />
3, @ Bean
Действие: IOC контейнер для возвращаемого значения сохраняются в весенний период в качестве текущего метода целевого компонента.
Атрибуты: Название указывает боба идентификатор, значение по умолчанию имя текущего метода.
Примечание: Когда мы используем метод настройки аннотаций, если метод имеет параметры, объект Spring Framework выглядит боб не имеет доступный контейнер, чтобы пойти. Действие и найти заметки путь Autowired одно и то же
4, @ Импорт
Эффект: для введения другого класса конфигурации.
Атрибут: значение определяет класс байткодом других конфигураций (при использовании Import аннотацию, там прокомментированы на основе родительских классов конфигурации импорта, введены и конфигурации суб-класса).
5, @ PropertySource
Роль: используется для указания файла свойств.
Атрибут: имя и путь файла заданного значения (CLASSPATH: указывает путь к классам).
6, @ RunWith
Роль: Заменить JUnit комментарии основные альтернативные методы
7, @ ContextConfiguration
Роль: сообщить о создании бегуна пружины, пружины и IoC основан на XML или аннотацию, расположение и описание.
Свойства: местоположения, указывает местоположение файла конфигурации. Если путь класса, потребность: показать путь к классам; классы, класс определяет аннотации. Конфигурация Xml, когда он не используется, это свойство определяет положение о необходимости аннотаций.
Во-вторых, для достижения чистых нот CRUD Spring IoC
1, создать проект Maven и импорт координат пакета банку
2, чтобы создать UserInfo пакет класса домена объект
package com.wedu.spring06.domain;
import java.io.Serializable;
import java.util.Date;
/**
* 用户实体
*/
public class UserInfo implements Serializable {
private Integer id;
private String username;
private String password;
private Integer age;
private Date regtime;
private String siteaddress;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getRegtime() {
return regtime;
}
public void setRegtime(Date regtime) {
this.regtime = regtime;
}
public String getSiteaddress() {
return siteaddress;
}
public void setSiteaddress(String siteaddress) {
this.siteaddress = siteaddress;
}
@Override
public String toString() {
return "UserInfo{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
", regtime=" + regtime +
", siteaddress='" + siteaddress + '\'' +
'}';
}
}
3. Создание интерфейса сохранение уровня и класса реализации
Создание интерфейса дао пакет живучесть слоя
package com.wedu.spring06.dao;
import com.wedu.spring06.domain.UserInfo;
import java.util.List;
/**
* 用户持久层接口
*/
public interface IUserInfoDao {
/**
* 查询所有用户
* @return
*/
List<UserInfo> findAllUserInfo();
/**
* 根据id查询用户
* @param id
* @return
*/
UserInfo findUserInfoById(Integer id);
/**
* 增加用户
* @param userInfo
*/
void saveUserInfo(UserInfo userInfo);
/**
* 修改用户
* @param userInfo
*/
void updateUserInfo(UserInfo userInfo);
/**
* 根据id删除用户
* @param id
*/
void deleteUserInfo(Integer id);
}
Создание осущ пакет дао пакет и создать сохранение уровня класса реализации интерфейса
package com.wedu.spring06.dao.impl;
import com.wedu.spring06.dao.IUserInfoDao;
import com.wedu.spring06.domain.UserInfo;
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("userInfoDao")
public class UserInfoDaoImpl implements IUserInfoDao {
@Autowired
private QueryRunner runner;
@Override
public List<UserInfo> findAllUserInfo() {
try {
return runner.query("select * from userinfo", new BeanListHandler<UserInfo>(UserInfo.class));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public UserInfo findUserInfoById(Integer id) {
try {
return runner.query("select * from userinfo where id=?", new BeanHandler<UserInfo>(UserInfo.class), id);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void saveUserInfo(UserInfo userInfo) {
try {
runner.update("insert into userInfo(username,password,age,regtime,siteaddress)value(?,?,?,?,?)",
userInfo.getUsername(), userInfo.getPassword(), userInfo.getAge(), userInfo.getRegtime(), userInfo.getSiteaddress());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void updateUserInfo(UserInfo userInfo) {
try {
runner.update("update userInfo set username=?,password=?,age=?,regtime=?,siteaddress=? where id=?",userInfo.getUsername(),
userInfo.getPassword(),userInfo.getAge(),userInfo.getRegtime(),userInfo.getSiteaddress(), userInfo.getId());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void deleteUserInfo(Integer id) {
try {
runner.update("delete from userInfo where id=?", id);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
4, создать интерфейс бизнес-уровня и класса реализации
Создание пакета услуг интерфейса живучесть слоя
package com.wedu.spring06.service;
import com.wedu.spring06.domain.UserInfo;
import java.util.List;
/**
* 用户的业务层接口
*/
public interface IUserInfoService {
/**
* 查询所有用户
* @return
*/
List<UserInfo> findAllUserInfo();
/**
* 根据id查询用户
* @param id
* @return
*/
UserInfo findUserInfoById(Integer id);
/**
* 增加用户
* @param userInfo
*/
void saveUserInfo(UserInfo userInfo);
/**
* 修改用户
* @param userInfo
*/
void updateUserInfo(UserInfo userInfo);
/**
* 根据id删除用户
* @param id
*/
void deleteUserInfo(Integer id);
}
Осущ пакет, созданный в пакете услуг и создать постоянство уровня класса реализации интерфейса
package com.wedu.spring06.service.impl;
import com.wedu.spring06.dao.IUserInfoDao;
import com.wedu.spring06.domain.UserInfo;
import com.wedu.spring06.service.IUserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 用户的业务层实现
*/
@Service("userInfoService")
public class UserInfoServiceImpl implements IUserInfoService {
@Autowired
private IUserInfoDao userInfoDao;
@Override
public List<UserInfo> findAllUserInfo() {
return userInfoDao.findAllUserInfo();
}
@Override
public UserInfo findUserInfoById(Integer id) {
return userInfoDao.findUserInfoById(id);
}
@Override
public void saveUserInfo(UserInfo userInfo) {
userInfoDao.saveUserInfo(userInfo);
}
@Override
public void updateUserInfo(UserInfo userInfo) {
userInfoDao.updateUserInfo(userInfo);
}
@Override
public void deleteUserInfo(Integer id) {
userInfoDao.deleteUserInfo(id);
}
}
5, создать класс конфигурации
Создание конфигурации SpringConfiguration весна класса
package com.wedu.spring06.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
/**
* spring配置类
*/
//指定当前类是一个配置类
@Configuration
//指定spring在创建容器时要扫描的包
@ComponentScan("com.wedu.spring06")
//导入其他配置类
@Import(JdbcConfiguration.class)
//指定properties文件的位置
@PropertySource("classpath:jdbc.properties")
public class SpringConfiguration {
}
Создание класса подключения к базе данных конфигурации JdbcConfiguration пружины
package com.wedu.spring06.config;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
/**
* spring连接数据库的配置类
*/
public class JdbcConfiguration {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean(name="runner")//把当前方法的返回值作为bean对象存入spring的ioc容器中
@Scope("prototype")
public QueryRunner createQueryRunner(DataSource dataSource) {
return new QueryRunner(dataSource);
}
@Bean(name="dataSource")
public DataSource createDataSource() {
try {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(password);
return dataSource;
} catch (PropertyVetoException e) {
throw new RuntimeException(e);
}
}
}
6, добавьте jdbc.properties файл конфигурации базы данных
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
7, создать класс тестирования и методы написания теста для тестирования
package com.wedu.spring06.service;
import com.wedu.spring06.config.SpringConfiguration;
import com.wedu.spring06.domain.UserInfo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.Date;
import java.util.List;
/**
* spring ioc实例:纯注解的用户业务层CRUD测试
*/
//使用spring的Runwith将Junit的注解main方法的替换
@RunWith(SpringJUnit4ClassRunner.class)
//告知spring运行器,spring ioc创建是基于xml还是注解,并说明位置
@ContextConfiguration(classes = SpringConfiguration.class)
public class UserInfoServiceTest {
@Autowired
private IUserInfoService userInfoService;
/**
* 查询所有账户
*/
@Test
public void findAllUserInfoTest() {
List<UserInfo> userInfoList = userInfoService.findAllUserInfo();
for (UserInfo userInfo : userInfoList) {
System.out.println(userInfo);
}
}
/**
* 添加账户
*/
@Test
public void saveUserInfoTest() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("test");
userInfo.setPassword("123456");
userInfo.setAge(29);
userInfo.setRegtime(new Date());
userInfo.setSiteaddress("https://blog.csdn.net/yu1755128147");
userInfoService.saveUserInfo(userInfo);
}
/**
* 根据id查询账户
*/
@Test
public void findUserInfoByIdTest() {
UserInfo userInfo = userInfoService.findUserInfoById(6);
System.out.println(userInfo);
}
/**
* 更新账户
*/
@Test
public void updateUserInfoTest() {
UserInfo userInfo = userInfoService.findUserInfoById(6);
userInfo.setUsername("测试");
userInfoService.updateUserInfo(userInfo);
}
/**
* 删除账户
*/
@Test
public void deleteUserInfoTest() {
userInfoService.deleteUserInfo(6);
}
}