你的位置:首页 > ASP.net教程

[ASP.net教程]springmvc、mybatis整合笔记


这段时间上一个项目刚做完,下一个项目还没开始,趁这个时候来认真总结一下上个项目使用的ssm开发框架。由于,项目中关于使用ssm这部分的代码和配置是我们项目的整体架构师一个独立完成的,我们只负责业务部分的代码,调用他写好的后台,所以涉及到ssm具体使用的我都没参与,之前简单的做过s(struts)sh,对于ssm不是很熟悉,所以,这段时间从头到尾独立搭建一个ssm框架的web应用。

  首先,spring、springmvc、mybatis所需要的jar包准备好,导入到新建web项目的lib中,然后开始搭建java源代码(src)下的结构,我在这里用到的是类似ssh的结构mapper.java、mapper.

  接下来,写配置文件。

  web.复制代码

<?复制代码

-----------------------------------------------spring.复制代码

<?复制代码

  关于spring和mybatis整合的方法有很多种,上面

-------------------------------------------------------mvc-config.复制代码

<?复制代码

  在mvcconfig中,最重要的工作是控制转发,这个配置文件中做了最简单的转发操作,只能转发页面,如果想要通过ajax实现转发数据,那么需要重写ViewResolver来实现这个功能。

--------------------------------------------------------mybatis-config.复制代码

<?复制代码

  至此,配置文件部分完毕。

  下面是src源码

----------------------------------------------------------User.java------------------------------------------------------

复制代码
package com.liusk.entity;public class User {  private String userId;  private String username;  private String password;    public String getUserId() {    return userId;  }  public void setUserId(String userId) {    this.userId = userId;  }  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;  }}
复制代码

  mybatis的实体类和hibernate实体类的不同是mybatis的实体类不需要加载到spring的beanFactory中,而是通过操作数据库的mapper来持久化数据。

-----------------------------------------------------------UserMapper.java------------------------------------------

复制代码
package com.liusk.mapper;import java.util.List;import com.liusk.entity.User;public interface UserMapper {  public List<User> selectUser(User user);  public void insertUser(User user);  public List<User> selectUserByUserName(String username);}
复制代码

  UserMapper.java这个文件是在何时被加载到spring中的呢?我们知道它是在daoImpl中使用到的,而且是注解到daoImpl中的,所以它一定在之前已经被加载到beanFactory中了,我在第一次配置的时候也不是太清楚它是什么时候进入beanFactory因为它身上没有任何注解,所以,根据spring配置文件中spring和mybatis的整合,推测UserMapper.java就是在

<bean > <property name="basePackage" value="com.liusk.mapper"/></bean>

这个地方被加载的。这个下面有详细解答。

----------------------------------------------------------UserMapper.复制代码

<?复制代码

  该配置文件中namespace对应接口的路径,也就是mapper.java的路径,否则抛出异常。所以这里牵涉到一个问题:UserMapper.java到底是何时加载到beanFactory的?为什么会用这个问题呢,应为UserMapper.

------------------------------------------------------UserDAO--------------------------------------------

复制代码
package com.liusk.dao;import java.util.List;import com.liusk.entity.User;public interface UserDAO {    public List<User> selectUser(User user);    public void insertUser(User user);    public List<User> selectUserByUserName(String username);}
复制代码

这个UserDAO的存在就是在向我的第一个项目使用ssh致敬的,其实这个UserDAO他就是个接口,可以不存在,下面的UserService也是这个道理。

------------------------------------------------------UserDAOImpl----------------------------------------

复制代码
package com.liusk.daoImpl;import java.util.List;import org.safehaus.uuid.UUIDGenerator;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import com.liusk.dao.UserDAO;import com.liusk.entity.User;import com.liusk.mapper.UserMapper;@Repositorypublic class UserDAOImpl implements UserDAO {    @Autowired  private UserMapper userMapper;    private UUIDGenerator uuidGen = UUIDGenerator.getInstance();    @Override  public List<User> selectUser(User user) {    return userMapper.selectUser(user);  }  @Override  public void insertUser(User user) {    String userId = uuidGen.generateTimeBasedUUID().toString();    if(user.getUserId()==null||user.getUserId()=="")      user.setUserId(userId.replace("-", ""));    System.out.println(user.getUserId());    userMapper.insertUser(user);   }  @Override  public List<User> selectUserByUserName(String username) {    return userMapper.selectUserByUserName(username);      }  }
复制代码

