设为首页 加入收藏

TOP

mybatis入门介绍二(一)
2017-10-13 10:10:24 】 浏览:147
Tags:mybatis 入门 介绍

相信看过我的上一篇博客的同学都已经对mybatis有一个初步的认识了。这篇博客主要是对mybatis的mapper代理做一下简单的介绍,希望能够帮助大家共同学习。

我的上一篇博客:mybatis入门介绍


相信用过mybatis的程序员都知道mybatis有两种配置文件,这个在上一篇博客中也写到。为了这篇博客的整体性,在这里重复一次。

这两种配置文件分别是:

SqlMapConfig.xml(mybatis全局配置文件,名称不固定,用来配置运行环境(数据源、事务)

XXXmapper.xml 主要用来配置sql语句

而SqlMapConfig.xml文件在整个项目中只有一个,而XXXmapper.xml却又很多个。

 

我们这篇博客的主要内容是和这个XXXmapper.xml有关的。

想必大家都知道在mybatis项目中,会有和XXXmapper.xml同名的Java文件,也就是XXXmapper.java而且,它是一个接口

至于为什么要有XXXmapper.Java,以我现在学习的基础,我认为应该是为了方便调用同名xml文件中的statement,而我看的教学视频上说:

1、dao的实现类中存在重复代码,整个mybatis操作的过程代码模板重复(先创建sqlsession、调用sqlsession的方法、关闭sqlsession)

 2、dao的实现 类中存在硬编码,调用sqlsession方法时将statement的id硬编码。

 所以我们先介绍一下传统的Dao方法开发mybatis。

 


原始dao开发方式

  1.先创建Dao接口

  

  2.实现Dao接口

  

  3.测试代码

  

 

   从上面的三段代码中可以验证我们前面所说的:

  1、dao的实现类中存在重复代码,整个mybatis操作的过程代码模板重复(先创建sqlsession、调用sqlsession的方法、关闭sqlsession)

   2、dao的实现 类中存在硬编码,调用sqlsession方法时将statement的id硬编码。

 


 

下面我们再来写一写这个通过mapper代理的方式来开发:

mapper代理的方式

  使用mapper代理的方式来开发的话,我们是不需要Dao的实现类的,因为我们通过mapper的代理,来创建代理类,mybatis提出了mapper接口,相当 于dao 接口。

  而Mapper的代理类,就相当于Dao的实现类。但是代理类并没有Dao的实现类那样存在重复性代码和硬编码问题。

亮代码:

1.仍然是Dao接口:

 1 public interface UserDao {
 2     
 3     //根据id查询用户信息
 4     public User findUserById(int id) throws Exception;
 5     //根据用户名称模糊查询用户列表
 6     public List<User> findUserByUsername(String username) throws Exception;
 7     //插入用户
 8     public void insertUser(User user) throws Exception;
 9 
10 }

 

2.XXXmapper.xml(代码选择性粘贴,如果直接拷贝的话请自行修改)

 1     <select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">
 2         select * from user where username like '%${value}%'
 3     </select>
 4     
 5     <!-- 自定义查询条件查询用户的信息
 6     parameterType:指定包装类型
 7     %${userCustom.username}%:userCustom是userQueryVo中的属性,通过OGNL获取属性的值
 8      -->
 9     <select id="findUserList" parameterType="userQueryVo" resultType="user">
10     
11         select id,username,birthday from user
12         <!-- where标签相当 于where关键字,可以自动去除第一个and -->
13         <where>
14             <!-- 引用sql片段,如果sql片段和引用处不在同一个mapper必须前边加namespace -->
15             <include refid="query_user_where"></include>
16             <!-- 下边还有很其它的条件 -->
17             <!-- <include refid="其它的sql片段"></include> -->
18         </where>
19     </select>

 

3.UserMapper.java

 

 1 public interface UserMapper {
 2     
 3     //根据用户id查询用户信息
 4     public User findUserById(int id) throws Exception;
 5     
 6     //根据用户名称  查询用户信息
 7     public List<User> findUserByName(String username) throws Exception;
 8     
 9     //自定义查询条件查询用户信息
10     public List<User> findUserList(UserQueryVo userQueryVo) throws Exception;
11     
12     //查询用户,使用resultMap进行映射
13     public List<User> findUserListResultMap(UserQueryVo userQueryVo)throws Exception;
14     //查询用户,返回记录个数
15     public int findUserCount(UserQueryVo userQueryVo) throws Exception;
16     
17     //插入用户
18     public void insertUser(User user)throws Exception;
19     //删除用户
20     public void deleteUser(int id) throws Exception;
21     //修改用户
22     public void updateUser(User user) throws Exception;
23 }

 

 

 通过这三个文件我们就完成了mybatis对增删改查的编写,就差一个测试类了,也是最关键的。此处先不贴出测试类的代码。这里请注意上面三个代码UserMapper.xml , UserMapper.java , UserDao

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java JDBC的基础知识(四) 下一篇【Java并发编程】9、非阻塞同步算..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目