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

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

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

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

上一篇《javaweb实战之商城项目开发(一)》已经把实体类,分页工具创建好了,这一篇利用mybatis创建DAO层.

另外mybatis的api文档可以参考

一.mybatis的使用

1. 引入架包

这里引入mybatis和mysql的架包到lib中


2. 编写Config.xml配置数据库环境

先贴代码,然后逐个解释




  
  
    
  
  

    
      
      
 
 
 
 
      
    
    
    
      
      
    
  


第一步是要引入xml文件格式,也就是dtd,这个要直接复制mybatis提供的模版



问题1
properties 功能是配置相应的properties文件,resource是指定相应的路线,properties文件里面我们可以配置数据库驱动,url,用户名,密码等,参考下面,这样的话mybatis就会自动读取下面的参数,你可以在xml中用${}来引用.

driver = com.mysql.jdbc.Driver 
url=jdbc:mysql://localhost:3306/shop 
username=root 
password=123456

问题2
typeAliases配置指定路径下的别名,我们可以配置单个别名
单个名称这样就把com.model.User修改为别名User,后面就不需要写全部名称了,只需要User即可代替
批量修改这样就可以把一个包的类全部修改,默认别名为实体类类名
问题3
environments是配置数据库环境的,可以配置多个环境,例如开发环境和发布环境,default是指默认环境
environment注意没有s,代表environments下的一个环境,通过id区分,因此id必须唯一
transactionManager代表连接数据库类型,JDBC连接java
dataSource配置数据源模式,pooled就是连接池模式,具体其他模式可以去官方文档看下,根据需要选择
property这个就是配置数据库连接了,name不用动,修改value=”driver",这里是用{}是读取最上方properties 这个文件里面的配置,这里注意匹配名称才能读取进来的哈
3.编写mapper映射sql语句

这里编写UserDao的load方法,也就是根据id读取一个用户,下面代码就是相当于public User load(int id)函数
对于mybatis有两种替换#{}替换会根据类型自动带上引号,例如string类型#{name}替换后为'name'.另一种是${}替换,这种是与按照原格式直接替换,不会添加其他东西



    
  
    SELECT * from user WHERe id=#{id}
  


第一步还是引入dtd头文件,制定xml文件规则

select 标签,说明当前是一个select语句
id属性,相当于是函数名,通过id引用
parameterType属性,代表传入参数类型,可以指定基本类型,也可以是自定义类型,是自定义类型的话,会自动调用其get方法,获取其属性
resultType属性,返回值类型,可以直接自定义类型,会自动调用set方法把查询出来的参数设置进去
更多属性在后续文章中使用到再说.
4.调用mapper映射

调用之前需要先在Config.xml中配置映射,注意这里配置的xml是文件路径哈


  


然后写测试类

public static void main(String[] args) {
    try {
      InputStream is = Resources.getResourceAsStream("Config.xml");//读取配置文件
      SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);//利用配置文件创建factory
      SqlSession session = factory.openSession();//获取session
      User user = session.selectOne(User.class.getName()+".load",1);//调用load函数
      System.out.println(user.getNickname());//输出昵称
      session.close();//关闭session
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

结果:

5.Sqlsession工具类

像上面那样写测试类太麻烦,就把Sqlsession封装下,方便DAO层的使用

package com.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;


public class SessionUtil {
  private static SqlSessionFactory factory= null;
  static {
    try {
      InputStream is = Resources.getResourceAsStream("Config.xml");//读取配置文件
      factory = new SqlSessionFactoryBuilder().build(is);//利用配置文件创建factory
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  
  public static SqlSession getSession(){
    return factory.openSession();
  }

  
  public static void closeSession(SqlSession session){
    if (session!=null) session.close(); session = null;
  }
}

以上就是mybatis的基本使用,下面开始封装DAO层

二.封装DAO

1.UserDao.java

public User load(int id)根据id获取一个User
上面已经写过了
public boolean add(User user) 增加一个用户
XML代码

 
  
    INSERT INTO user VALUES 
    (null,#{username},#{password},#{nickname},#{type})
  

JAVA代码


  public boolean add(User user){
    int isAdd = 0;
    SqlSession session = SessionUtil.getSession();
    try {
      isAdd = session.insert(User.class.getName()+".add",user);
      session.commit();//提交
    } catch (Exception e) {
      session.rollback();//提交失败则回滚

    }finally {
      SessionUtil.closeSession(session);
    }
    System.out.println(isAdd);
    return isAdd>0;
  }


public boolean delete(int id)删除一个用户

xml代码

 
  
    DELETE FROM user WHERe id=#{id}
  

java代码


   public boolean delete(int id){
    int isDelete = 0;
    SqlSession session = SessionUtil.getSession();
    try {
      isDelete = session.delete(User.class.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(User user)更新用户

xml代码


  
    UPDATE user SET username=#{username},password=#{password},nickname=#{nickname},type=#{type} where id=#{id}
  

java代码


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


public User login(String username, String password)判断用户是否存在

xml代码


  
    SELECT * from user
    WHERe (username LIKE #{name} or nickname LIKE #{name})
     ORDER BY ${sort} ${order}
      LIMIT #{pageStart},#{pageSize}
  
  
  

java代码:总体还是按照前面文章设计的分页


  public Pager find(String name,String sort,String order){
    int pageStart = SystemContext.getPageStart();//分页起始
    int pageSize = SystemContext.getPageSize();//分页大小
    Pager pagers = new Pager<>();
    Map maps = new HashMap<>();
    if (name!=null && !name.equals("")){
      name = "%"+name+"%";
      maps.put("name",name);
    }
    if (sort==null || sort.equals("")){
      sort = "id";//默认按照id排序
    }
    if (order==null || order.equals("")){
      order = "asc";//默认排序
    }
    maps.put("sort",sort);
    maps.put("order",order);
    maps.put("pageStart",pageStart);
    maps.put("pageSize",pageSize);
    SqlSession session = SessionUtil.getSession();
    List datas = null;
    try {
      datas = session.selectList(User.class.getName()+".find",maps);//获取记录
      pagers.setDatas(datas);
      pagers.setPageSize(pageSize);
      pagers.setPageStart(pageStart);
      int totalRecord = session.selectOne(User.class.getName()+".findcount",maps);//获取记录总数
      pagers.setTotalRecord(totalRecord);
      pagers.setPageIndex(pageStart/pageSize+1);

    } finally {
      SessionUtil.closeSession(session);
    }

    return pagers;
  }

目前项目结构

下一篇写一个通用的baseDao,以方便代码书写.并且继续学习mybatis其他属性的使用,感谢大家的阅读。

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

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

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