程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> javaweb實戰之商城項目開辟(二)

javaweb實戰之商城項目開辟(二)

編輯:關於JAVA

javaweb實戰之商城項目開辟(二)。本站提示廣大學習愛好者:(javaweb實戰之商城項目開辟(二))文章只能為提供參考,不一定能成為您想要的結果。以下是javaweb實戰之商城項目開辟(二)正文


上一篇《javaweb實戰之商城項目開辟(一)》曾經把實體類,分頁對象創立好了,這一篇應用mybatis創立DAO層.

別的mybatis的api文檔可以參考

一.mybatis的應用

1. 引入架包

這裡引入mybatis和mysql的架包到lib中


2. 編寫Config.xml設置裝備擺設數據庫情況

先貼代碼,然後逐一說明

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <properties resource="Config.properties"/>
  <typeAliases>
    <package name="com.model"/>
  </typeAliases>
  <environments default="development">

    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
    <!--第二個情況-->
    <environment id="publish">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED"/>
    </environment>
  </environments>
</configuration>

第一步是要引入xml文件格局,也就是dtd,這個要直接復制mybatis供給的模版

<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">

成績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設置裝備擺設指定途徑下的別號,我們可以設置裝備擺設單個體名
單個稱號<typeAlias type="com.model.User" alias="User"/>如許就把com.model.User修正為別號User,前面就不須要寫全體稱號了,只須要User便可取代
批量修正<package name="com.model"/>如許便可以把一個包的類全體修正,默許別號為實體類類名
成績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'.另外一種是${}調換,這類是與依照原格局直代替換,不會添加其他器械

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper>
  <select id="load" parameterType="int" resultType="User">
    SELECT * from user WHERE id=#{id}
  </select>
</mapper>

第一步照樣引入dtd頭文件,制訂xml文件規矩

select 標簽,解釋以後是一個select語句
id屬性,相當因而函數名,經由過程id援用
parameterType屬性,代表傳入參數類型,可以指定根本類型,也能夠是自界說類型,是自界說類型的話,會主動挪用其get辦法,獲得其屬性
resultType屬性,前往值類型,可以直接自界說類型,會主動挪用set辦法把查詢出來的參數設置出來
更多屬性在後續文章中應用到再說.
4.挪用mapper映照

挪用之前須要先在Config.xml中設置裝備擺設映照,留意這裡設置裝備擺設的xml是文件途徑哈

<mappers>
  <mapper resource="com/model/User.xml"/>
</mappers>

然後寫測試類

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;

/**
 * Created by nl101 on 2016/2/23.
 */
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();
    }
  }

  /**
   * 獲得session
   * @return
   */
  public static SqlSession getSession(){
    return factory.openSession();
  }

  /**
   * 封閉session
   * @param session
   */
  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 id="add" parameterType="User">
    INSERT INTO user VALUES 
    (null,#{username},#{password},#{nickname},#{type})
  </insert>

JAVA代碼

/**
   /**
   * 添加一個用戶
   * @param user 要添加的用戶
   * @return true勝利
   */
  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 id="delete" parameterType="int">
    DELETE FROM user WHERE id=#{id}
  </delete>

java代碼

/**
   *依據id刪除用戶
   * @param id 要刪除用戶的id
   * @return true勝利
   */
   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 id="update" parameterType="User" >
    UPDATE user SET username=#{username},password=#{password},nickname=#{nickname},type=#{type} where id=#{id}
  </update>

java代碼

/**
   *更新用戶
   * @param user 要更新的用戶
   * @return true勝利
   */
   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 id="login" parameterType="String" resultType="User">
    SELECT * FROM user WHERE username=#{username}
  </select>

java代碼

/**
   * 斷定一個用戶能否存在
   * @param username 用戶名
   * @param password 暗碼
   * @return 存在前往User 不存在前往null
   */
  public User login(String username, String password){
    User user = null;
    SqlSession session = SessionUtil.getSession();
    try {
      user = session.selectOne(SOAPBinding.Use.class.getName()+".login",username);
      //當暗碼纰謬的時刻置user為null
      if (!user.getPassword().equals(password)){
        user = null;
      }

    } finally {
      SessionUtil.closeSession(session);
    }
    return user;
  }

public Pager find(String name,String sort,String order)分頁處置

xml代碼:
這裡用到了靜態sql,關於靜態sql,就是where,if,chose等標簽的應用,可以參考官方文檔
別的在mybatis中,null的概念是不存在,舉個例子,你傳個user=null,然則在調換的時刻調換為”null”串.沒有這個值才為null

 <!--分頁代碼-->
  <select id="find" parameterType="Map" resultType="User">
    SELECT * from user
    <if test="name!=null">WHERE (username LIKE #{name} or nickname LIKE #{name})</if>
     ORDER BY ${sort} ${order}
      LIMIT #{pageStart},#{pageSize}
  </select>
  <!--分頁總記載數-->
  <select id="findcount" parameterType="Map" resultType="int">
    SELECT count(*) from user
    <if test="name!=null">WHERE (username LIKE #{name} or nickname LIKE #{name})</if>
  </select>

java代碼:整體照樣依照後面文章設計的分頁

/**
   * 依據指定前提分頁查詢
   * @param name 查詢前提,null代表無前提
   * @param sort 排序前提,null代表依照id排序
   * @param order 排序前提,null代表升序
   * @return
   */
  public Pager<User> find(String name,String sort,String order){
    int pageStart = SystemContext.getPageStart();//分頁肇端
    int pageSize = SystemContext.getPageSize();//分頁年夜小
    Pager<User> pagers = new Pager<>();
    Map<String,Object> 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<User> 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其他屬性的應用,感激年夜家的浏覽。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved