【MyBatis学习03】调用Mapper映射的3种使用方式
2017-03-18 23:33
495 查看
本文博客地址:http://blog.csdn.net/soonfly/article/details/63363004 (转载请注明出处)
继续延用入门实例《【MyBatis学习01】一个简单入门实例》中的例子来阐述
在service中采用
这种方式是我们推荐的方式。它要求遵守几个约定:
1、接口.java文件与.xml文件在同一目录下
2、在映射器配置文件mapper.xml中声明的namespace即:
3、mapper.xml内部statement的id要与mapper.java接口方法名一致
4、输入参数类型一致
5、返回值类型一致
注意,首先要在mybatis配置文件的mappers标签中增加
这样mybatis才能正确加载映射文件。因为这种情况不支持指定扫描加载。
User2Mapper.xml的代码和原来的UserMapper.xml完全一样,除了mapper标签的namespace属性不同,这里故意改成了
User2Mapper.xml内容如下:
接下来在service中使用SqlSession访问定义在映射器配置文件User2Mapper.xml中的statement
和第一种方式比,少了书写映射器接口这一环节。
但这种方式有几个弊端:
1、调用sqlSession方法时,需要将satement的id硬编码作为参数传入,即类似于”
2、sqlSession的方法(insert,update,selectOne等)中,要求传入的第二个参数是Object类型的(泛型),容易传错类型,IDE不会智能提示,不利于开发。
所以这种方式只是告诉大家,可以这么干,但最好不要这么干!
我们在原来的接口定义文件的目录下新增加一个接口文件User_2Mapper.java
代码如下:
在Service中访问:
这种方式是上面两种的综合,好处有:
1、文件数量减少,不需要维护xml 2、service通过接口方式访问,方法参数是限定类型,可智能提醒,可降低开发期错误
本文博客地址:http://blog.csdn.net/soonfly/article/details/63363004 (转载请注明出处)
继续延用入门实例《【MyBatis学习01】一个简单入门实例》中的例子来阐述
一、(推荐)service访问Mapper映射器接口(代理DAO)
具体实现步骤参考《【MyBatis学习01】一个简单入门实例》在service中采用
sqlSession.getMapper来获取映射器,通过Mapper映射器接口方法来实现操作。
SqlSession session = SqlSessionAssist.getSession(); /*获取mapper代理接口*/ UserMapper usermapper=session.getMapper(UserMapper.class);
这种方式是我们推荐的方式。它要求遵守几个约定:
1、接口.java文件与.xml文件在同一目录下
2、在映射器配置文件mapper.xml中声明的namespace即:
<mapper namespace="twm.mybatisdemo.mapper.UserMapper">要与mapper接口名一致
3、mapper.xml内部statement的id要与mapper.java接口方法名一致
4、输入参数类型一致
5、返回值类型一致
二、service直接访问Mapper映射器配置文件(原始DAO)
在twm.mybatisdemo.mapper包下新增加文件User2Mapper.xml。注意,首先要在mybatis配置文件的mappers标签中增加
<mapper resource="twm/mybatisdemo/mapper/User2Mapper.xml"/>
这样mybatis才能正确加载映射文件。因为这种情况不支持指定扫描加载。
User2Mapper.xml的代码和原来的UserMapper.xml完全一样,除了mapper标签的namespace属性不同,这里故意改成了
<mapper namespace="twm.mybatisdemo.mapper.User2Mapper">以区分。
User2Mapper.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="twm.mybatisdemo.mapper.User2Mapper"> <!-- 自定义返回结果集 --> <resultMap id="userMap" type="twm.mybatisdemo.pojo.User"> ...省略部分... </resultMap> <select id="selectById" parameterType="int" resultMap="userMap"> select * from user where id=#{id} </select> ...省略部分... </mapper>
接下来在service中使用SqlSession访问定义在映射器配置文件User2Mapper.xml中的statement
public static void main(String[] args) throws Exception { SqlSession session = SqlSessionAssist.getSession(); User aPerson; /*1、增加单条记录*/ aPerson=new User("郭灭","123456", "aX3Qcs", (short)1, "济南云龙客栈", "18911110000", "guom@gulong.com"); /*insert返回操作记录的数量,插入一条记录即为:1。*/ session.insert("twm.mybatisdemo.mapper.User2Mapper.insert",aPerson); System.out.println("1、增加单条记录:插入用户["+aPerson+"]成功。"); session.commit();/*对写操作进行提交*/ ...省略部分... /*4、修改单条记录*/ tmpuser.setAddress("锦绣山庄"); tmpuser.setUsername("三笑将军"); session.update("twm.mybatisdemo.mapper.User2Mapper.update",tmpuser); session.commit();/*提交*/ System.out.println("4、修改单条记录:"+tmpuser+"。ID:"+tmpuser.getId()); /*5、删除单条记录*/ session.update("twm.mybatisdemo.mapper.User2Mapper.delete",tmpuser.getId()); session.commit();/*提交*/ System.out.println("5、删除单条记录:"+tmpuser); /*6、查询记录*/ List<User> userList=session.selectList("twm.mybatisdemo.mapper.User2Mapper.selectAll"); System.out.println("6、查询记录:共找到"+userList.size()+"个用户"); /*End:关闭mybatis会话*/ session.close(); }
和第一种方式比,少了书写映射器接口这一环节。
但这种方式有几个弊端:
1、调用sqlSession方法时,需要将satement的id硬编码作为参数传入,即类似于”
twm.mybatisdemo.mapper.User2Mapper.update”。
2、sqlSession的方法(insert,update,selectOne等)中,要求传入的第二个参数是Object类型的(泛型),容易传错类型,IDE不会智能提示,不利于开发。
所以这种方式只是告诉大家,可以这么干,但最好不要这么干!
三、service直接访问带注解的Mapper映射器接口
使用SqlSession访问Mapper接口中用注解定义好的statement。我们在原来的接口定义文件的目录下新增加一个接口文件User_2Mapper.java
代码如下:
public interface User_2Mapper { /** * 新增用戶 * * @param user * @return * @throws Exception */ @Insert("insert into user (username,password,sex) values (#{username},#{password},#{sex}") public int insert_2(User user) throws Exception; /** * 根据id查询用户信息 * * @param id * @return * @throws Exception */ @Select("select * from user where id=#{id}") public User selectById_2(int id) throws Exception; }
在Service中访问:
public static void main(String[] args) throws Exception { SqlSession session = SqlSessionAssist.getSession(); User aPerson; /*1、增加单条记录*/ aPerson=new User("孙济城","123456", "aX3Qcs", (short)1, "济南云龙客栈", "18911110000", "guom@gulong.com"); /*insert返回操作记录的数量,插入一条记录即为:1。*/ session.insert("twm.mybatisdemo.mapper.User_2Mapper.insert_2",aPerson); session.commit(); System.out.println("1、增加单条记录:插入用户["+aPerson+"]成功。"); /*2、读取单条记录*/ User tmpuser=session.selectOne("twm.mybatisdemo.mapper.User_2Mapper.selectById_2", 1); System.out.println(tmpuser==null?"null":"2、读取单条记录:"+tmpuser+"。ID:"+tmpuser.getId()); session.close(); }
这种方式是上面两种的综合,好处有:
1、文件数量减少,不需要维护xml 2、service通过接口方式访问,方法参数是限定类型,可智能提醒,可降低开发期错误
本文博客地址:http://blog.csdn.net/soonfly/article/details/63363004 (转载请注明出处)
相关文章推荐
- Mybatis3.2.1使用例三:Mapper方式集成Spring、配置文件提供SQL
- mybatis——使用mapper代理开发方式
- 使用mybatis的generator自动生成po及mapper映射文件
- 记录学习的点滴(Mybatis配置注册Mapper的方式)
- Mybatis的mapper.xml的传值和<if></if>标签的使用(学习分享)
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- mybatis使用association的resultMap方式进行映射少数据问题
- Java的MyBatis框架中Mapper映射配置的使用及原理解析
- [Hive]Hive使用指南二 Hive命令的3种调用方式
- MyBatis基础学习:XML映射文件(Mapper.xml)
- MVC学习笔记之使用JQuery方式发送Ajax请求调用后台Controller
- 网易公开课《Linux内核分析》学习心得-使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- Mybatis使用Mapper方式CURD
- springmvc学习(二)——使用RequestMapper请求映射
- Java的MyBatis框架中Mapper映射配置的使用及原理解析
- mybatis——使用mapper代理开发方式
- springmvc学习笔记--mybatis--使用插件自动生成实体和mapper
- MyBatis mapper.xml配置一对一关系映射的几种方式整理
- MyBatis的Mapper代理开发方式的简单使用
- mybatis学习笔记,mapper代理方法的使用