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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

淺談MyBatis 之 增刪改查(CRUD) (二)

2019-11-09 19:59:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

mybatis

CRUD是指在做增加(Create)、讀取(Retrieve)(重新得到數(shù)據(jù))、更新(Update)和刪除(Delete)幾個(gè)單詞的首字母簡(jiǎn)寫。主要被用在描述軟件系統(tǒng)中數(shù)據(jù)庫(kù)或者持久層的基本操作功能。

這兒主要講解mybatis的增刪改查,對(duì)入門沒(méi)有了解的,可以去參考上一篇文章。如有不對(duì)之處,請(qǐng)諒解,并提出,本人也是才自學(xué)的新手。 淺談MyBatis 之 入門(一)


數(shù)據(jù)庫(kù)表

表內(nèi)容: 這里寫圖片描述


總配置文件

MyBatis-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="jdbc.properties" /> <!-- 配置 別名 --> <typeAliases> <typeAlias alias="Dept" type="com.wm.mybatis.POJO.Dept"/> </typeAliases> <environments default="development"> <environment id="development" > <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClass}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="passWord" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 配置的映射文件 --> <mappers> <mapper resource="mapper/deptCURD.xml" /> </mappers></configuration>

POJO

Dept.java

package com.wm.mybatis.POJO;public class Dept { private Integer id ; private String name ; private String address ; public Dept(){} public Dept(Integer id, String name, String address) { super(); this.id = id; this.name = name; this.address = address; } public Integer getId() { System.out.println(id); return id; } public void setId(Integer id) { this.id = id; } public String getName() { System.out.println(name); return name; } public void setName(String name) { this.name = name; } public String getAddress() { System.out.println(address); return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Dept [id=" + id + ", name=" + name + ", address=" + address + "]"; }}

首先寫一個(gè)公共類

公共類sessionManagerUtil.java 是實(shí)現(xiàn) 獲取sqlsession 用的,這樣做的好處就是:便于管理當(dāng)前線程與session的一個(gè)關(guān)系,還有就是 便于操作session。

package com.wm.mybatis.util;import java.io.IOException;import java.io.Reader;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class SessionManagerUtil { // 同一個(gè)線程 下 session 操作 private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); private static SqlSessionFactory sessionFactory = null; // 靜態(tài)加載塊 加載配置文件 static{ try { Reader config = Resources.getResourceAsReader("MyBatis-config.xml"); sessionFactory = new SqlSessionFactoryBuilder().build(config); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(); } } // 防止直接new private SessionManagerUtil(){} // 獲取session public static SqlSession getSession(){ SqlSession sqlSession = threadLocal.get(); if (sqlSession == null) { sqlSession = sessionFactory.openSession(); threadLocal.set(sqlSession); } return sqlSession; } /// 關(guān)閉session public static void closeSession(){ SqlSession sqlSession = threadLocal.get(); if (sqlSession != null) { sqlSession.close(); threadLocal.remove(); // 與當(dāng)前線程 分離 } }}

CRUD

增加

首先配置映射文件

<?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 namespace="com.wm.mybatis.dao.IDeptCURDMapperDao"> <!-- 由于數(shù)據(jù)庫(kù)表字段 和 JavaBean Dept類屬性 不一致 所以 要配置 resultMap 來(lái)實(shí)現(xiàn)一一對(duì)應(yīng)--> <resultMap type="Dept" id="resultDept"> <result property="id" column="d_id" /> <result property="name" column="d_name" /> <result property="address" column="d_address" /> </resultMap> <!-- 增加 部門 --> <insert id="addDept" parameterType="Dept" > insert into base_55demo.demo_mawei_dept(d_id,d_name,d_address) values(#{id},#{name},#{address}) </insert></mapper>

DAO層:

DeptCURDMapperDaoImpl

import java.util.HashMap;import java.util.List;import org.apache.ibatis.session.SqlSession;import com.wm.mybatis.POJO.Dept;import com.wm.mybatis.util.SessionManagerUtil;public class DeptCURDMapperDaoImpl{ // 添加部門 public void addDept(Dept dept) throws Exception { SqlSession session = null; try { session = SessionManagerUtil.getSession(); //獲取session int count = session.insert(IDeptCURDMapperDao.class.getName()+".addDept", dept); System.out.println("插入了記錄:" + count + " 條"); // 更新 要提交 session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); // 回滾 throw e; } finally{ SessionManagerUtil.closeSession(); //關(guān)閉session } }}

測(cè)試

TestDeptCURD

package com.wm.mybatis.Test;import java.util.List;import org.junit.Test;import com.wm.mybatis.POJO.Dept;import com.wm.mybatis.dao.DeptCURDMapperDaoImpl;public class TestDeptCURD { // 增加 @Test public void addDept() throws Exception{ DeptCURDMapperDaoImpl dao = new DeptCURDMapperDaoImpl(); dao.addDept(new Dept(35, "衛(wèi)生部", "香港")); }}

結(jié)果

這里寫圖片描述

數(shù)據(jù)庫(kù)表:

這里寫圖片描述


刪除

映射配置

<!-- 刪除 --> <delete id="deleteDept" parameterType="Dept"> delete from base_55demo.demo_mawei_dept t where t.d_id = #{id} and t.d_name = #{name} </delete> <!-- 刪除部門 根據(jù) ID --> <delete id="deleteDeptById" parameterType="int"> delete from base_55demo.demo_mawei_dept t where t.d_id = #{id} </delete>

DAO層

// 刪除 public void deleteDept(Dept dept) throws Exception { SqlSession session = null; try { session = SessionManagerUtil.getSession(); int count = session.delete(IDeptCURDMapperDao.class.getName()+".deleteDept", dept); System.out.println("刪除了記錄:"+count+" 條"); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); throw e; } finally{ SessionManagerUtil.closeSession(); } } //刪除部門 根據(jù) ID來(lái)執(zhí)行 public void deleteDeptById(int id) throws Exception { SqlSession session = null; try { session = SessionManagerUtil.getSession(); int count = session.delete(IDeptCURDMapperDao.class.getName()+".deleteDeptById", id); System.out.println("刪除了記錄:"+count+" 條"); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); throw e; } finally{ SessionManagerUtil.closeSession(); } }

測(cè)試

// 刪除 @Test public void deleteDept() throws Exception{ DeptCURDMapperDaoImpl dao = new DeptCURDMapperDaoImpl(); dao.deleteDept(new Dept(9, "9", "9")); } // 根據(jù)ID 刪除 @Test public void deleteDeptById() throws Exception{ DeptCURDMapperDaoImpl dao = new DeptCURDMapperDaoImpl(); dao.deleteDeptById(8); dao.deleteDeptById(12); }

結(jié)果

這里寫圖片描述

數(shù)據(jù)庫(kù)表: 這里寫圖片描述 結(jié)果表明:ID為8、9、12的數(shù)據(jù)都被刪除。


修改

配置映射

<!-- 更新 --> <update id="updateDept" parameterType="Dept"> update base_55demo.demo_mawei_dept t set t.d_name = #{name} , t.d_address = #{address} where t.d_id = #{id} </update>

DAO層

// 修改更新 public void updateDept(Dept dept) throws Exception { SqlSession session = null; try { session = SessionManagerUtil.getSession(); int count = session.update(IDeptCURDMapperDao.class.getName()+".updateDept", dept); System.out.println("更新了記錄:"+count+" 條"); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); throw e; } finally{ SessionManagerUtil.closeSession(); } }

測(cè)試

// 更新 @Test public void updateDept() throws Exception{ DeptCURDMapperDaoImpl dao = new DeptCURDMapperDaoImpl(); Dept dept = dao.getDeptById(6); dept.setName("計(jì)費(fèi)BOSS"); //修改數(shù)據(jù) dao.updateDept(dept); }

結(jié)果

這里寫圖片描述

數(shù)據(jù)庫(kù)表: 這里寫圖片描述


查詢

配置映射

<!-- 根據(jù)ID 來(lái)查詢部門 --> <select id="getDeptById" parameterType="int" resultMap="resultDept"> select * from base_55demo.demo_mawei_dept t where t.d_id = #{id} </select> <!-- 查詢所有的部門 --> <select id="getDeptALL" resultMap="resultDept"> select * from base_55demo.demo_mawei_dept t </select> <!-- 分頁(yè)查詢 --> <select id="getDeptByPage" resultMap="resultDept" parameterType="map"> <![CDATA[ select dept.d_id,dept.d_name, dept.d_address from (select rownum num, t.* from base_55demo.demo_mawei_dept t where rownum <= (#{start}+#{num})) dept where dept.num > #{start} ]]> </select> <!-- 查詢 總記錄數(shù) --> <select id="getTotalNum" resultType="int"> select count(0) from base_55demo.demo_mawei_dept </select>

DAO層

//查詢 通過(guò) ID public Dept getDeptById(int id) { SqlSession session = SessionManagerUtil.getSession(); Dept dept = session.selectOne(IDeptCURDMapperDao.class.getName()+".getDeptById", id); SessionManagerUtil.closeSession(); System.out.println(dept); return dept; } //查詢 所以 部門 public List<Dept> getDeptALL() { SqlSession session = SessionManagerUtil.getSession(); List<Dept> depts = session.selectList(IDeptCURDMapperDao.class.getName()+".getDeptALL"); SessionManagerUtil.closeSession(); return depts; } // 分頁(yè)查詢 public List<Dept> getDeptByPage(int start, int num){ SqlSession session = SessionManagerUtil.getSession(); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("start", start); map.put("num", num); List<Dept> depts = session.selectList(IDeptCURDMapperDao.class.getName()+".getDeptByPage", map); return depts; } // 查詢所有記錄 public int getTotalNum(){ SqlSession session = SessionManagerUtil.getSession(); int num = session.selectOne(IDeptCURDMapperDao.class.getName()+".getTotalNum"); SessionManagerUtil.closeSession(); return num; }

測(cè)試

// 根據(jù) ID 查詢 @Test public void getDeptById() throws Exception{ DeptCURDMapperDaoImpl dao = new DeptCURDMapperDaoImpl(); Dept dept = dao.getDeptById(19); System.out.println(dept); } // 查詢所有的 @Test public void getDeptALL() throws Exception{ DeptCURDMapperDaoImpl dao = new DeptCURDMapperDaoImpl(); List<Dept> depts = dao.getDeptALL(); for (Dept dept : depts) { System.out.println(dept); } } // 分頁(yè)查詢 @Test public void getDeptByPage() throws Exception{ DeptCURDMapperDaoImpl dao = new DeptCURDMapperDaoImpl(); int totalNum = dao.getTotalNum(); int pageNum = 4; int totalPage = (totalNum % pageNum == 0) ? (totalNum / pageNum) : (totalNum / pageNum) + 1 ; for (int i = 0; i < totalPage; i++) { System.out.println("第 "+(i+1)+" 頁(yè)"); List<Dept> depts = dao.getDeptByPage(i*pageNum,pageNum); for (Dept dept : depts) { System.out.println(dept); } } } // 查詢總記錄 @Test public void getTotalNum() throws Exception{ DeptCURDMapperDaoImpl dao = new DeptCURDMapperDaoImpl(); int num = dao.getTotalNum(); System.out.println("總共:"+num+" 條記錄"); }

結(jié)果

此處 展示分頁(yè)查詢的結(jié)果,其他的查詢比較簡(jiǎn)單。

這里寫圖片描述 這里寫圖片描述


總結(jié)


1、如果映射文件配置namespace 為dao接口類路徑,則在實(shí)現(xiàn)操作時(shí),可以簡(jiǎn)化。<mapper namespace="com.wm.mybatis.dao.IDeptCURDMapperDao">

此處就可以寫成 IDeptCURDMapperDao.class.getName()

session.insert(IDeptCURDMapperDao.class.getName()+".addDept", dept);2、如果配置文件中返回的是多結(jié)果查詢,本應(yīng)該是List,但是這兒配置List里面放置的類型為返回值類型。resultMap=”resultDept” <!-- 分頁(yè)查詢 --> <select id="getDeptByPage" resultMap="resultDept" parameterType="map">3、如果配置映射參數(shù)是map時(shí),獲取值的名字要與map放入的名字一致。parameterType=”map” <!-- 分頁(yè)查詢 --> <select id="getDeptByPage" resultMap="resultDept" parameterType="map"> <![CDATA[ select dept.d_id,dept.d_name, dept.d_address from (select rownum num, t.* from base_55demo.demo_mawei_dept t where rownum <= (#{start}+#{num})) dept where dept.num > #{start} ]]> </select> // 分頁(yè)查詢 public List<Dept> getDeptByPage(int start, int num){ SqlSession session = SessionManagerUtil.getSession(); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("start", start); map.put("num", num); List<Dept> depts = session.selectList(IDeptCURDMapperDao.class.getName()+".getDeptByPage", map); return depts; }

配置映射文件中和dao層的map放入值名稱要一致 map.put(“start”, start); map.put(“num”, num);


4、一個(gè)小技巧

在使用mybatis時(shí),配置Log4j配置,可以打印 顯示出(sessions連接ID、連接的開(kāi)啟、關(guān)閉、及執(zhí)行的SQL、動(dòng)態(tài)SQL參數(shù)等信息)

在log4j.properties文件中加入:

log4j.logger.com.ibatis=DEBUGlog4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUGlog4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUGlog4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUGlog4j.logger.java.sql.Connection=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUG

顯示的結(jié)果如下:

這里寫圖片描述

這樣便于學(xué)習(xí)mybatis,可以看見(jiàn)過(guò)程及背后的SQL。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 西充县| 高密市| 凤台县| 九龙坡区| 松溪县| 从化市| 信丰县| 西昌市| 岢岚县| 武冈市| 灯塔市| 定边县| 永登县| 德保县| 理塘县| 平武县| 岳西县| 教育| 甘孜| 镇安县| 永泰县| 正定县| 理塘县| 南开区| 鹿邑县| 石景山区| 衡南县| 普洱| 辛集市| 三江| 白山市| 磐安县| 迁安市| 嘉黎县| 汝州市| 文化| 丰镇市| 湛江市| 鄂温| 汶上县| 合作市|