MyBatis使用大全(5)------映射器类
来源:互联网 发布:微信炸群软件 编辑:程序博客网 时间:2024/06/08 08:18
MyBatis的SqlSession中包括方法,映射sql等等。
SqlSession中包括了很多方法,简单截了个图如下:
包括了增删改查等方法以及方法的多种重载形式等等。
直接使用SqlSession的方法形式如下:
- User user = session.selectOne("com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById", 1);
- 或
- <pre name="code" class="java">User user = session.selectOne("queryUserMainById", 1);
直接使用SqlSession方法功能也很强大,但是会使得整个系统代码没有类型安全,也很繁琐。
所以,一个更通用的方式来执行映射语句是使用映射器类。
一个映射器类就是一个简单的接口,其中的方法定义匹配于 SqlSession 方法。比如:
- package com.lanhuigu.mybatis.map;
- import java.util.List;
- import java.util.Map;
- import org.apache.ibatis.annotations.Delete;
- import org.apache.ibatis.annotations.Insert;
- import org.apache.ibatis.annotations.Options;
- import org.apache.ibatis.annotations.Param;
- import org.apache.ibatis.annotations.Select;
- import org.apache.ibatis.annotations.Update;
- import com.lanhuigu.mybatis.entity.User;
- public interface UserMainMapper {
- /**
- * 查询用户对象--返回User对象
- */
- // (User)selectOne("queryUserMainById",1);
- public User queryUserMainById(int id);
- }
总之, 每个映射器方法签名应该匹配相关联的 SqlSession 方法, 也就是说,
如果你用的是xml,必须与xml中select下的id一样,但是这里没有字符串参数 ID。
相反,方法名必须匹配映射语句的 ID。
******返回类型:
返回类型为自己期望的类型。支持多种返回值类型,例如:原生类型,Map,POJO 和 JavaBean。
******是否需要实现映射器类接口:
映射器接口不需要去实现任何接口或扩展任何类。
只要方法前面可以被用来唯一标识对应的映射语句就可以了。
映射器接口可以扩展其他接口。当使用 XML 来构建映射器接口时要保证在合适的命名空间中有语句。
而且, 唯一的限制就是你不能在两个继承关系的接口中有相同的方法签名 (这也是不好的想法)。
你可以传递多个参数给一个映射器方法。
如果你这样做了, 默认情况下它们将会以它们在参数列表中的位置来命名,比如:#{param1},#{param2}等。
如果你想改变参数的名称(只在多参数情况下) ,那么你可以在参数上使用@Param(“paramName”)注解。
你也可以给方法传递一个 RowBounds 实例来限制查询结果。
总结:
使用映射器类可以对持久层管理更规范,使用快捷,统一编码形式,方便维护。
******映射器类注解:
说到映射器类,在前面也接触过注解使用,说到映射器类,还需要了解映射器注解。
MyBatis一开始设计使用的是通过XML做驱动的框架,所以,注解有其局限性。
比如,MyBatis的动态sql使用,在xml中可以使用各种元素玩转动态sql拼接,
但是使用注解确没有这种功效。我们有时候需要使用注解,看看注解都有哪些可用:
自己列表格太费劲,水平有限,很难列完整,从网上找了一个,以后就当字典查了。
- <arg>
- <idArg>
- <result>
- <id>
- @Insert
- @Update
- @Delete
- @Select
- <insert>
- <update>
- <delete>
- <select>
- @InsertProvider
- @UpdateProvider
- @DeleteProvider
- @SelectProvider
- <insert>
- <update>
- <delete>
- <select>
列举一个XML和注解使用,返回一条,或多条数据的实例:
- package com.lanhuigu.mybatis.map;
- import java.util.List;
- import java.util.Map;
- import org.apache.ibatis.annotations.Delete;
- import org.apache.ibatis.annotations.Insert;
- import org.apache.ibatis.annotations.Options;
- import org.apache.ibatis.annotations.Param;
- import org.apache.ibatis.annotations.Select;
- import org.apache.ibatis.annotations.Update;
- import com.lanhuigu.mybatis.entity.User;
- public interface UserMainMapper {
- //=======================XML版=======================
- /**
- * 查询用户对象--返回User对象
- */
- // (User)selectOne("queryUserMainById",1);
- public User queryUserMainById(int id);
- /**
- * 查询用户对象--返回多个--List<User>
- */
- public List<User> queryUserMainList();
- /**
- * 查询用户对象--返回map
- */
- public Map<String,Object> queryUserMainResultMap(int id);
- /**
- * 查询用户对象--返回多个--List<Map<String,Object>>
- */
- public List<Map<String,Object>> queryUserMainResultListMap();
- /**
- * 插入用户对象
- */
- public int insertUser(User user);
- /**
- * 更新用户对象
- */
- public int updateUser(User user);
- /**
- * 删除用户对象
- */
- public int deleteUser(int id);
- //=======================注解版==========================
- /**
- * 查询用户对象--返回User对象
- */
- @Select(" select f_id id,f_username username,f_age age from t_user_main where f_id = #{id} ")
- @Options(flushCache=true)
- public User queryUserMainByIdNew(@Param("id") int id);
- /**
- * 查询用户对象--返回多个--List<User>
- */
- @Select("select f_id id,f_username username,f_age age from t_user_main ")
- @Options(flushCache=true)
- public List<User> queryUserMainListNew();
- /**
- * 查询用户对象--返回map
- */
- @Select("select f_id id,f_username username,f_age age from t_user_main where f_id = #{id}")
- @Options(flushCache=true)
- public Map<String,Object> queryUserMainResultMapNew(@Param("id") int id);
- /**
- * 查询用户对象--返回多个--List<Map<String,Object>>
- */
- @Select("select f_id id,f_username username,f_age age from t_user_main")
- @Options(flushCache=true)
- public List<Map<String,Object>> queryUserMainResultListMapNew();
- /**
- * 插入用户对象
- */
- @Insert("insert into t_user_main (f_id,f_username,f_age) "
- + " values(#{id},#{username},#{age}) ")
- @Options(useGeneratedKeys=false)
- public int insertUserNew(User user);
- /**
- * 更新用户对象
- */
- @Update("update t_user_main set f_username=#{username},f_age=#{age} "
- + " where f_id=#{id} ")
- public int updateUserNew(User user);
- /**
- * 删除用户对象
- */
- @Delete("delete from t_user_main where f_id=#{id}")
- @Options(flushCache=true)
- public int deleteUserNew(@Param("id") int id);
- }
- MyBatis使用大全(5)------映射器类
- MyBatis使用大全(6)------映射器类
- MyBatis映射器使用注意事项
- MyBatis使用大全(4)------XML映射文件配置
- MyBatis使用大全(3)------XML映射文件配置
- MyBatis使用大全(4)------XML映射文件配置
- Spring集成MyBatis (使用mapper映射器)
- MyBatis使用大全(5)------动态SQL使用
- 【Mybatis学习】Mybatis映射器
- Mybatis--映射器注解
- MyBatis-映射器
- Mybatis映射器
- MyBatis四映射器
- mybatis--映射器
- mybatis-映射器-select
- Mybatis映射器
- Mybatis 映射器
- MyBatis映射器
- 调试EXC_BAD_ACCESS 对象释放
- docker 使用centos 镜像 运行 javaweb ,并重新生成镜像
- android共享元素
- C++ 静态编译
- Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
- MyBatis使用大全(5)------映射器类
- hibernate注解(一)
- shell 下执行mysql 命令
- c# delegate 传参
- Excel地址转换
- svn 命令
- /proc/net/tcp
- 百度地图定位功能
- STL源码之rotate函数结合图和实例分析