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 generator在ideal中的一些坑
markdown [mybatis参考]关于mybatis #mybatis的一些片段