SpringMVC+Mybatis整合的增删改查

本文基于 SPRING注解。本文使用Oracle数据库。

项目文件下载地址:http://download.csdn.net/detail/u010634066/8188965

项目总图:

SpringMVC+Mybatis整合的增删改查_第1张图片


现在lib中导入所有所需jar包:这里就不叙述了

一:在SRC下创建一个Bean包;在bean下面添加实体类,实体类对应于数据表,其属性与数据表相同或多于数据表。

package com.szz.bean;
 
import com.szz.base.bean.BaseObject;
 
 
  
/**
 * @author Administrator
 *
 */
public class User extends BaseObject {
         
    private String ID;
    /**
     * @return the iD
     */
    public String getID() {
        return ID;
    }
    /**
     * @param iD the iD to set
     */
    public void setID(String iD) {
        ID = iD;
    }
    /**
     * @return the nAME
     */
    public String getNAME() {
        return NAME;
    }
    /**
     * @param nAME the nAME to set
     */
    public void setNAME(String nAME) {
        NAME = nAME;
    }
    /**
     * @return the pASSWORD
     */
    public String getPASSWORD() {
        return PASSWORD;
    }
    /**
     * @param pASSWORD the pASSWORD to set
     */
    public void setPASSWORD(String pASSWORD) {
        PASSWORD = pASSWORD;
    }
    private String NAME;
    private String PASSWORD;
    /* (non-Javadoc)
     * @see com.szz.base.bean.BaseObject#toString()
     */
    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "User [ID=" + ID + ", NAME=" + NAME + ", PASSWORD=" + PASSWORD
                + "]";
 
 }
     
}

二、创建com.szz.dao包;里面用来定义需要对数据进行操作的实体类型DAO接口

package com.szz.dao;
 
import java.util.List;
 
import com.szz.bean.User;
 
/**
 * @author Administrator
 *
 */
public interface UserDao {
 
    /*
     * 查询
     */
    public List selectAll();
 
    public User findById(String id);
     
    public User findByUserName(String userName);
     
    public int countAll();
     
    /*
     * 更新删除插入
     */
    public int insert(User user);
     
    public int update(User user);
     
    public int delete(String userName);
     
/*  //返回插入数据的ID
    public int findInsertUserID(User user);*/
     
    /*//批处理   插入多条数据
    public void insertUsers(List users);*/
     
}

