国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

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

2019-11-26 14:33:01
字體:
來源:轉載
供稿:網友

上一篇《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其他屬性的使用,感謝大家的閱讀。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 静乐县| 新乡市| 商河县| 南雄市| 岳阳县| 阜康市| 罗定市| 清涧县| 昌乐县| 武胜县| 宣恩县| 英德市| 胶南市| 论坛| 游戏| 汝城县| 锡林郭勒盟| 广丰县| 纳雍县| 沂南县| 盖州市| 日土县| 景宁| 青龙| 沁阳市| 长乐市| 揭东县| 宜良县| 汤原县| 金华市| 龙岩市| 涿鹿县| 嫩江县| 中超| 涿州市| 黄大仙区| 沛县| 衡山县| 德令哈市| 浠水县| 莱芜市|