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代码也很舒服。

最新文章

  1. 基于Netty的私有协议栈的开发
  2. 报告一个IE很奇葩的滚动条问题——百分比计算宽度为浮点数时的滚动条显示异常
  3. html-css控制背景图全屏拉伸不重复显示
  4. 关于web服务器访问速度慢的一些简单解决方法
  5. ASP.NET多线程下使用HttpContext.Current为null解决方案 2015-01-22 15:23 350人阅读 评论(0) 收藏
  6. linux mknod命令解析
  7. R(七): R开发实例-map热力图
  8. 在线重定义(Rdefine Table online)
  9. Spring-mvc 静态资源不拦截
  10. easyUI的常见属性
  11. 用python实现一个简单的服务器
  12. SQL Server 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过
  13. 在Ubuntu系统下设置永久性Swap交换空间(转帖)
  14. Mybatis笔记六:Mybatis中SqlSessionFactoryBuilder/SqlSessionFactory/SqlSession/映射器实例的作用域(Scope)和生命周期
  15. Oracle查询优化-多表查询
  16. LINUX读写文件
  17. CodeForces 785C Anton and Fairy Tale
  18. jquery鼠标经过水平180度翻转效果
  19. Bootstrap框架(图标)
  20. 【转】VC++计算当前时间点间隔N天的时间(不使用CTimeSpan类)

热门文章

  1. Ant Design Pro的dva-loading
  2. Java面试知识点之线程篇(三)
  3. redis加锁
  4. SpringBoot-06:SpringBoot增删改查一套完整的考试案例
  5. SpringBoot注册登录(三):注册--验证账号密码是否符合格式及后台完成注册功能
  6. Node.js使用TCP通讯
  7. 3D打印社区
  8. Spring MVC Content Negotiation 转载
  9. Java IO(二)——RandomAccessFile
  10. Java面试MySQL的一些问题