位置: 首页 > 苏州JAVA > 昆山哪里学习java培训
昆山哪里学习java培训
预约试听
昆山哪里学习java培训
其然IT 教育师资

赵艳敏高级讲师

从事设计行业多年,有着丰富的设计和动画制作经验。曾参与中国电信天翼 手机网及天翼手机DIY等多个项目的设计,动画,及As开发。项目经验丰富。曾在卡酷动画卫视下属公司担任高级动画师一职,参与多部动画片的制作 。对动画也有较高的造诣。

精通Flash、After Effects、Photoshop、Illustrator、ActionScript 2.0/3.0、Edius、CoolEdit、Axure RP、DIV CSS等相关技术。

讲课有自己的风格,思维活跃,条理清晰讲课注重细节,由简入繁。本着以 学生学会为目的,更注重理论与实践相结合。

昆山哪里学习java培训

Java工程师就业前景

昆山哪里学习java培训

Java工程师就业前景

2015年,在美国、加拿大、澳大利亚、新加坡等发达国家和中等发达国家, JAVA软件工程师年薪均在4—15万美金,而在国内,JAVA软件工程师也有极好的工作机会和很高的薪水。

在未来5年内,合格软件人才的需求将远大于供给。JAVA软件工程师是目前 国际高端计算机领域就业薪资非常高的一类软件工程师。

一般情况下的JAVA软件工程师是分四个等级,从软件技术员到助理软件工程 师,再到软件工程师,**后成为高级软件工程师。

根据IDC的统计数字,在所有软件开发类人才的需求中,对JAVA工程师的需 求达到全部需求量的60%—70%。同时,JAVA软件工程师的工资待遇相对较高。

通常来说,具有3—5年开发经验的工程师,拥有年薪15万元是很正常的一个 薪酬水平。80%的学生毕业后年薪都超过了8万元。

根据专业数据分析,由于我国经济发展不均衡因素,JAVA软件工程师工资待 遇在城市之间的差异也较大,一级城市(如北京、上海等),初级软件工程师的待遇大概在4000-6000之间,中级软件工程师的待遇在6000—8000之间, 而高级软件工程师的待遇基本破万。

Java课程介绍


昆山哪里学习java培训


Java企 业级应用

“就业班”

一阶段 Java语言核心

第二阶段 数据库及Web前端技术

第三阶段 Java Web开发及服务端 框架

第四阶段 综合项目实践


Java课程介绍 

昆山哪里学习java培训

Java企业级应用

“就业班”

一阶段 Java语言核心

二阶段 数据库及Web前端技术

三阶段 Java Web开发及服务端框架

四阶段 综合项目实践

Java互联网开发

“培优班”

一阶段 Java语言核心

二阶段 Java Web服务端技术

三阶段 Java Web框架及互联网架构

四阶段 Java互联网架构

职场华丽转身

“才高班”

大数据 互联网大牛班

6大实训项目

“爱逛网”电商后端数据平台

培训经验=就业经验

>Java互联网开发


“培优班”

一阶段 Java语言核心

第二阶段 Java Web服务端技术

第三阶段 Java Web框架及互联网架构

第四阶段 Java互联网架构


职场华丽转身

“才高班”

大数据 互联网大牛班

6大实训项目

“爱逛网”电商后端数据平台

培训经验=就业经验


浅谈MyBatis 之 增删改查(CRUD) (二)


>

mybatis

CRUD是指在做增加(Create)、读取(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能。

这儿主要讲解mybatis的增删改查,对入门没有了解的,可以去参考上一篇文章。如有不对之处,请谅解,并提出,本人也是才自学的新手。 浅谈MyBatis 之 入门(一)


数据库表

表内容:


总配置文件

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 "]"; } }

首先写一个公共类

公共类sessionManagerUtil.java 是实现 获取sqlsession 用的,这样做的好处就是:便于管理当前线程与session的一个关系,还有就是 便于操作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 { // 同一个线程 下 session 操作 private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); private static SqlSessionFactory sessionFactory = null; // 静态加载块 加载配置文件 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; } /// 关闭session public static void closeSession(){ SqlSession sqlSession = threadLocal.get(); if (sqlSession != null) { sqlSession.close(); threadLocal.remove(); // 与当前线程 分离 } } }

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"> <!-- 由于数据库表字段 和 JavaBean Dept类属性 不一致 所以 要配置 resultMap 来实现一一对应--> <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(); //关闭session } } }

测试

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, "卫生部", "香港")); } }

结果


数据库表:



删除

映射配置

<!-- 删除 --> <delete id="deleteDept" parameterType="Dept"> delete from base_55demo.demo_mawei_dept t where t.d_id = #{id} and t.d_name = #{name} </delete> <!-- 删除部门 根据 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(); } } //删除部门 根据 ID来执行 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(); } }

测试

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

结果


数据库表: 结果表明:ID为8、9、12的数据都被删除。


修改

配置映射

<!-- 更新 --> <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(); } }

测试

// 更新 @Test public void updateDept() throws Exception{ DeptCURDMapperDaoImpl dao = new DeptCURDMapperDaoImpl(); Dept dept = dao.getDeptById(6); dept.setName("计费BOSS"); //修改数据 dao.updateDept(dept); }

结果


数据库表:


查询

配置映射

<!-- 根据ID 来查询部门 --> <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> <!-- 分页查询 --> <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> <!-- 查询 总记录数 --> <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; } //查询 所以 部门 public List<Dept> getDeptALL() { SqlSession session = SessionManagerUtil.getSession(); List<Dept> depts = session.selectList(IDeptCURDMapperDao.class.getName() ".getDeptALL"); SessionManagerUtil.closeSession(); return depts; } // 分页查询 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; }

测试

// 根据 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); } } // 分页查询 @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) " 页"); 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 " 条记录"); }

结果

此处 展示分页查询的结果,其他的查询比较简单。



总结


1、如果映射文件配置namespace 为dao接口类路径,则在实现操作时,可以简化。 <mapper namespace="com.wm.mybatis.dao.IDeptCURDMapperDao">

此处就可以写成 IDeptCURDMapperDao.class.getName()

session.insert(IDeptCURDMapperDao.class.getName() ".addDept", dept); 2、如果配置文件中返回的是多结果查询,本应该是List,但是这儿配置List里面放置的类型为返回值类型。resultMap=”resultDept” <!-- 分页查询 --> <select id="getDeptByPage" resultMap="resultDept" parameterType="map"> 3、如果配置映射参数是map时,获取值的名字要与map放入的名字一致。parameterType=”map” <!-- 分页查询 --> <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> // 分页查询 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、一个小技巧

在使用mybatis时,配置Log4j配置,可以打印 显示出(sessions连接ID、连接的开启、关闭、及执行的SQL、动态SQL参数等信息)

在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

显示的结果如下:


这样便于学习mybatis,可以看见过程及背后的SQL。


相关推荐:


苏州JAVA培训   苏州JAVA培训班   苏州JAVA培训机构

苏州其然软件开发培训

进入机构首页
苏州其然软件开发

上课地址:苏州市昆山市震川西路111号名仕大厦

预约试听

倒计时:
11 : 58 : 41
其他试听课程
机构全部课程

学校课程导航