一.项目框架
首先放上项目结构图
这里简单描述下各模块关系:
- UserInfo:即对应数据库表user的实体类
- IUserInfoController: 控制层,负责页面跳转和前后台数据的传递
- IUserInfoDao: 持久层,负责数据库的增删改查
- IUserInfoSeivice: 业务层,Dao和Controller的中间角色
- IUserInfoServiceImpl: 实现IuserInfoService接口
- UserMapper.xml: 执行SQL(MyBatis)
- applicationContext.xml: 配置文件(数据库,Dao,事务等)
项目源码剖析:
1.UserInfo.java,实体类包括属性,构造方法,Get,Set和toString方法。
package com.maxing.bean;
public class UserInfo {
private int id;
private String username;
private String password;
public UserInfo() {
}
@Override
public String toString() {
return "UserInfo{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + 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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2.IUserInfoDao.java(沟通service和UserMapper.xml)
public interface IUserInfoDao {
List<UserInfo> findAll();
boolean addUser(UserInfo userInfo);
boolean deleteUserById(int id);
boolean updateUser(UserInfo userInfo);
UserInfo queryById(int id);
}
3. UserMapper.xml,SQL语句封装在MyBatis中,注意:
id中的值,必须和IUserDao接口中的方法名相同;
resultType:查询结果返回的类型,前面已经添加了命名空间,所以可以直接用UserInfo
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.maxing.dao.IUserInfoDao" >
<select id="findAll" resultType="com.maxing.bean.UserInfo">
select * from userinfo
</select>
<insert id="addUser" parameterType="UserInfo">
insert into userinfo(username, password) value (#{username}, #{password})
</insert>
<delete id="deleteUserById" parameterType="int">
delete from userinfo where id = #{id}
</delete>
<update id="updateUser" parameterType="UserInfo">
update userinfo set username = #{username},password = #{password} where id = #{id}
</update>
<select id="queryById" resultType="com.maxing.bean.UserInfo">
select * from userinfo where id = #{id}
</select>
</mapper>
4.IUserInfoServiceImpl.java:IUserInfoService的具体实现类
@Service("userInfoService")
public class IUserInfoServiceImpl implements IUserInfoService {
@Autowired
IUserInfoDao IUserInfoDao;
@Override
public List<UserInfo> findAll() {
return IUserInfoDao.findAll();
}
@Override
public boolean addUser(UserInfo userInfo) {
return IUserInfoDao.addUser(userInfo);
}
@Override
public boolean deleteUserById(int id) {
return IUserInfoDao.deleteUserById(id);
}
@Override
public boolean updateUser(UserInfo userInfo) {
return IUserInfoDao.updateUser(userInfo);
}
@Override
public UserInfo queryById(int id) {
return IUserInfoDao.queryById(id);
}
}
5.IUserInfoController.java:控制页面跳转和数据传递
@Controller
@RequestMapping("user")
public class IUserInfoController {
@Autowired
IUserInfoService userInfoService;
@RequestMapping("findAll.do")
public ModelAndView findAll() {
List<UserInfo> users = userInfoService.findAll();
ModelAndView mv = new ModelAndView();
mv.addObject("users", users);
mv.setViewName("allUser"); //页面
return mv; //执行跳转
}
@RequestMapping("toAddUser.do")
public String toAddUser() {
return "addUser";
}
@RequestMapping("save.do")
public String save(UserInfo userInfo) {
userInfoService.addUser(userInfo);
return "redirect:/user/findAll.do";
}
@RequestMapping("delete.do")
public String delete(@RequestParam int id) {
userInfoService.deleteUserById(id);
return "redirect:/user/findAll.do";
}
@RequestMapping("toUpdate.do")
public String upUpdate(Model model, @RequestParam int id) {
model.addAttribute("userInfo", userInfoService.queryById(id));
return "updateUser";
}
@RequestMapping("update.do")
public String update(UserInfo userInfo) {
userInfoService.updateUser(userInfo);
return "redirect:/user/findAll.do";
}
}
运行结果如下(Tomcat7.0):
附:在自己安装的maven目录下寻找conf/settings.xml,添加淘宝镜像和设置本地仓库
<localRepository>自己指定的目录</localRepository>
//添加淘宝镜像
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
</mirrors>