三、创建包com.szz.tables.xml(这样命名好像不好 定义com.szz.Mappers比较直观一点) 这个是用来写sql语句的xml文件 

  
  
  
 
 
    
     
    
     
    
     
    
     
     
    
    
        insert into SM_USER(ID,NAME,PASSWORD) VALUES(#{ID},#{NAME},#{PASSWORD})
    
     
     
    
        update SM_USER 
        
        
            NAME=#{NAME},
            PASSWORD=#{PASSWORD}
        
            where ID=#{ID}
    
     
    
        delete FROM SM_USER WHERE ID=#{ID}
    
 

命名空间定义为我们需要对应的DAO接口;这里每个方法的ID都跟DAO里面的方法一一对应;

还有说明一下

?
1
parameterType= "User"
如果你没有在mybatis配置文件里面定义别名 这样写就会报错 你要把全类名写清楚
?
1
2
3
        "com.szz.bean.User" alias= "User" >
   
四、spring的配置文件 spring-context.xml


 

 
     
     
       
    
     
     
 
    
      
     
    
     
       
 
    
  
     
    
        
                  
                
                 
                
                
                 
 
     
     
     
     
     
      
     
      

    
        
         
         
              
           
     
     
     
     
     
     
    
        
        
    
     
     
     
     
 
     
    
     
   
      
          
          
    
     
     
     

配置文件说明: 详情见http://www.blogjava.net/ldwblog/archive/2013/07/10/401418.html


在定义SqlSessionFactoryBean的时候,dataSource属性是必须指定的,它表示用于连接数据库的数据源。当然,我们也可以指定一些其他的属性,下面简单列举几个:

  • mapperLocations:它表示我们的Mapper文件存放的位置,当我们的Mapper文件跟对应的Mapper接口处于同一位置的时候可以不用指定该属性的值。

  • configLocation:用于指定Mybatis的配置文件位置。如果指定了该属性,那么会以该配置文件的内容作为配置信息构建对应的SqlSessionFactoryBuilder,但是后续属性指定的内容会覆盖该配置文件里面指定的对应内容。

  • typeAliasesPackage:它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等来进行分隔。

  • typeAliases:数组类型,用来指定别名的。指定了这个属性后,Mybatis会把这个类型的短名称作为这个类型的别名,前提是该类上没有标注@Alias注解,否则将使用该注解对应的值作为此种类型的别名。

    • plugins:数组类型,用来指定Mybatis的Interceptor。

    • typeHandlersPackage:用来指定TypeHandler所在的包,如果指定了该属性,SqlSessionFactoryBean会自动把该包下面的类注册为对应的TypeHandler。多个package之间可以用逗号或者分号等来进行分隔。

    • typeHandlers:数组类型,表示TypeHandler


    • 接下来就是在Spring的applicationContext文件中定义我们想要的Mapper对象对应的MapperFactoryBean了。通过MapperFactoryBean可以获取到我们想要的Mapper对象。MapperFactoryBean实现了Spring的FactoryBean接口,所以MapperFactoryBean是通过FactoryBean接口中定义的getObject方法来获取对应的Mapper对象的。在定义一个MapperFactoryBean的时候有两个属性需要我们注入,一个是Mybatis-Spring用来生成实现了SqlSession接口的SqlSessionTemplate对象的sqlSessionFactory;另一个就是我们所要返回的对应的Mapper接口了。

      定义好相应Mapper接口对应的MapperFactoryBean之后,我们就可以把我们对应的Mapper接口注入到由Spring管理的bean对象中了,比如Service bean对象。这样当我们需要使用到相应的Mapper接口时,MapperFactoryBean会从它的getObject方法中获取对应的Mapper接口,而getObject内部还是通过我们注入的属性调用SqlSession接口的getMapper(Mapper接口)方法来返回对应的Mapper接口的。这样就通过把SqlSessionFactory和相应的Mapper接口交给Spring管理实现了Mybatis跟Spring的整合。

      对应xml

     
         
         
   

MapperScannerConfigurer

利用上面的方法进行整合的时候,我们有一个Mapper就需要定义一个对应的MapperFactoryBean,当我们的Mapper比较少的时候,这样做也还可以,但是当我们的Mapper相当多时我们再这样定义一个个Mapper对应的MapperFactoryBean就显得速度比较慢了。为此Mybatis-Spring为我们提供了一个叫做MapperScannerConfigurer的类,通过这个类Mybatis-Spring会自动为我们注册Mapper对应的MapperFactoryBean对象。

如果我们需要使用MapperScannerConfigurer来帮我们自动扫描和注册Mapper接口的话我们需要在Spring的applicationContext配置文件中定义一个MapperScannerConfigurer对应的bean。对于MapperScannerConfigurer而言有一个属性是我们必须指定的,那就是basePackage。basePackage是用来指定Mapper接口文件所在的基包的,在这个基包或其所有子包下面的Mapper接口都将被搜索到。多个基包之间可以使用逗号或者分号进行分隔。最简单的MapperScannerConfigurer定义就是只指定一个basePackage属性,如:

Xml代码

bean>

这样MapperScannerConfigurer就会扫描指定基包下面的所有接口,并把它们注册为一个个MapperFactoryBean对象。

五、创建mybatis-config.xml


   

     
 
 


 
        
     
 
  
  
 
    
    

六、创建services接口

package com.szz.service;
 
import java.util.List;
 
import com.szz.bean.User;
 
public interface UserService {
 
    public List getUsers();
     
    /*
     * 濡傛灉ID涓虹┖灏辨壘username    濡傛灉username涓虹┖灏辨壘ID锛?閮藉~鎸夌収ID
     */
    public User getUserInfo(String ID,String userName);
     
    public int getCount();
     
     
//  public int saveUser(User user);
     
    public int insertUser(User user);
    public int updateUser(User user);
     
    public int deleteUser(String ID);
}

七‘services接口的实现类 serviceImpl

*/
package com.szz.service.impl;
 
import java.util.List;
 
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import com.szz.bean.User;
import com.szz.dao.UserDao;
import com.szz.service.UserService;
 
/**
 * @author Administrator
 *
 */
@Service("userService")
public class UserServiceImpl implements UserService {
 
    @Autowired
    private UserDao userDao;
    /*
    @Autowired
    private SqlSessionTemplate sessionTemplate;*/
     
 
    public UserDao getUserDao() {
        return userDao;
    }
 
    /**
     * @param userDao the userDao to set
     */
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
 
    @Override
    public List getUsers() {
        // TODO Auto-generated method stub
        return userDao.selectAll();
        //return sessionTemplate.getMapper(UserDao.class).selectAll();
    }
 
    @Override
    public User getUserInfo(String ID, String userName) {
        // TODO Auto-generated method stub
        if(ID!=null){
            return userDao.findById(ID);
        }
        else
            return userDao.findByUserName(userName);
    }
 
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return userDao.countAll();
    }
 
    @Override
    public int insertUser(User user) {
        // TODO Auto-generated method stub
            return userDao.insert(user);
    }
     
    @Override
    public int updateUser(User user) {
        // TODO Auto-generated method stub
            return userDao.update(user);
    }
 
    @Override
    public int deleteUser(String ID) {
        // TODO Auto-generated method stub
        return userDao.delete(ID);
    }
     
     
}

