Mybatis中xml和注解映射,so easy啦

MyBatis 提供了XML配置和注解配置两种方式。今天就来搞搞这两种方式是如何实现的。

MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。

来自官网。

Mybatis映射九个顶级元素:

  • mapper:映射文件的根节点,只有一个属性namespace(命名空间),作用如下:

    • 用于区分不同的mapper,全局唯一。

    • 绑定DAO接口,即面向接口编程,当绑定一个接口,就不用写此接口的实现类,会通过接口的完全限定名找到对应的mapper配置来执行SQL语句,所以,namespace的命名必须要写接口的完全限定名。

  • cache:配置给定命名空间的缓存。

  • cache-ref:从其他命名空间引用缓存配置。

  • resultMap:用来描述数据库结果集和对象的对应关系。

  • sql:可以重用的SQL块,也可以被其他语句引用。通常时存放一些公用性的SQL

  • insert:映射插入语句。

  • update:更新映射语句。

  • delete:删除映射语句。

  • select:映射查询语句。

xml方式

九个顶级映射元素对应标签:

 
  1. <mapper namespace="com.tian.mybatis.mapper.UserMapper">

  2.     <resultMap id="" type=""></resultMap>

  3.     <sql id=""></sql>

  4.     <cache blocking="" ></cache>

  5.     <cache-ref namespace=""></cache-ref>

  6.     <select id="selectUserById"></select>

  7.     <insert id="insert" ></insert>

  8.     <update id=""></update>

  9.     <delete id=""></delete>

  10. </mapper>

select详解

可以看得出,后面可选项还是蛮多的。下面是官网对每项的解释。

select使用案例

  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!DOCTYPE mapper

  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  5. <mapper namespace="com.tian.mybatis.mapper.UserMapper">

  6.     <select id="selectUserById"  resultType="com.tian.mybatis.entity.User" parameterType="int" >

  7.         select * from m_user where id = #{id}

  8.     </select>

  9. </mapper>

  • id必须在这个Mapper中是唯一的,可以被用来引用这条语句 ,这个id必须与只对应的是XxxMapper.java中的方法,必须是一一对应。

  • 返回类型:User类型,resultType:查询语句返回结果类型的完全限定名或别名。别名使用方式和parameterType是一样的。

  • 参数:整形,表示查询语句传入参数的类型和完全限定名或别名。支持基础数据类型和复杂数据类型。

#{参数名}:告诉MyBatis生成的PreparedStatement参数,相对于JDBC中,改参数被标识为‘?’。

别名与参数映射类型如下:

返回类型中别名的使用,注意:

如果是我们的entity类,那么resultType是无法使用别名的,只能使用resultMap才可以使用别名。

  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!DOCTYPE mapper

  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  5. <mapper namespace="com.tian.mybatis.mapper.UserMapper">

  6.     <resultMap id="User" type="com.tian.mybatis.entity.User"/>

  7.     <select id="selectUserById"  resultMap="User" parameterType="int" >

  8.         select * from m_user where id = #{id}

  9.     </select>

  10. </mapper>

但是如果使用的上面映射表里,也可以直接使用别名。

数据库里有两条数据:


UserMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!DOCTYPE mapper

  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  5. <mapper namespace="com.tian.mybatis.mapper.UserMapper">

  6.     <select id="countUser" resultType="int">

  7.         select count(1) from m_user

  8.     </select>

  9. </mapper>

UserMapper.java

 
  1. import com.tian.mybatis.entity.User;

  2. public interface UserMapper {

  3.     int countUser();

  4. }

测试类:

  1. public class MybatisApplication {

  2.     public static final String URL = "jdbc:mysql://localhost.com:3306/mblog?useUnicode=true";

  3.     public static final String USER = "root";

  4.     public static final String PASSWORD = "123456";

  5.     public static void main(String[] args) {

  6.         String resource = "mybatis-config.xml";

  7.         InputStream inputStream = null;

  8.         SqlSession sqlSession = null;

  9.         try {

  10.             inputStream = Resources.getResourceAsStream(resource);

  11.             //工厂模式

  12.             SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

  13.             //获取sql操作会话

  14.             sqlSession = sqlSessionFactory.openSession();

  15.             //构造对象(这里比较特殊,这里构造对象的方式后面会专门分享)

  16.             UserMapper userMapper =  sqlSession.getMapper(UserMapper.class);

  17.             //查询统计

  18.             System.out.println(userMapper.countUser());

  19.         } catch (Exception e) {

  20.             e.printStackTrace();

  21.         } finally {

  22.             try {

  23.                 inputStream.close();

  24.             } catch (IOException e) {

  25.                 e.printStackTrace();

  26.             }

  27.             sqlSession.close();

  28.         }

  29.     }

  30. }

输出:2

当数据库表中的字段名和我们entity中的字段名不一致,怎么处理?

在实际开发中,这种常见是在所难免。我们可以使用下面的这种方式解决。

。。。。。。。。。。。。。。。。。

版权原因,完整文章,请参考如下:Mybatis 中xml和注解映射,so easy啦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值