mybatis(二)接口编程 、动态sql 、批量删除 、动态更新、连表查询
原理等不在赘述,这里主要通过代码展现。
在mybatis(一)基础上,新建一个dao包,并在里面编写接口,然后再在xml文件中引入接口路径,其他不变,在运用阶段将比原始方法更节约时间,因为不用再去手动的
引用sql,我们只需调用dao层的方法,然后让dao层的方法去找配置文件,去找sql,sql查询数据并赋值给对象,或者设置对象参数值在经过sql更新到数据库,小伙伴们这就是
orm对象关系映射模型!(个人见解,不对之处请指正。)
新增后项目:

一、新建一个com.ckx.dao包,并new一个(interface)DeptDao.java。
DeptDao.java:
package com.ckx.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ckx.entity.Dept;
public interface DeptDao {
//通过ID查数据
public Dept selectDeptById(int deptno);
//查询一个结果集
public List<Dept> selectDeptAll();
//多条件动态 ,查询注意@Param的重要性,没有回报参数not find错误
public List<Dept> selectDeptByMore(@Param("deptno") int deptno,@Param("dname") String dname);
//根据ID动态修改
public int updateDeptById(Dept d);
//批量删除
public int deleteDepts(List<Integer> list);
//新增
public int insertDept(Dept d);
public int insertDept2(Dept d);
//多表关联
public Dept selectDeptEmps(int t);
}
二、配置Dept.xml:
<?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.ckx.dao.DeptDao"> <resultMap type="Dept" id="DeptList">
<result column="deptno" property="deptno"/>
<result column="dname" property="dname"/>
<result column="loc" property="loc"/>
<!-- 代表集合数据 property:实体bean中的属性名称 ofType:数据类型 -->
<collection property="emps" ofType="Emp">
<result column="EMPNO" property="empno" />
<result column="ENAME" property="ename" />
<result column="JOB" property="job" />
<result column="MGR" property="mgr" />
<result column="HIREDATE" property="hiredate" />
<result column="SAL" property="sal" />
<result column="COMM" property="comm" />
<result column="DEPNO" property="depno" />
</collection>
</resultMap>
<!-- 通过ID查询-->
<select id="selectDeptById" parameterType="int" resultType="Dept">
select * from dept where deptno = #{deptno}
</select>
<!-- 查询整张表,注意返回参数是一个DeptList集合,这个需要在上面配置-->
<select id="selectDeptAll" resultMap="DeptList">
select * from dept
</select>
<!-- 多参数动态查询-->
<select id="selectDeptByMore" resultMap="DeptList">
select * from dept
<where>
<if test="deptno != 0">
deptno = #{deptno}
</if>
<if test="dname != null">
or dname like #{dname}
</if>
</where>
</select>
<!-- 动态更新数据-->
<update id="updateDeptById" parameterType="Dept">
update
dept
<set>
<if test="deptno != null">
dname = #{dname},
</if>
<if test="deptno != null">
loc = #{loc}
</if>
</set>
where
deptno = #{deptno}
</update>
<!-- 批量删除-->
<delete id="deleteDepts" parameterType="list">
delete from dept where deptno in
<foreach item="item" index="index" collection="list" open="("
separator=", " close=") ">
#{item}
</foreach>
</delete>
<!-- 新增数据-->
<insert id="insertDept" parameterType="Dept" >
insert into dept (deptno,dname,loc) values (#{deptno},#{dname},#{loc})
</insert>
<!-- 连表查询,注意1、到层返回值为对象类本身 2、查询返回值为list集合。-->
<select id="selectDeptEmps" parameterType="int" resultMap="DeptList">
SELECT d.DNAME,e.* FROM dept d,emp e WHERE d.DEPTNO=e.DEPNO and d.DEPTNO = #{deptno}
</select> <!-- 未完成-->
<sql id='dept'>TEST_USER</sql>
<!-- 注意这里需要先查询自增主键值 -->
<insert id="insertDept2" parameterType="Dept">
<selectKey keyProperty="deptno" resultType="int" order="BEFORE">
SELECT LAST_INSERT_deptno()
</selectKey>
insert into <include refid="dept" /> (deptno,dname,loc)
values ( #{deptno},#{dname},#{loc} )
</insert> </mapper>
三、测试
DeptTest.java:
package com.ckx.test; import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator; import javax.mail.Session; 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 com.ckx.dao.DeptDao;
import com.ckx.entity.Dept;
import com.ckx.entity.Emp; public class DeptTest {
static SqlSessionFactory sessionFactory;
static Reader reader;
static SqlSession sqlSession; static {
try {
reader = Resources.getResourceAsReader("config.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
sqlSession = sessionFactory.openSession();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void select(){
DeptDao dao = sqlSession.getMapper(DeptDao.class);
Dept d = dao.selectDeptById(10);
System.out.println(d.getDname());
} public void selectDeptAll(){
DeptDao dao = sqlSession.getMapper(DeptDao.class);
List<Dept> list = dao.selectDeptAll(); for (Dept dept : list) {
String s = dept.getDname();
System.out.println(s);
} Iterator<Dept> ite = list.iterator();
while (ite.hasNext()) {
Dept d = ite.next();
String ss = d.getLoc();
System.out.println(ss);
} for (int i = 0; i < list.size(); i++) {
Dept d = list.get(i);
int t = d.getDeptno();
System.out.println(t);
}
} public void selectDeptByMore(){
DeptDao dao = sqlSession.getMapper(DeptDao.class);
List<Dept> list = dao.selectDeptByMore(20,"A%");
Iterator<Dept> it = list.iterator();
while (it.hasNext()) {
Dept dept = (Dept) it.next();
String s = dept.getDname();
System.out.println(s);
}
} public void updateDeptById(){
DeptDao dao = sqlSession.getMapper(DeptDao.class);
Dept d = new Dept();
d.setDeptno(10);
d.setDname("ASC");
d.setLoc("desc");
dao.updateDeptById(d);
System.out.println(d.getDeptno()+d.getDname()+d.getLoc());
sqlSession.commit();
} public void deleteDepts(){
DeptDao dao = sqlSession.getMapper(DeptDao.class);
List<Integer> list = new ArrayList<Integer>();
list.add(0);
dao.deleteDepts(list);
} public void insertDept(){
DeptDao dao = sqlSession.getMapper(DeptDao.class);
Dept d = new Dept();
d.setDeptno(10);
d.setDname("assc");
d.setLoc("deff");
dao.insertDept(d);
sqlSession.commit();
}
//多表联查
public void selectDeptEmps(){
DeptDao dao = sqlSession.getMapper(DeptDao.class);
Dept d = dao.selectDeptEmps(10);
List<Emp> list = d.getEmps();
for (Emp emp : list) {
String s = emp.getEname();
System.out.println(d.getDname()+"\t"+s);
} }
;
//主键自增为完成
public void insertDept2(){
DeptDao dao = sqlSession.getMapper(DeptDao.class);
Dept d = new Dept();
d.setDname("sss");
d.setLoc("ddd");
dao.insertDept(d);
sqlSession.commit();
System.out.println(d.getDeptno());
} public static void main(String[] args) {
DeptTest dt = new DeptTest();
dt.selectDeptEmps();
}
}
以上皆为测试过运行正常的方法,每一个方法的调用只需能改dt后的方法即可。
具体注意说明:

mybatis(二)接口编程 、动态sql 、批量删除 、动态更新、连表查询的更多相关文章
- 利用sql批量删除表,存储过程
利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...
- SQL触发器批量删除数据库中的表
以下通过触发器批量删除数据库中的表,SQL2008已验证 DECLARE @Table NVARCHAR() DECLARE @Count Int = DECLARE tmpCur CURSOR FO ...
- hibernate批量删除和更新数据
转载自:http://blog.csdn.net/yuhua3272004/article/details/2909538 Hibernate3.0 採用新的基于ANTLR的HQL/SQL查询翻译器, ...
- SQLServer 命令批量删除数据库中指定表(游标循环删除)
DECLARE @tablename VARCHAR(30),@sql VARCHAR(500)DECLARE cur_delete_table CURSOR READ_ONLY FORWARD_ON ...
- Mybatis基于接口注解配置SQL映射器(二)
Mybatis之增强型注解 MyBatis提供了简单的Java注解,使得我们可以不配置XML格式的Mapper文件,也能方便的编写简单的数据库操作代码.但是注解对动态SQL的支持一直差强人意,即使My ...
- MyBatis进阶--接口代理方式实现Dao 和动态SQL
MyBatis接口代理方式实现Dao层 接口代理方式-实现规则 传统方式实现Dao层,我们既要写接口.还要写实现类.而MyBatis框架可以帮助我们省略写Dao层接口实现类的步骤.程序员只需要编写接口 ...
- MyBatis的动态SQL操作--删除
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUYAAAC/CAIAAAANX+LCAAAYvElEQVR4nO2dWWycV9nHDyC6UEGBGy
- MyBatis动态SQL第一篇之实现多条件查询(if、where、trim标签)
一.动态SQL概述 以前在使用JDBC操作数据时,如果查询条件特别多,将条件串联成SQL字符串是一件痛苦的事情.通常的解决方法是写很多的if-else条件语句对字符串进行拼接,并确保不能忘了空格或在字 ...
- Mybatis基于接口注解配置SQL映射器(一)
上文已经讲解了基于XML配置的SQL映射器,在XML配置的基础上MyBatis提供了简单的Java注解,使得我们可以不配置XML格式的Mapper文件,也能方便的编写简单的数据库操作代码. Mybat ...
- 如何用sql批量删除一个id段内的dedecms文章?
之前因为ytkah批量添加了dedecms文章,数量有些多,后面出现问题了,想要删除一部分织梦文章,后台一篇篇删,删到手软(相关内容:修改dedecms关键词到手软),于是就想到了sql数据库操作!那 ...
随机推荐
- [原创]cocos2d-x研习录-第二阶 概念类之布场层类(CCLayer)
上面说场景CCScene相当于一个大容器,那么布景层类CCLayer就是大容器里的若干个小容器.每个游戏场景CCScene会有很多层CCLayer,每一层CCLayer负责各自的任务.看一下CCLay ...
- JSBinding+SharpKit / 脚本加密(JSC或Bytecode,参考cocos2d-js)
现在已经可以编译JSC,目前只能在 Windows 下编译 JSC.这个功能是从 cocos2d-js 抄过来的,他应该也支持在Mac编译,但是我没有试过. 菜单:JSB | Compile all ...
- JAVA 对象引用,以及对象赋值
注:引自http://zwmf.iteye.com/blog/1738574 关键字: java对象 引用 Java对象及其引用 关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里, ...
- php实现等比例不失真缩放上传图片
有时上传图片时因为图片太大了,不仅占用空间,消耗流量,而且影响浏(图片的尺寸大小不一).下面分享一种等比例不失真缩放图片的方法,这样,不管上传的图片尺有多大,都会自动压缩到我们设置尺寸值的范围之内.经 ...
- Lucene/Solr搜索引擎开发笔记 - 第2章 Solr安装与部署(Tomcat篇)
一.安装环境 图1-1 Tomcat和Solr的版本 我本机目前使用的Java版本为JDK 1.8,因为Solr 4.9要求Java版本为1.7+,请注意. 二.Solr部署到Tomcat流程 图1- ...
- Sqlite: FOREIGN KEY constraint failed on remove的错误原因。
sqlite外键约束中.restrict约束:如果要删除父表,则子表需空. 如果没有定义约束.会报错,需设置一个约束.
- rh6安装oracle11g+ASM
安装步骤我这里略过,主要说下安装过程中遇到到问题或重要步骤: 1.UDEV绑定: for i in b c d e ;doecho "KERNEL==\"sd*\", B ...
- goldengate 参数之GETTRUNCATES | IGNORETRUNCATES --转载
GETTRUNCATES | IGNORETRUNCATESValid ForExtract and ReplicatDescriptionUse the GETTRUNCATESand IGNORE ...
- FreeBSD 10 中文环境
中文字体位置 FontPath "/usr/local/lib/X11/fonts/misc/:unscaled" FontPath "/us ...
- VGA逐行扫描控制器的Verilog建模
前言:因为VGA是一种模拟图像传输数据接口,所要将数字信号用DAC转换成模拟量.本文用的一款ADI公司高精度的视频IC,实则一款高带宽的视频DAC.因为VGA时序较为简单,并且网上的VGA驱动基本大同 ...