UserDAOImpl和UserServiceImpl类似,都是实现类,做具体的数据持久化操作。

--------------------------------------------------------UserService-----------------------------------------

复制代码
package com.liusk.service;import java.util.List;import com.liusk.entity.User;public interface UserService {    public void insertUser(User user);    public List<User> selectUser(User user);    public boolean existUser(String username);  }
复制代码

--------------------------------------------------------UserServiceImpl--------------------------------------

复制代码
package com.liusk.serviceImpl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.liusk.dao.UserDAO;import com.liusk.entity.User;import com.liusk.service.UserService;@Servicepublic class UserServiceImpl implements UserService{  @Autowired  private UserDAO userDAO;    @Override  public void insertUser(User user) {    userDAO.insertUser(user);  }  @Override  public List<User> selectUser(User user) {    return userDAO.selectUser(user);  }  @Override  public boolean existUser(String username) {    List<User> userList = userDAO.selectUserByUserName(username);    if(userList.size()>0)      return true;    else      return false;  }}
复制代码

-------------------------------------------------------UserController-------------------------------------

复制代码
package com.liusk.controller;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import com.liusk.base.UserCounts;import com.liusk.entity.User;import com.liusk.service.UserService;@Controller@RequestMapping("user")public class UserController {    @Autowired  private UserService userService;    @SuppressWarnings("rawtypes")  @RequestMapping("login.do")  public ModelAndView login(String username,String password,HttpServletRequest request){    User user = new User();    user.setUsername(username);    user.setPassword(password);    List<User> userList = userService.selectUser(user);    if(userList.size()>0){      request.setAttribute("userList", userList);return new ModelAndView("index");    }else      return new ModelAndView("login");  }    @RequestMapping("regist.do")  public ModelAndView regist(String username,String password,HttpServletRequest request){    User user = new User();    user.setUsername(username);    user.setPassword(password);    boolean flag = true;    flag = userService.existUser(username);    if(!flag)      userService.insertUser(user);    return new ModelAndView("login");  }}
复制代码

  至此,src下的java源码完毕。

  下面是jsp页面部分。

-----------------------------------------------------login.jsp--------------------------------------------------

复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>  <%  String path = request.getContextPath();  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><base href=" <%=basePath%>"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登录页面</title></head><body><div>  <div>      <form action="user/login.do" method="post">      <label>用户名:</label>      <input type="text" name="username" />      <label>密码:</label>      <input type="password" name="password"/>      <button type="submit">登录</button>      <button type="reset" >重置</button>        </form>    </div>  </div></body></html>
复制代码

-----------------------------------------------------index.jsp--------------------------------------------------------

复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%><%@ page import="com.liusk.entity.User" %><%@ page import="java.util.List" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><%  List<User> userList = (List<User>)request.getAttribute("userList");%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><base href=" <%=basePath%>"/><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>index</title></head><body><div>  <p>欢迎<%=userList.get(0).getUsername() %>!</p></div><div align="center" >  <form action="user/regist.do" method="post">    <input type="text" name="username"/>    <input type="text" name="password"/>    <button type="submit">提交</button>    <button type="reset">重置</button>  </form></div></body></html>
复制代码

  jsp你懂得,这些页面就不做多解释。

  总结,会用框架不难,难的是写一个框架出来,有梦就要勇敢飞。

》》源码地址获取

springmvc + mybatis整合详细,及遇到的问题请参看以下资料:

参考资料:

http://www.springmvc,net/detail/6074493.html

http://my.spring.net/wangbiglei/blog/489583

http://my.springmvc.net/wangbiglei/blog/489604