First, based on the IOC case xml
1, create a project and import the maven jar package coordinates
2. Create entity
package com.wedu.spring04.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. Create a persistence layer interface and implementation class
Persistence Layer Interface
package com.wedu.spring04.dao;
import com.wedu.spring04.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);
}
Class interface persistence layer
package com.wedu.spring04.dao.impl;
import com.wedu.spring04.dao.IUserInfoDao;
import com.wedu.spring04.domain.UserInfo;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.util.List;
/**
* 用户持久层实现
*/
public class UserInfoDaoImpl implements IUserInfoDao {
private QueryRunner runner;
public void setRunner(QueryRunner runner) {
this.runner = 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, create a business layer interface and implementation class
Business Layer Interface
package com.wedu.spring04.service;
import com.wedu.spring04.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);
}
Business layer interface class
package com.wedu.spring04.service.impl;
import com.wedu.spring04.dao.IUserInfoDao;
import com.wedu.spring04.domain.UserInfo;
import com.wedu.spring04.service.IUserInfoService;
import java.util.List;
/**
* 用户的业务层实现
*/
public class UserInfoServiceImpl implements IUserInfoService {
private IUserInfoDao userInfoDao;
public void setUserInfoDao(IUserInfoDao userInfoDao) {
this.userInfoDao = 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, create and configure profiles
<?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">
<!--配置service-->
<bean id="userInfoService" class="com.wedu.spring04.service.impl.UserInfoServiceImpl">
<property name="userInfoDao" ref="userInfoDao"/>
</bean>
<!--配置dao-->
<bean id="userInfoDao" class="com.wedu.spring04.dao.impl.UserInfoDaoImpl">
<property name="runner" ref="runner"/>
</bean>
<!--配置QueryRunner-->
<bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
<constructor-arg name="ds" ref="dataSource"/>
</bean>
<!--配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=utf8"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
</bean>
</beans>
6, create a test class and preparation of test CRUD methods
package com.wedu.spring04.service;
import com.wedu.spring04.domain.UserInfo;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Date;
import java.util.List;
/**
* spring ioc实例:基于xml的用户业务层CRUD测试
*/
public class UserInfoServiceTest {
private IUserInfoService userInfoService;
@Before
public void init() {
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
userInfoService = ac.getBean("userInfoService", IUserInfoService.class);
}
/**
* 查询所有账户
*/
@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(30);
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);
}
}
Second, the annotation-based IOC Case
1, create a project and import the maven jar package coordinates
2. Create entity
package com.wedu.spring05.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. Create a persistence layer interface and implementation class
Persistence Layer Interface
package com.wedu.spring05.dao;
import com.wedu.spring05.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);
}
Class interface persistence layer
package com.wedu.spring05.dao.impl;
import com.wedu.spring05.dao.IUserInfoDao;
import com.wedu.spring05.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, create a business layer interface and implementation class
Business Layer Interface
package com.wedu.spring05.service;
import com.wedu.spring05.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);
}
Business layer interface class
package com.wedu.spring05.service.impl;
import com.wedu.spring05.dao.IUserInfoDao;
import com.wedu.spring05.domain.UserInfo;
import com.wedu.spring05.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, create and configure profiles
<?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">
<!--告知spring在创建容器时需要扫描的包-->
<context:component-scan base-package="com.wedu.spring05"/>
<!--配置QueryRunner-->
<bean id="runner" class="org.apache.commons.dbutils.QueryRunner">
<constructor-arg name="ds" ref="dataSource"/>
</bean>
<!--配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=utf8"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
</bean>
</beans>
6, create a test class and preparation of test CRUD methods
package com.wedu.spring05.service;
import com.wedu.spring05.domain.UserInfo;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Date;
import java.util.List;
/**
* spring ioc实例:基于注解的用户业务层CRUD测试
*/
public class UserInfoServiceTest {
private IUserInfoService userInfoService;
@Before
public void init() {
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
userInfoService = ac.getBean("userInfoService", IUserInfoService.class);
}
/**
* 查询所有账户
*/
@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(32);
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);
}
}