趙艷敏高級(jí)講師
從事設(shè)計(jì)行業(yè)多年,有著豐富的設(shè)計(jì)和動(dòng)畫(huà)制作經(jīng)驗(yàn)。曾參與中國(guó)電信天翼
手機(jī)網(wǎng)及天翼手機(jī)DIY等多個(gè)項(xiàng)目的設(shè)計(jì),動(dòng)畫(huà),及As開(kāi)發(fā)。項(xiàng)目經(jīng)驗(yàn)豐富。曾在卡酷動(dòng)畫(huà)衛(wèi)視下屬公司擔(dān)任高級(jí)動(dòng)畫(huà)師一職,參與多部動(dòng)畫(huà)片的制作
。對(duì)動(dòng)畫(huà)也有較高的造詣。
精通Flash、After Effects、Photoshop、Illustrator、ActionScript
2.0/3.0、Edius、CoolEdit、Axure RP、DIV CSS等相關(guān)技術(shù)。
講課有自己的風(fēng)格,思維活躍,條理清晰講課注重細(xì)節(jié),由簡(jiǎn)入繁。本著以
學(xué)生學(xué)會(huì)為目的,更注重理論與實(shí)踐相結(jié)合。
Java工程師就業(yè)前景
Java工程師就業(yè)前景
2015年,在美國(guó)、加拿大、澳大利亞、新加坡等發(fā)達(dá)國(guó)家和中等發(fā)達(dá)國(guó)家,
JAVA軟件工程師年薪均在4—15萬(wàn)美金,而在國(guó)內(nèi),JAVA軟件工程師也有極好的工作機(jī)會(huì)和很高的薪水。
在未來(lái)5年內(nèi),合格軟件人才的需求將遠(yuǎn)大于供給。JAVA軟件工程師是目前
國(guó)際高端計(jì)算機(jī)領(lǐng)域就業(yè)薪資非常高的一類(lèi)軟件工程師。
一般情況下的JAVA軟件工程師是分四個(gè)等級(jí),從軟件技術(shù)員到助理軟件工程
師,再到軟件工程師,**后成為高級(jí)軟件工程師。
根據(jù)IDC的統(tǒng)計(jì)數(shù)字,在所有軟件開(kāi)發(fā)類(lèi)人才的需求中,對(duì)JAVA工程師的需
求達(dá)到全部需求量的60%—70%。同時(shí),JAVA軟件工程師的工資待遇相對(duì)較高。
通常來(lái)說(shuō),具有3—5年開(kāi)發(fā)經(jīng)驗(yàn)的工程師,擁有年薪15萬(wàn)元是很正常的一個(gè)
薪酬水平。80%的學(xué)生畢業(yè)后年薪都超過(guò)了8萬(wàn)元。
根據(jù)專業(yè)數(shù)據(jù)分析,由于我國(guó)經(jīng)濟(jì)發(fā)展不均衡因素,JAVA軟件工程師工資待
遇在城市之間的差異也較大,一級(jí)城市(如北京、上海等),初級(jí)軟件工程師的待遇大概在4000-6000之間,中級(jí)軟件工程師的待遇在6000—8000之間,
而高級(jí)軟件工程師的待遇基本破萬(wàn)。
Java企
業(yè)級(jí)應(yīng)用
“就業(yè)班”
一階段 Java語(yǔ)言核心
第二階段 數(shù)據(jù)庫(kù)及Web前端技術(shù)
第三階段 Java Web開(kāi)發(fā)及服務(wù)端
框架
第四階段 綜合項(xiàng)目實(shí)踐
Java企業(yè)級(jí)應(yīng)用
“就業(yè)班”
一階段 Java語(yǔ)言核心
二階段 數(shù)據(jù)庫(kù)及Web前端技術(shù)
三階段 Java Web開(kāi)發(fā)及服務(wù)端框架
四階段 綜合項(xiàng)目實(shí)踐
Java互聯(lián)網(wǎng)開(kāi)發(fā)
“培優(yōu)班”
一階段 Java語(yǔ)言核心
二階段 Java Web服務(wù)端技術(shù)
三階段 Java Web框架及互聯(lián)網(wǎng)架構(gòu)
四階段 Java互聯(lián)網(wǎng)架構(gòu)
職場(chǎng)華麗轉(zhuǎn)身
“才高班”
大數(shù)據(jù) 互聯(lián)網(wǎng)大牛班
6大實(shí)訓(xùn)項(xiàng)目
“愛(ài)逛網(wǎng)”電商后端數(shù)據(jù)平臺(tái)
培訓(xùn)經(jīng)驗(yàn)=就業(yè)經(jīng)驗(yàn)
>Java互聯(lián)網(wǎng)開(kāi)發(fā)
“培優(yōu)班”
一階段 Java語(yǔ)言核心
第二階段 Java Web服務(wù)端技術(shù)
第三階段 Java Web框架及互聯(lián)網(wǎng)架構(gòu)
第四階段 Java互聯(lián)網(wǎng)架構(gòu)
職場(chǎng)華麗轉(zhuǎn)身
“才高班”
大數(shù)據(jù) 互聯(lián)網(wǎng)大牛班
6大實(shí)訓(xùn)項(xiàng)目
“愛(ài)逛網(wǎng)”電商后端數(shù)據(jù)平臺(tái)
培訓(xùn)經(jīng)驗(yàn)=就業(yè)經(jīng)驗(yàn)
淺談MyBatis 之 增刪改查(CRUD) (二)
>
mybatis
CRUD是指在做增加(Create)、讀取(Retrieve)(重新得到數(shù)據(jù))、更新(Update)和刪除(Delete)幾個(gè)單詞的首字母簡(jiǎn)寫(xiě)。主要被用在描述軟件系統(tǒng)中數(shù)據(jù)庫(kù)或者持久層的基本操作功能。
這兒主要講解mybatis的增刪改查,對(duì)入門(mén)沒(méi)有了解的,可以去參考上一篇文章。如有不對(duì)之處,請(qǐng)諒解,并提出,本人也是才自學(xué)的新手。
淺談MyBatis 之 入門(mén)(一)
數(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
"]";
}
}
首先寫(xiě)一個(gè)公共類(lèi)
公共類(lèi)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類(lèi)屬性 不一致 所以 要配置 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>
<!-- 增加 部門(mén) -->
<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{
// 添加部門(mén)
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>
<!-- 刪除部門(mén) 根據(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();
}
}
//刪除部門(mén) 根據(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)查詢部門(mén) -->
<select id="getDeptById" parameterType="int" resultMap="resultDept">
select *
from base_55demo.demo_mawei_dept t
where t.d_id = #{id}
</select>
<!-- 查詢所有的部門(mén) -->
<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層
//查詢 ** 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;
}
//查詢 所以 部門(mén)
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接口類(lèi)路徑,則在實(shí)現(xiàn)操作時(shí),可以簡(jiǎn)化。
<mapper namespace="com.wm.mybatis.dao.IDeptCURDMapperDao">
此處就可以寫(xiě)成 IDeptCURDMapperDao.class.getName()
session.insert(IDeptCURDMapperDao.class.getName() ".addDept", dept);
2、如果配置文件中返回的是多結(jié)果查詢,本應(yīng)該是List,但是這兒配置List里面放置的類(lèi)型為返回值類(lèi)型。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=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
顯示的結(jié)果如下:
這樣便于學(xué)習(xí)mybatis,可以看見(jiàn)過(guò)程及背后的SQL。
相關(guān)推薦:
蘇州JAVA培訓(xùn) 蘇州JAVA培訓(xùn)班 蘇州JAVA培訓(xùn)機(jī)構(gòu)
體驗(yàn)課預(yù)約試聽(tīng)
倒計(jì)時(shí)
12:00:00