springMVC+struts2(传值,取值) +hibernate

来源:互联网 发布:cs1.5和1.6知乎 编辑:程序博客网 时间:2024/06/06 09:52
springMVC+struts2(传值,取值) +hibernate
=========================================================
hibernate 流程:
连接数据库:配置(hibernate-cxg.xml)

1.建pojo类(注解或配置)
   1) 注解:
   例如:
   @Entity
@Table(name="users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Basic
    private String username;
    @Basic
    private  String password;
    /.省略 : toString ,get set, 有参构造器,无参构造器./
}
   2)配置文件:逆向生成
   ==========hibernate分页=====================
   1)建立一个pager类
   2)实现分页public Pager pagerff(Pager p, Map<String, Object> pram) (p:分页数据,pram:分页条件)
   public Pager pagerff(Pager p, Map<String, Object> pram) {
           Session session = null;
           Transaction tx = null;
           try {
         session=HibernateUtils.getSessionFactory().openSession();
         tx=session.beginTransaction();
         String hql=p.getHql();//获取查询语句
         Query query= session.createQuery(hql).setCacheable(true);
         //设置参数
         query.setProperties(pram);
         //查询具体数据
         int count=query.list().size();
        p.setRowsTotal(count);
        int nowPage=1;
        if(p.getPage()>0){
     nowPage=p.getPage();
              }
              //指定从那个对象开始查询,参数的索引位置是从0开始的,
              query.setFirstResult((p.getPage()-1)*p.getRows());
              //分页时,一次最多产寻的对象数
              query.setMaxResults(p.getRows());
              List<?> list1=query.list();       
              p.setList(list1);
              tx.commit();
             
          } catch (Exception e) {
              e.printStackTrace();
              tx.rollback();
          }finally{
              session.close();
          }
          return  p;
      }
     ===========(1)hibernate:根据id查询==================
       public UserBean getUser(Class<?> cls, Serializable pk) {
 
           Session session = null;//获得session
           Transaction tx = null;//事务
           UserBean user=null;    //对象   
           try {
               session=HibernateUtils.getSessionFactory().openSession();
               tx=session.beginTransaction();//开启事务           
              user=(UserBean)session.get(cls, pk);//查询   这里的pk指的就是id    
              tx.commit();//提交事务
          } catch (Exception e) {
              e.printStackTrace();
              tx.rollback();//回滚事务
          }finally{
              session.close();//关闭session
         }       
         return user;
     }
   ===========(2)hibernate:HQL查询==================
   public List<?> findUser(String sql, Map<String, Object> pram) {        
        Session session = null;                                     
        Transaction tx = null;                                      
        List<?> list=null;                                          
        try {                                                       
            session=HibernateUtils.getSessionFactory().openSession();
            tx=session.beginTransaction();                          
            Query query= session.createQuery(sql).setCacheable(true);
     // ========获取查询参数,设置查询参数======
            String userName=pram.get("userName").toString();          
            String password=pram.get("password").toString();            
            query.setString("userName", '%'+userName+'%');              
            query.setString("password",password);
            list=query.list();                                          
            tx.commit();                                                                                                                     
        } catch (Exception e) {                                     
            e.printStackTrace();                                    
            tx.rollback();                                          
        }finally{                                                   
            session.close();                                        
        }                                                           
        return list;                                                
    }          
 ------------------------------------------------
               调用HQl查询 
      ---------方式一-----------
       
 @Override                                                                                           
     public List<?> findUser(Map<String,Object>pram) {                                               
  //模糊查询                                                                                      
  String hql="from UserBean where userName like :userName and password =:password";   
  return iusUserDao.findUser(hql, pram);                                                      
     }     
     ---------方式二-----------
     String hql="from UserBean as user where user.userName='kitty2'";
     Query query=session.createQuery(hql);
     List userList=query.list();
   ================(3)通过创建Criteria方式  =========================
                                                                                           
