Mybatis Dao层注解及XML组合Dao的开发方式
mybatis可以用xml进行数据操作,也可以在dao层用注解的方式,也可以采取xml和dao层接口组合使用的方法。显然 ,后者更加简单。
实体类Student
package com.zhao.entity; /**
*
* @author: zhao
* @time: 2016年5月31日
*
* @description:学生
*/
public class Student {
private int stuId;
private String stuName;
private String stuClass; public int getStuId() {
return stuId;
} public void setStuId(int stuId) {
this.stuId = stuId;
} public String getStuName() {
return stuName;
} public void setStuName(String stuName) {
this.stuName = stuName;
} public String getStuClass() {
return stuClass;
} public void setStuClass(String stuClass) {
this.stuClass = stuClass;
} @Override
public String toString() {
return "Student [stuId=" + stuId + ", stuName=" + stuName + ", stuClass=" + stuClass + "]";
} }
1: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.zhao.dao.StudentDao">
<select id="queryById" parameterType="int" resultType="Student">
select * from student where stu_id=#{stuId}
</select>
</mapper>
先进行测试
private String resource="mybatis-config.xml";
private InputStream inputStream;
private SqlSessionFactory sqlSessionFactory;
private SqlSession sqlSession; @Before
public void before(){
inputStream=StudentTest.class.getClassLoader().getResourceAsStream(resource);
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
sqlSession=sqlSessionFactory.openSession();
}
@After
public void after(){
sqlSession.close();
} @Test
public void testXmlQueryById() {
Student student=(Student)sqlSession.selectOne("com.zhao.dao.StudentDao.queryById", 1);
System.out.println(student);
}
xml的方式操作数据库,用了SqlSession的selectOne方法。
public abstract <T> T selectOne(String paramString, Object paramObject);
当然,我们在mybatis的配置文件中,定义了类的别名、StudentDao.xml 以及数据库
<mappers>
<mapper resource="com/zhao/mapper/StudentDao.xml"/>
</mappers>
现在我们能查到结果
Student [stuId=1, stuName=ZHAO, stuClass=Java10班]
2:在dao层使用注解
public interface StudentDao {
@Select("select * from student where stu_id=#{stuId}")
public Student queryById(int stuId);
}
为了避免混淆,再修改一下配置文件
<mappers>
<mapper class="com.zhao.dao.StudentDao"/>
</mappers>
然后再进行测试
@Test
public void testAnnotationQueryById(){
StudentDao studentDao=sqlSession.getMapper(StudentDao.class);
Student student=studentDao.queryById(1);
System.out.println(student);
}
我们可以看到,是用了SqlSession的getMapper方法得到了一个Dao层接口对象,然后调用了其中的queryById方法查到的结果。
目前来看:
xml和dao层注解之间并没有什么联系,是两个不同的查询方式。
但是xml的配置比较简单,但是使用起来比较繁琐。而dao层注解需要在代码上进行操作,看起来也不舒服。
3:xml+dao
并不需要修改测试类
@Test
public void testAnnotationQueryById(){
StudentDao studentDao=sqlSession.getMapper(StudentDao.class);
Student student=studentDao.queryById(1);
System.out.println(student);
}
这里跟用注解是一样的。不过Dao层接口中注解已经被我删除了
public interface StudentDao {
public Student queryById(int stuId);
}
现在需要把xml和dao 联系起来
<?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.zhao.dao.StudentDao">
<select id="queryById" parameterType="int" resultType="Student">
select * from student where stu_id=#{stuId}
</select>
</mapper>
其实我并没有修改这个mapper文件,我们可以看到 mapper便签的namespace属性就是Dao层接口的全路径,select的id属性就是Dao层接口的相应方法,这些名字都是一样的。当然 也必须是一样的。
然后修改配置文件
<mappers>
<mapper resource="com/zhao/mapper/StudentDao.xml"/>
</mappers>
这样做就是为了让xml和dao能组合起来。配置文件中配置的是xml。但是这个xml指向了一个接口。我们在用的时候通过接口来进行相应操作,会更加清晰明了。在xml中修改sql代码也很舒服。
Mybatis Dao层注解及XML组合Dao的开发方式的更多相关文章
- Struts2+DAO层实现实例02——搭建DAO基本框架并与Struts2组合
实例内容 创建DAO(Data Access Oject)接口:BaseDAO 创建其实例化类:UserDAO 用于获取数据库struts中的userinfo表中的内容 创建User的Java Bea ...
- MyBatis框架的XML数据访问Dao层接口的组合使用
MyBatis 的前生为Apache的开源项目iBatis.其优势在于灵活,几乎可以替代JDBC,同时提供了编程接口.目前MyBatis的数据访问Dao层不需要实现类,也不需要像JDBC那样拼接Hql ...
- 基于Mybatis的Dao层的开发
基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFa ...
- Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)
1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...
- MyBatis开发Dao层的两种方式(原始Dao层开发)
本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...
- mybatis dao 层开发简易版 非整合 spring
同样老习惯,先上项目结构截图 首先 补充上篇文中缺失的 mysql demo 用的 小脚本 drop database if exists mybatis; CREATE DATABASE `myba ...
- 基于Mybatis的Dao层开发
转自:https://www.cnblogs.com/rodge-run/p/6528398.html 基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建 Sq ...
- SpringBoot整合Mybatis使用注解或XML的方式开发
2018-6-4 补充mybatis-spring-boot注解的使用 1.导包 只需要再导入mysql+mybatis两个包 <dependency> <groupId>or ...
- [转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...
随机推荐
- mysql数据权限的分配
在我们使用mysql数据库时,有时我们的程序与数据库不在同一机器上,这时我们需要远程访问数据库.缺省状态下,mysql的用户没有远程访问的权限. 下面介绍两种方法,解决这一问题. 1.改表法 可能是你 ...
- zabbix全网监控
为什么要监控 运维的职责1.保障企业数据的安全可靠.2.为客户提供7*24小时服务.3.不断提升用户的体验. 在关键时刻,提前提醒我们服务器要出问题了 当出问题之后,可以便于找到问题的根源 拿到公司服 ...
- SDOI2017 R1做题笔记
SDOI2017 R1做题笔记 梦想还是要有的,万一哪天就做完了呢? 也就是说现在还没做完. 哈哈哈我竟然做完了-2019.3.29 20:30
- wpf小技巧——datagrid 滚动条问题
今天在项目中遇到了一个问题,datagrid 不出现滚动条了,拿出来给大家分享下,以作前车之鉴. 很简单的布局代码如下 <Window x:Class="DataGrid_AutoSi ...
- PHP 2 语句 数据类型 字符串函数 常量
在 PHP 中,有两种基本的输出方法:echo 和 print. 在本教程中,我们几乎在每个例子中都会用到 echo 和 print.因此,本节为您讲解更多关于这两条输出语句的知识. PHP echo ...
- js动态改变css伪类样式
首先我们来看下页面上需要实现的基本效果,如下图所示: 因此我们可以使用如下js代码来试试看,是否能使用js改变伪类?如下代码所示: $(function() { $('.listnav li').cl ...
- 关于NOIP2018复赛若干巧合的声明
关于NOIP2018复赛若干巧合的声明 导言 参加NOIP2018时本人学龄只有两个月,却斩获了省一等奖,保送了重点中学的重点班,这看上去是个我创造的神话,然而,在我自己心中,我认为这只是个巧合(其实 ...
- /dev/mem可没那么简单
这几天研究了下/dev/mem.发现功能非常奇妙,通过mmap能够将物理地址映射到用户空间的虚拟地址上.在用户空间完毕对设备寄存器的操作,于是上网搜了一些/dev/mem的资料. 网上的说法也非常统一 ...
- React 系列教程
英文版:https://reactjs.org/docs/create-a-new-react-app.html 中文版:https://doc.react-china.org/docs/hello- ...
- java redis 分页查询数据
package com.liying.tiger.test; import java.util.List; import org.springframework.context.Application ...