Mybatis初学经验----------------(2)
至于myBatis的配置,上篇文章中有,就不说了。今天谈谈myBatis编写Dao层时的用法。
传统Dao层代码需求
1、在Dao层实现类中,存在大量的模板方法,能否提取模板方法,减少我们的工作量。
2、将statementId硬编码到了Dao层实现类。
采用mapper代理的方式进行Dao层的开发,需要有几个约定(约定大于配置)
1、XXXMapper.xml中namespace的值需要与Dao接口中的全类名相同。 (确定哪一个XXXMapper.xml文件)
2、XXXMapper.java 接口中的方法名与XXXMapper.xml中的statementId相同(确定使用哪个sql);
3、XXXMapper.java 接口中的方法输入参数需要与XXXMapper.xml中ParameterType定义的类型相同;
4、XXXMapper.java 接口中的方法返回值类型需要与XXXMapper.xml中resultType定义的类型相同;
具体使用方法如下:
收下建立如下的三个文件
userMapper.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.xt.mybatis.hello.Mapper.AnimalMapper">
<!—
XXXMapper.xml中namespace的值需要与Dao接口中的全类名相同。 (确定哪一个XXXMapper.xml文件)
statementId=namespace+queryAnimalInfoBySid
属性ID:标示映射文件中的sql的唯一性,ID被称为statementId
属性 parameterType: 入参参数类型
属性resultType:输出结果类型,表示单条数据记录映射成的javaBean
#{value} 表示预处理,代表占位符
${value} 表示sql字符串的拼接,将结束到的数据不加任何修饰拼装到sql中。
resultMap: 数据字段名与输出类型属性的一个对应。
type:代表输出的javaBean类
-->
<resultMap type="com.xt.mybatis.hello.Animal.entity.Animal" id="Animal">
<id column="SID" property="sid"/>
<result column="Name" property="name"/>
<result column="Kind" property="kind"/>
<result column="Number" property="number"/>
<result column="Address" property="address"/>
</resultMap>
<select id="queryAnimalInfoBySid" parameterType="int" resultMap="Animal">
select * from animal where SID=#{sid}
</select>
<insert id="insertAnimal" parameterType="com.xt.mybatis.hello.Animal.entity.Animal">
insert into animal vaules (#{sid},#{name},#{kind},#[number},#{addrss})
</insert>
<delete id="deleteAnimal" parameterType="string">
delete from animal where SID=#{sid}
</delete>
<update id="updateAnimal" >
update animal set Name=#{name},Kind="kind", Number =#{number},Address=#{address} where SID=#{sid}
</update>
</mapper>
同时你要引入你所建立的这个Mapper
在mybatis-config.xml中加入下面的代码
<mappers> <mapper resource="com/xt/mybatis/hello/Mapper/userMapper.xml"/> </mappers>
接口内的方法要注意了:
public interface AnimalMapper {
public List<Animal> queryAnimalInfoBySid(int sid);
/*
XXXMapper.java 接口中的方法名与XXXMapper.xml中的statementId相同(确定使用哪个sql);
XXXMapper.java 接口中的方法输入参数需要与XXXMapper.xml中ParameterType定义的类型相同;
XXXMapper.java 接口中的方法返回值类型需要与XXXMapper.xml中resultType定义的类型相同;
*/
public void insertAnimal(Animal al);
public void deleteAnimal(String sid);
public void updateAnimal(Animal al);
}
下面我们就可以进行测试了
public class mapperTest {
SqlSession ss=null;
@Before
public void Init(){
try {
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis/mybatis-config.xml"));
ss = ssf.openSession();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void queryAnimalInfoBySid(){
AnimalMapper map = ss.getMapper(AnimalMapper.class);
System.out.println("=========Animal========"+map.queryAnimalInfoBySid(1806));
ss.close();
}
}
结果如下

Mybatis初学经验----------------(2)的更多相关文章
- myBatis初学经验----(1)
Java常用的三种编写模式 Spring,SpringMVC,myBatis. myBatis(原名:iBatis): 开源的ORM(持久层)框架,之前为apahce旗下顶级开源项目,后转到googl ...
- Mybatis初学笔记
MyBatis环境搭建:1.需要mybatis-3.3.0.jar,将该jar包导入web工程的libs文件夹中:2.在src下新建一个mybatis-config.xml文件,mybatis的基本配 ...
- Java Persistence with MyBatis 3(中文版) 前言
对很多软件系统而言,保存数据到数据库和从数据库中检索数据是其工作流程中至关重要的一部分.在 Java 领域,有很多的实现了数据持久化层的工具和框架,它们每一个都有自己不同的实现方法.而 MyBatis ...
- 搭建ssm框架经验
要想搭建好ssm框架的开发环境.首先我们需要知道ssm是什么?ssm就是spring,springmvc,mybatis. 然后我们要知道,他们分别都是怎样实现的和做什么用的,充当什么角色?这样我们就 ...
- [推荐]MyBatis 核心技术与面试 34 讲
MyBatis 核心技术与面试 34 讲 职业生涯中常被问到: 如何成为某方面的高手? 如何快速搞定某项技术? 我现在的水平处于什么阶段? -- 我暗暗想,我们从小学到中学到大学,经历了大考三六九.小 ...
- WPF项目学习.一
WPF项目搭建 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案. 使用MVVM的优点是 数据和视图分离,双向绑定,低耦合,可重用行,相对独立 ...
- WPF项目学习.二
WPF用MVVM的解决记录 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案. 焦点的控制,键盘事件触发,输入框的数字限制,异步处理,隐藏状 ...
- WPF项目学习.三
工具代码记录 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案. 分页控件的制作,邮件发送,日志代码,excel导入导出等代码的实现过程: 二 ...
- WPF项目学习.四
信息收录项目 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案. 需求文案.设计思路.简要数据库结构.简要流程图和明细代码,动图细化每步操作 ...
随机推荐
- Python爬虫之反爬虫---使用随机User-Agent
在编写爬虫时,大多数情况下,需要设置请求头.而在请求头中,随机更换User-Agent可以避免触发相应的反爬机制. 使用第三方库fake-useragent便可轻松生成随机User-Agent. 使用 ...
- eclipse validating 卡着一直不动
处理方式: 1.对项目的.project文件去掉下面两个配置 org.eclipse.wst.jsdt.core.javascriptValidator 和 org.eclipse.wst.jsdt. ...
- const pointers
1 指针 p对应的地址是常量,但是里面存放的data不是常量 2 地址里存放的data是常量,但是地址不是常量 3 地址和指针都是常量
- 04 ArcPython实战篇二
1.删除Default.gdb中的所有要素类.表.栅格 2.空间随机抽取若干数 3.地震目录自动空间化 参考:esrichina易智瑞中国公开课
- Python数据结构与算法之图的广度优先与深度优先搜索算法示例
本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...
- JavaScript格式化返回当前日期和时间
要求: 返回当前日期和时间,如 2020年10月06日 星期二 下午08点15分35秒 代码实现: function getDate() { var date = new Date(); var ye ...
- Selenium截屏 图片未加载的问题解决--【懒加载】
需求: 截屏后转PDF. 问题: selenium截屏后,图片未加载 如下图: 原因: 网站使用了懒加载技术:只有在浏览器中纵向滚动条滚动到指定的位置时,页面的元素才会被动态加载. 什么是图片懒加载? ...
- Java源码详解系列(十一)--Spring的使用和源码
Spring 是一个一站式的 Java 框架,致力于提高我们项目开发的效率.通过 Spring,我们可以避免编写大量额外代码,更专注于我们的核心逻辑.目前,Spring 已经成为最受欢迎的 Java ...
- 非阻塞I/O和阻塞I/O
1.简介 等待队列实现在事件上的条件等待:希望等待特定事件的进程把自己放进合适的等待队列,并放弃控制权.可用于: - 中断处理 - 进程同步 - 定时 2.等待队列头数据结构 1 typedef st ...
- mysql DISTINCT选取多个字段,获取distinct后的行信息
背景: a表保存关联关系,通过ACode 获取该关系中的所有 BCode, 并获取所有Bcode-max(Bvrsn)的信息 Bnm 表a 表b 循序渐进: ...