码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-21 19:18:11      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:pre   gre   color   mys   反射   机制   开始   state   where   

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框架--基础使用的一些坑

标签:pre   gre   color   mys   反射   机制   开始   state   where   

原文地址:http://www.cnblogs.com/roxy/p/7570018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!