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

在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. boost -- scoped_lock V.S. mutex lock/unlock —— why scoped_lock is recommanded?

    why scoped_lock is recommanded? 其实,这和RAII idiom变流行是一样的原因:因为你可以确保任何情况下离开执行范围都会解锁mutex. 注意,这不仅仅是说你可能忘记 ...

  2. python 类中staticmethod,classmethod,普通方法

    1.staticmethod:静态方法和全局函数类似,但是通过类和对象调用. 2.classmethod:类方法和类相关的方法,第一个参数是class对象(不是实例对象).在python中class也 ...

  3. python 面向对象学习

    ------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...

  4. Shiro 整合SpringMVC 并且实现权限管理

    Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大 ...

  5. Apache-Maven学习(转)

    之前听同学说过关于他们公司使用Maven框架来做项目管理,后来也跟他一起参与过一个小的项目,但没有仔细的去搞,现在好好学习一下. 文章转载自:易百教程 [http:/www.yiibai.com] A ...

  6. System.Data.SQLite

    SQLite介绍 在介绍System.Data.SQLite之前需要介绍一下SQLite,SQLite是一个类似于Access的单机版数据库管理系统,它将所有数据库的定义(包括定义.表.索引和数据本身 ...

  7. 【转载】芯片级拆解51、AVR、MSP430、凌阳61、PIC,5种单片机,多张显微照片

    先秀一张解剖照,放大裁剪,小米1S微距拍摄,800万像素摄像头很给力!今天等待被拆的是5个单片机芯片:(1)凌阳16位单片机SPCE061A ,这是我接触的第一个单片机,最高主频49MHz,32KB的 ...

  8. 短作业优先调度算法(SJF)

    假设有n项作业位于就绪队列中,这些作业的提交时间用数组requestTimes按照提交时间的先后顺序存储,对应的作业服务时间(持续时间)用数组durations存储.采用SJF算法,计算n项作业的平均 ...

  9. MVC4.0网站发布和部署到IIS7.0上的方法

    最近在研究MVC4,使用vs2010,开发的站点在发布和部署到iis7上的过程中遇到了很多问题,现在将解决的过程记录下来,以便日后参考,整个过程主要以截图形式呈现 vs2010的安装和mvc4的安装不 ...

  10. Semaphore tryAcquire release 正确的使用方法

    boolean permit = false; try { permit = semaphore.tryAcquire(1, TimeUnit.SECONDS); if (permit) { Syst ...