八、创建控制类controller包/**

package com.szz.action;
 
import java.util.ArrayList;
import java.util.List;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
 
 
import com.szz.base.acion.BaseAction;
import com.szz.bean.User;
import com.szz.service.UserService;
 
/**
 * @author Administrator
 *
 */
@Controller
@RequestMapping(value="/user")
public class UserAction extends BaseAction {
    @Autowired
    private UserService userService;
     
     
     
    @RequestMapping(value="/login",method=RequestMethod.POST)
        public String login(){ 
         
            return "redirect:/user/userList";
        }
      
    @RequestMapping(value="userList")
    public ModelAndView showAll(){
        System.out.println("index......");
        ModelAndView MV = new ModelAndView("user/index");
        List userList = new ArrayList();
        userList = userService.getUsers();
        MV.addObject("userList",userList);
        return MV;
    }
    @RequestMapping(value="/add")
    public ModelAndView login(HttpServletRequest request,@RequestParam(value="username", required=true, defaultValue="szz") String name){ 
        System.out.println("/user/login....");
        ModelAndView mv = new ModelAndView("user/success");  
        mv.addObject("add", "娣诲姞"); 
        return mv;  
    }
    @RequestMapping(value="/edituser")
    public ModelAndView edit(@RequestParam(value="ID") String ID){
        ModelAndView mv = new ModelAndView("user/edit");
        User user = userService.getUserInfo(ID, null);
        mv.addObject("user",user);
        return mv;
    }
     
    @RequestMapping(value="/deleteuser")
    public String deleteuser(@RequestParam(value="ID") String ID){
        userService.deleteUser(ID);
        return "redirect:/user/userList";
    }
    @RequestMapping(value="/userset",method=RequestMethod.POST)  
    public String user(@ModelAttribute("user")User user ) {
         System.out.println(user.getNAME());
         return "user/success";   
    }
     
    @RequestMapping(value="/insertuser",method=RequestMethod.POST)  
    public String insertUser( User userInfo ) throws Exception {  
        userService.insertUser(userInfo);
        return "redirect:/user/userList";
    }
     
    @RequestMapping(value="/updateuser",method=RequestMethod.POST)  
    public String updateUser( User userInfo ) throws Exception {  
        userService.updateUser(userInfo);
        return "redirect:/user/userList";
    }
     
}

九、web.xml



     
     
     
        Dispatcher
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            
                classpath*:spring-context.xml
            
        
        1
    
    
        Dispatcher
        /
    
     
    
        index.jsp
    

index.jsp
	
用户ID:
用户名称:
用户密码:

user/index.jsp

ID
账号
密码
id 账号 密码 功能
${user.ID} ${user.NAME} ${user.PASSWORD} 修改 删除

user/edit. jsp

账号
密码

访问:http://localhost:8080/SpringM vcMybatisFreeMarker/index.jsp

/**本文链接/http://www.2cto.com/kf/201411/354983.html

你可能感兴趣的:(springMVC框架)