栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

javaweb实战之商城项目开发(三)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

javaweb实战之商城项目开发(三)

接着上一篇《javaweb实战之商城项目开发(二)》这一篇主要实现通用的baseDao.java和使用resultMap映射关联对象

一.通用的baseDao.java

既然要大家都能用,所以使用了泛型.其中要注意的问题就是类似User.getClass().getName()这样的代码是需要修改的.修改方法就是使用参数Class tc传递过来,然后在使用tc.getName()即可.

完整代码:

package com.dao;

import com.model.Pager;
import com.util.SessionUtil;
import com.util.SystemContext;
import org.apache.ibatis.session.SqlSession;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class baseDao {
  
  public T load(Class tc,int id){
    SqlSession session = SessionUtil.getSession();
    T t = null;
    try {
      t = session.selectOne(tc.getName()+".load",id);
    } finally {
      SessionUtil.closeSession(session);
    }
    return t;
  }
  
  public boolean add(T t){
    int isAdd = 0;
    SqlSession session = SessionUtil.getSession();
    try {
      isAdd = session.insert(t.getClass().getName()+".add",t);
      session.commit();//提交
    } catch (Exception e) {
      session.rollback();//提交失败则回滚

    }finally {
      SessionUtil.closeSession(session);
    }
    return isAdd>0;
  }
  
  public boolean delete(Class t,int id){
    int isDelete = 0;

    SqlSession session = SessionUtil.getSession();
    try {
      isDelete = session.delete(t.getName()+".delete",id);
      session.commit();
    } catch (Exception e) {
      session.rollback();//失败返回
      System.out.println("删除用户失败");
      e.printStackTrace();
    }finally {
      SessionUtil.closeSession(session);
    }
    return isDelete>0;
  }
  
  public boolean update(T t){
    int isUpdate = 0;
    SqlSession session = SessionUtil.getSession();
    try {
      isUpdate = session.delete(t.getClass().getName()+".update",t);
      session.commit();
    } catch (Exception e) {
      session.rollback();//失败返回
      System.out.println("更新用户失败");
      e.printStackTrace();
    }finally {
      SessionUtil.closeSession(session);
    }
    return isUpdate>0;
  }

  
  public Pager find(Class t,Map maps){
    int pageStart = SystemContext.getPageStart();//分页起始
    int pageSize = SystemContext.getPageSize();//分页大小
    Pager pagers = new Pager<>();
    maps.put("pageStart",pageStart);
    maps.put("pageSize",pageSize);
    SqlSession session = SessionUtil.getSession();
    List datas = null;
    try {
      datas = session.selectList(t.getName()+".find",maps);//获取记录
      pagers.setDatas(datas);
      pagers.setPageSize(pageSize);
      pagers.setPageStart(pageStart);
      int totalRecord = session.selectOne(t.getName()+".findcount",maps);//获取记录总数
      pagers.setTotalRecord(totalRecord);
      pagers.setPageIndex(pageStart/pageSize+1);

    } finally {
      SessionUtil.closeSession(session);
    }

    return pagers;
  }
  
  public Pager list(Class t,Map maps){
    Pager pagers = new Pager<>();
    SqlSession session = SessionUtil.getSession();
    List datas = null;
    try {
      datas = session.selectList(t.getName()+".list",maps);//获取记录
      pagers.setDatas(datas);
      pagers.setTotalRecord(datas.size());
    } finally {
      SessionUtil.closeSession(session);
    }

    return pagers;
  }
}

同样的UserDao.java也需要相应的修改

public class UserDao extends baseDao{

  
  public User load(int id){
    return super.load(User.class,id);
  }

}

二.resultMap的映射

简单来说当数据库中的字段信息和对象的属性不一致时需要通过resultMap来映射.
举个例子:Address属性中有一个User的实体类,如下

  public class Address {
  private int id;
  private String name;
  private String phone;
  private String postcode;
  //直接给user对象,来代替user_id
  private User user;
    `````````
}

那么我们想取出来一个Address的同时也取出其对应的user,然而这是两个对象,且两者都有id属性,所以对于mybatis在调用set方法设置属性时就会混乱而使用resultMap的目的就是消除这种混乱.

编写load的sql


  
  
    select *,t1.id AS 'a_id' from address t1 RIGHT JOIN user t2 ON (t1.user_id = t2.id) WHERe t1.id=#{id};
  
  
  
    insert into address values (null,#{name},#{phone},#{postcode},${user_id})
  
  
  
    DELETE FROM address WHERe id=#{id}
  
  
  
    UPDATE address SET name=#{name},phone=#{phone},postcode=#{postcode} where id=#{id}
  
  
  



java代码:

package com.dao;

import com.model.Address;
import com.model.Pager;

import java.util.HashMap;
import java.util.Map;


public class AddressDao extends baseDao {
  public static void main(String[] args) {
    AddressDao addressDao = new AddressDao();
    Pager pagers = addressDao.list(1);
    System.out.println(pagers.getDatas().size());
  }

  
  public Address load(int id){
    return super.load(Address.class,id);
  }

  
  public boolean add(Address address,int user_id){
    UserDao userDao = new UserDao();
    if (userDao.load(user_id)==null){
      return false;
    }
    return super.add(address);
  }

  
  public boolean delete(int id){
    return super.delete(Address.class,id);
  }

  
  public boolean update(Address address){
    return super.update(address);
  }

  
  public Pager list(int user_id){
    Map maps = new HashMap<>();
    maps.put("user_id",user_id);
    return super.list(Address.class,maps);
  }
}

ADO层按照这样写,就没问题了。

以上就是本文的全部内容,整个javaweb商城项目开发就为大家分享到这,希望对大家的学习有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/150502.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号