Mybatis框架--基础使用的一些坑

Posted 耍流氓的兔兔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis框架--基础使用的一些坑相关的知识,希望对你有一定的参考价值。

1 mybatis的底层实现

   使用dom4j将配置文件读取出来,使用动态代理动态创建代理对象,中间的调用方法和过程是使用java的反射机制

2 数据库字段和属性名不一致的问题 

1 在查询语句中使用别名
  
  <select id="selectBlog2" parameterType="int" resultType="Blog">
        select
        `id`,
        `title`,
        `author_id` as authorId,
        `state`,
        `featured`,
        `style`
        from
        blog where id = #{id}
  </select>

2 使用ResultMap

    <resultMap type="Blog" id="blogResultMap">
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="author_id" property="authorId" jdbcType="INTEGER" />
    </resultMap>
  
   <select id="selectBlog3" parameterType="int" resultMap="blogResultMap">
        select * from blog where id = #{id}
    </select>

 

 

3 排序时接受参数的字符选择问题

 如果使用#,那么sql不会报错,但是排序功能不能使用;所以应该使用$(参数是表名或是列名)
中文排序,需要使用mysql的转换函数 CONVERT()

    <select id="selectBySort" parameterType="string" resultMap="blogResultMap">
        select * from blog order by CONVERT(${value} USING GBK)
    </select>

 

4 传递多参数的方法

1 使用索引,按照参数的位置从0开始
  
  <select id="selectByPage" resultMap="blogResultMap">
        select * from blog limit
        #{0}, #{1}
    </select>

2 使用接口注解,注意占位参数的名字要和注解参数的名字一致

  List<Blog> selectByPage2(
        @Param(value="offset") int offset,
        @Param(value="pagesize") int pagesize);

  <select id="selectByPage2" resultMap="blogResultMap">
        select * from blog limit
        #{offset}, #{pagesize}
    </select>

3 使用map传参,注意占位参数的名字要和map中的key一一对应

   Map<String, Object> map = new HashMap<String, Object>();
        map.put("offset", 2);
        map.put("pagesize", 2);
        
    List<Blog> blogList = blogMapper.selectByPage3(map);

   <select id="selectByPage3" resultMap="blogResultMap">
        select * from blog limit
        #{offset}, #{pagesize}
    </select>

 

  

 5 获取刚刚插入数据的id(带有自增主键)

1 配置属性useGeneratedKeys="true" keyProperty="id"

  <insert id="insertBlog" parameterType="Blog" useGeneratedKeys="true" keyProperty="id">

2 在全局配置文件中配置settings选项,并且在mapper的insert节点配置属性keyProperty="id"

  <!-- 自增主键 -->
    <settings>
      <setting name="useGeneratedKeys" value="true" />
    </settings>

  <insert id="insertBlog2" parameterType="Blog" keyProperty="id">

3 直接查询

    <insert id="insertBlogMySql">
        <selectKey resultType="java.lang.Integer" order="AFTER"
            keyProperty="id">
            SELECT LAST_INSERT_ID()
        </selectKey>
    </insert>

4 没有自增主键的数据库查询(oracle)

  <insert id="insertBlogOracle">
        <selectKey resultType="java.lang.Integer" order="BEFORE"
            keyProperty="id">
            select seq.nextval as id from dual
        </selectKey>
    </insert>

 






























































































以上是关于Mybatis框架--基础使用的一些坑的主要内容,如果未能解决你的问题,请参考以下文章

mybatis的一些坑

mybatis记录:mybatis generator在ideal中的一些坑

markdown [mybatis参考]关于mybatis #mybatis的一些片段

MyBatis框架—动态 SQL配置文件事务

Spring+SpringMVC+MyBatis+Maven框架整合

mybatis基础系列——mybatis入门