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

在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. 切换到android studio环境

    下载: android-studio-bundle-135.1740770-windows.exe sysimg_arm-21_r03.zip 设置环境变量: ANDROID_SDK_HOME     ...

  2. asp.net ajax 调用一例

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...

  3. ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法调用

    在用户控件中,获取父页面的方法 1:方法没有参数(userInfor()) string userInfor = Convert.ToString(this.Page.GetType().GetMet ...

  4. mac10.9+php5.5.15+brew0.9.5的安装

      Brew 是 Mac 下面的包管理工具,通过 Github 托管适合 Mac 的编译配置以及 Patch,可以方便的安装开发工具. Mac 自带ruby 所以安装起来很方便,同时它也会自动把git ...

  5. jquery选择器之表单选择\表单对象属性

    :input 匹配所有input标签 :text 匹配所有单行文本框 :password 匹配所有密码框 :radio  匹配所有单选扭 :checkbox 匹配所有复选框 :image 匹配所有图像 ...

  6. Oracle常见的几种等待事件

    1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...

  7. ObjectID和Handle

    一个dwg对应一个arx database,也就是一套9个符号表和一个有名词典. 一个CAD session中是可以加载多个database的.加载后每个对象都有一个handle和一个objectid ...

  8. memcached 常用命令及使用说明

    1.启动Memcache 常用参数 -p <num> 设置TCP端口号(默认设置为: ) -U <num> UDP监听端口(默认: , 时关闭) -l <ip_addr& ...

  9. rsync+sersync实现文件实时同步

    前言: 一.为什么要用Rsync+sersync架构? 1.sersync是基于Inotify开发的,类似于Inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增 ...

  10. datatable list 之前相互转换

    使用 FastMember: IEnumerable<SomeType> data = ... DataTable table = new DataTable(); using(var r ...