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>
时间: 2024-11-10 07:37:30