@Override                                                                               
    public List<?> findUser(Class<?> cls, String userName) {                            
        Session session = null;                                                         
        Transaction tx = null;                                                          
        List<?> list=null;                                                              
        try {                                                                           
            session=HibernateUtils.getSessionFactory().openSession();                   
            tx=session.beginTransaction();                                              
            //通过session的createCriteria()方法创建Criteria对象                                  
             Criteria criteria = session.createCriteria(cls);                           
             //设定查询条件                                                                   
             //(String propertyName, String value, MatchMode matchMode)                 
             /*      MatchMode.START:字符串在最前面的位置.相当于"like 'value%'"                      
                     MatchMode.END:字符串在最后面的位置.相当于"like '%value'"                        
                     MatchMode.ANYWHERE:字符串在中间匹配.相当于"like '%value%'"                    
                     MatchMode.EXACT:字符串精确匹配.相当于"like 'value'"           */             
             criteria.add(Restrictions.like("userName", userName, MatchMode.ANYWHERE)); 
             //调用Criteria类的list()方法执行查询                                                 
             list = criteria.list();                                                    
             tx.commit();                                                               
                                                                                        
         } catch (Exception e) {                                                        
             e.printStackTrace();                                                       
             tx.rollback();                                                             
         }finally{                                                                      
             session.close();                                                           
         }                                                                              
         return list;                                                                   
     }                                                                                  
                
==============SpringMVC传值取值 ========================
Spring取值:http://blog.csdn.net/pangliang_csdn/article/details/52486787
常用的:
 方法一:通过值传播:通过在controller方法中:定义和表单中相同的数据参数!
 方法二:通过对象传播:只需将对象的属性名和input的name值一一匹配即可
 方法三:public String login(HttpServletRequest request, 
                                    String name, 
            @RequestParam("pass")String password) // 表单属性是pass,用变量password接收
 。。。
 通过获取request ,response方法
 直接在参数中定义:public String test(Model model,User user,HttpServletRequest request,HttpServletResponse response,HttpSession session)
 spring存值的方式:
 方法一:直接在参数中定义:model :
  @RequestMapping("/login.do") 
    public String login(String name,String pass ,ModelMap model){ 
        User user  = userService.login(name,pwd); 
        model.addAttribute("user",user); 
        model.put("name",name); 
        return "success"; 
    }
 方法二:将值存入map中返回一个modelAndView
    @RequestMapping("/login.do") 
    public ModelAndView  login(String name,String pass){ 
        User user = userService.login(name,pwd); 
        Map<String,Object> data = new HashMap<String,Object>(); 
        data.put("user",user); 
        return new ModelAndView("success",data); 
    }
    方法三:利用注解如: 使用@ModelAttribute示例
    ,使用@ModelAttribute注解
在Controller方法的参数部分或Bean属性方法上使用
@ModelAttribute数据会利用HttpServletRequest的Attribute传值到success.jsp中
    @RequestMapping("/login.do") 
    public String login(@ModelAttribute("user") User user){ 
        //TODO 
       return "success"; 
    } 
     
    @ModelAttribute("name") 
    public String getName(){ 
        return name; 
    }
    方法四:利用request  session等


==============Struts2的传值和取值 =================
 struts2取值:http://blog.csdn.net/lsh6688/article/details/7863322
方法一:获取request ,session,response
如:
 (1) private static HttpServletRequest request;
   request = ServletActionContext.getRequest();
   (2)实现  ServletRequestAware,ServletResponseAware接口
   
方法二:通过属性驱动方式
   通过提供get 和set方法
 方法三:模型驱动方式,必须要实现ModelDriven<T>接口。对于要传入多个model第二种方式不方便  
 方法四:第三种方式可以完全不实现ModelDriven<T>,也可使用多个model对象的属性。
表单:
<form action="sys/login.action" method="post">    
    <input type="text" name="user.username">    
    <input type="text" name="teacher.level">    
    <input type="submit" value="submit">    
</form> 
 后台:(注意提供set方法)
public class sysAction extends ActionSupport{    
    private User user;    
    private Teacher teacher;    
   
    public String login() throws Exception {    
        System.out.println(user.getUsername());    
        System.out.println(teacher.getLevel());    
        return SUCCESS;    
    }    
   
    public void setUser(User user) {    
        this.user = user;    
    }    
    public void setTeacher(Teacher teacher) {    
        this.teacher = teacher;    
    }    
}    
struts2存值:
 方法一:利用actionContext方法
 通过ActionContext方法:
 public class LoginAction{
 public string execute(){
  SomeBean value=new SomeBean();
  value.setName("sfsfjsfje");
  ActionContext context=ActionContext.getContext();
  //往request里放attribute
  context.put("value",value);
  //往session里放
  context.getSession().put("value",value);
  return SUCCESS;
   }
 }
0 0