原理等不在赘述,这里主要通过代码展现。

在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 、批量删除 、动态更新、连表查询的更多相关文章

  1. 利用sql批量删除表,存储过程

    利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...

  2. SQL触发器批量删除数据库中的表

    以下通过触发器批量删除数据库中的表,SQL2008已验证 DECLARE @Table NVARCHAR() DECLARE @Count Int = DECLARE tmpCur CURSOR FO ...

  3. hibernate批量删除和更新数据

    转载自:http://blog.csdn.net/yuhua3272004/article/details/2909538 Hibernate3.0 採用新的基于ANTLR的HQL/SQL查询翻译器, ...

  4. SQLServer 命令批量删除数据库中指定表(游标循环删除)

    DECLARE @tablename VARCHAR(30),@sql VARCHAR(500)DECLARE cur_delete_table CURSOR READ_ONLY FORWARD_ON ...

  5. Mybatis基于接口注解配置SQL映射器(二)

    Mybatis之增强型注解 MyBatis提供了简单的Java注解,使得我们可以不配置XML格式的Mapper文件,也能方便的编写简单的数据库操作代码.但是注解对动态SQL的支持一直差强人意,即使My ...

  6. MyBatis进阶--接口代理方式实现Dao 和动态SQL

    MyBatis接口代理方式实现Dao层 接口代理方式-实现规则 传统方式实现Dao层,我们既要写接口.还要写实现类.而MyBatis框架可以帮助我们省略写Dao层接口实现类的步骤.程序员只需要编写接口 ...

  7. MyBatis的动态SQL操作--删除

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUYAAAC/CAIAAAANX+LCAAAYvElEQVR4nO2dWWycV9nHDyC6UEGBGy

  8. MyBatis动态SQL第一篇之实现多条件查询(if、where、trim标签)

    一.动态SQL概述 以前在使用JDBC操作数据时,如果查询条件特别多,将条件串联成SQL字符串是一件痛苦的事情.通常的解决方法是写很多的if-else条件语句对字符串进行拼接,并确保不能忘了空格或在字 ...

  9. Mybatis基于接口注解配置SQL映射器(一)

    上文已经讲解了基于XML配置的SQL映射器,在XML配置的基础上MyBatis提供了简单的Java注解,使得我们可以不配置XML格式的Mapper文件,也能方便的编写简单的数据库操作代码. Mybat ...

  10. 如何用sql批量删除一个id段内的dedecms文章?

    之前因为ytkah批量添加了dedecms文章,数量有些多,后面出现问题了,想要删除一部分织梦文章,后台一篇篇删,删到手软(相关内容:修改dedecms关键词到手软),于是就想到了sql数据库操作!那 ...

随机推荐

  1. hmtl的标签属性

    html标签< <marquee>...</marquee>普通卷动 <marquee behavior=slide>...</marquee>滑 ...

  2. SNMP-配置文件详解

    当下的 SNMP 服务器通常用来被诸如 Nagios.Cacti.Zabbix 等监控软件收集数据,SNMP 的很多高级特性用的不是特别频繁.因而只需对 SNMP 进行一些简单.基础的配置以满足各种监 ...

  3. 从 Bootstrap 2.x 版本升级到 3.0 版本

    摘自http://v3.bootcss.com/migration/ Bootstrap 3 版本并不向后兼容 v2.x 版本.下面的章节是一份从 v2.x 版本升级到 v3.0 版本的通用指南.如需 ...

  4. Ubuntu 16.10 在 VMware 上无法安装的解决办法

    参考:http://askubuntu.com/questions/840822/ubuntu-16-10-doesnt-work-in-virtual-machine-vmware 1- Edit ...

  5. Android总结篇系列:Activity生命周期

    Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity生命周期进行一次总结. Activity是由Activit ...

  6. canvas draw a image

    var c = context.getContext("2d"); var cimg = new Image(); cimg.src = "img path"; ...

  7. ASP.NET中进行消息处理(MSMQ) 三(转)

    在本文的前两篇文章里对MSMQ的相关知识点进行了介绍,很多阅读过这前两篇文章的朋友都曾问到过这样一些问题:  1.如何把MSMQ应用到实际的项目中去呢?  2.可不可以介绍一个实际的应用实例?  3. ...

  8. matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读

    静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...

  9. 黑马程序员_JAVA之银行业务调度系统

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号窗口为普通窗 ...

  10. FPGA Verilog HDL 系列实例--------步进电机驱动控制

    [连载] FPGA Verilog HDL 系列实例 Verilog HDL 之 步进电机驱动控制 步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心.那么,下面我 ...