使用动态代理实现dao接口
- 使用动态代理实现dao接口的实现类
MyBatis允许只声明一个dao接口,而无需写dao实现类的方式实现数据库操作。前提是必须保证Mapper文件中的<mapper>标签的namespace属性值必须要和dao接口的类路径一致,MyBatis容器会自动通过动态代理生成接口的实现类。
Mapper.java
package cn.mybatis.dao;
import cn.mybatis.domain.Student;
public interface StudentMapper {
public void insertStudent(Student s);
public void updateStudent(Student s);
public void deleteStudent(String stuid);
public Student selectStudentById(String stuid);
}
Mapper.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="cn.mybatis.dao.StudentMapper">
<resultMap type="student" id="BaseResultMap">
<id column="stu_id" property="stuId" jdbcType="VARCHAR" javaType="java.lang.String" />
<result column="stu_name" property="stuName" jdbcType="VARCHAR" javaType="java.lang.String" />
<result column="stu_birthdate" property="stuBirthdate" jdbcType="DATE" javaType="java.util.Date" />
<result column="stu_phone" property="stuPhone" jdbcType="VARCHAR" javaType="java.lang.String" />
</resultMap> <!-- 插入数据 -->
<insert id="insertStudent" parameterType="student">
insert into student (stu_id,stu_name,stu_birthdate,stu_phone)
values(#{stuId},#{stuName},#{stuBirthdate},#{stuPhone})
</insert> <!-- 更新数据 -->
<update id="updateStudent" parameterType="student">
update student set stu_name=#{stuName}, stu_birthdate=#{stuBirthdate},
stu_phone=#{stuPhone} where stu_id=#{stuId}
</update>
<!-- 删除数据 -->
<delete id="deleteStudent" parameterType="string">
delete from student where stu_id=#{stuId}
</delete> <!-- 查询数据,返回的数据会根据resultMap设置封装到实体类对象中 -->
<select id="selectStudentById" resultType="cn.mybatis.domain.Student" parameterType="string" >
select stu_name as stuName from student where stu_id=#{stuId}
</select>
</mapper>
测试
package cn.mybatis.demo; import java.io.InputStream;
import java.text.SimpleDateFormat; 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 org.apache.log4j.Logger; import cn.mybatis.dao.StudentMapper;
import cn.mybatis.domain.Student; public class Demo_01 {
private static SqlSessionFactory fac;
static{
InputStream is = null;
try{
//处理并根据config配置文件实例化SqlSessionFactory
is = Resources.getResourceAsStream("SqlMapperConfig.xml");
//获取session工厂类
fac = new SqlSessionFactoryBuilder().build(is);
}catch(Exception e){
e.printStackTrace();
Logger.getLogger(Demo_01.class).debug(e.getMessage());
}
}
public static void main(String[] args) throws Exception {
//创建要保存的学生信息
Student s = new Student();
s.setStuId("5");
s.setStuName("zhou");
s.setStuBirthdate(new SimpleDateFormat("yyyy-MM-dd").parse("1991-1-12"));
s.setStuPhone("341324123"); SqlSession session = fac.openSession();
StudentMapper mapper = session.getMapper(StudentMapper.class);
// mapper.insertStudent(s);
// mapper.updateStudent(s);
// mapper.deleteStudent("5");
Student s1 = mapper.selectStudentById("1");
System.out.println(s1.getStuName());
session.commit();
session.close();
}
}
使用动态代理实现dao接口的更多相关文章
- MyBatis总结三:使用动态代理实现dao接口
由于我们上一篇实现MyBatis的增删改查的接口实现类的方法都是通过sqlsession调用方法,参数也都类似,所以我们使用动态代理的方式来完善这一点 MyBatis动态代理生成dao的步骤: 编写数 ...
- MyBatis使用mapper动态代理实现DAO接口
工具: mysql 5.5.62 IDEA 参考自:https://www.cnblogs.com/best/p/5688040.html 遇到的问题: 无法读取src/main/java下配置文 ...
- MyBatis使用Mapper动态代理开发Dao层
开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同原始Dao接口实现类方法. Mappe ...
- 基于JDK动态代理实现的接口链式调用(Fluent Interface)工具
什么是链式接口(Fluent Interface) 根据wikipedia上的定义,Fluent interface是一种通过链式调用方法来完成方法的调用,其操作分为终结与中间操作两种.[1] 下面是 ...
- SpringBoot 动态代理实现三方接口调用
目录 一.定义注解 二.建立动态代理类 三.注入spring容器 四.编写拦截器 五.创建客户端调用类 六.main方法测试 七.启动项目 在某些业务场景中,我们只需要业务代码中定义相应的接口或者相应 ...
- Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)
1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...
- JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明
1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...
- MyBatis开发Dao的原始Dao开发和Mapper动态代理开发
目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...
- 最简单的动态代理实例(spring基于接口代理的AOP原理)
JDK的动态代理是基于接口的 package com.open.aop; public interface BusinessInterface { public void processBus ...
随机推荐
- 【cl】本地安装maven的jar包报错Artifact is already in the local repository
原因是我直接把jar包放在了仓库里面 解决办法:将jar办放在不是仓库路径位置,在进行install就okle
- Memcache 和 Radis 比较
Memcache 和 Radis 比较 2014-03-28 11:00 2447人阅读 评论(0) 收藏 举报 分类: memcache(6) Redis(7) 版权声明:本文为博主原创文章, ...
- VS2013+ffmpeg开发环境搭建-->【转】
本文转载自:http://blog.csdn.net/qq_28425595/article/details/51488869 版权声明:本文为博主原创文章,未经博主允许不得转载. 今天整理资料时,发 ...
- C Tricks(十七)—— 对角线元素的屏蔽、二维数组(矩阵)的遍历
1. 对角线元素的屏蔽 使用 if + continue 实现对对角线元素的屏蔽 for u in range(n): for v in range(n): if u == v: continue . ...
- xenserver 增加新硬盘
xenserver 增加新硬盘 1.XS创建本地存储 首先 分区好的的硬盘接到服务器上 查看所有硬盘了的id ls -l /dev/disk/by-id/ 记下硬盘的全称.接下来开始挂载 xe sr ...
- ASP.NET Core Web API下事件驱动型架构的实现
mvp 原创博文:http://www.cnblogs.com/daxnet/p/8082694.html
- fragment基础 fragment生命周期 兼容低版本
fragment入门 ① 创建一个类继承Fragment 重写oncreateView方法 public class FirstFragment extends Fragment { @Overrid ...
- 1350 Taxi Cab Scheme DAG最小路径覆盖
对于什么是DAG最小路径覆盖以及解题方法在我的另外的博客已经有了.http://www.cnblogs.com/Potato-lover/p/3980470.html 此题的题意: 公交车(出租车)车 ...
- hdu2647 Reward 拓扑排序
此题的关键在于分层次,最低一层的人的奖金是888,第二层是888+1 …… 分层可以这样实现.建立反向图.在拓扑排序的时候,第一批入度为0的点就处于第一层,第二批处于第二层 …… 由于是逐个遍历入度为 ...
- ACM_____不再爱你……
不再爱你…… 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在有一个圆柱形水杯,里面装满了水,在它的底部有一个小洞,通过一些简单的物理知识我们可以知道: 1.由于重力 ...