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

Mybatis框架--基础使用的一些坑的相关文章

Mybatis框架基础支持层——反射工具箱之Reflector&amp;ReflectorFactory(3)

说明:Reflector是Mybatis反射工具的基础,每个Reflector对应一个类,在Reflector中封装有该类的元信息, 以及基于类信息的一系列反射应用封装API public class Reflector { private static final String[] EMPTY_STRING_ARRAY = new String[0]; /** * 对应的类Class对象 */ private Class<?> type; /** * 类中可读属性的集合,就是存在相应的get

Mybatis框架基础支持层——解析器模块(2)

解析器模块,核心类XPathParser /** * 封装了用于xml解析的类XPath.Document和EntityResolver */ public class XPathParser { /** * 将xml文件读入内存,并构建一棵树, * 通过树结构对各个节点node进行操作 */ private Document document; /** * 是否开启xml文本格式验证 */ private boolean validation; /** * 用于加载本地DTD文件 * * 默认

Mybatis框架基础支持层——反射工具箱之MetaClass(7)

简介:MetaClass是Mybatis对类级别的元信息的封装和处理,通过与属性工具类的结合, 实现了对复杂表达式的解析,实现了获取指定描述信息的功能 public class MetaClass { private ReflectorFactory reflectorFactory; private Reflector reflector; /** * 构造函数私有 */ private MetaClass(Class<?> type, ReflectorFactory reflectorF

框架 day65 Mybatis入门(基础知识:框架原理,入门[curd],开发dao层,全局与映射配置)

Mybatis 基础知识(一) 第一天:基础知识(重点) mybatis介绍 mybatis框架原理(掌握) mybaits入门程序(掌握) 用户信息进行增.删.改.查 mybatis开发dao层方法:(掌握) 原始dao开发方法(dao接口和实现类需要程序员编写) mapper代理开发方法(程序员只需要编写接口) SqlMapConfig.xml(mybatis全局配置文件)(掌握) mybatis输入映射(掌握) mybatis输出映射(掌握) mybatis动态sql(掌握)   1   

SpringBoot2.0 基础案例(10):整合Mybatis框架,集成分页助手插件

一.Mybatis框架 1.mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型.接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录. 2.mybatis特点 1)sql语句与代码分离,存放于xml配置文件中,方便管理 2)用逻辑标签

MyBatis 框架系列之基础初始

1.什么是 MyBatis MyBatis 本是 apache 的一个开源项目 iBatis,后改名为 MyBatis,它 是一个优秀的持久层框架,对 jdbc 的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.结果集检索等jdbc繁杂的过程代码. Mybatis 通过 xml 或注解的方式将要执行的各种 statement(statement.preparedStatemnt.Cal

用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建三:配置spring并测试

这一部分的主要目的是 配置spring-service.xml  也就是配置spring  并测试service层 是否配置成功 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(2 配置spring-dao和测试)在这个基础上面 继续进行spring的配置. 回顾上面  我们已经成功测试通过了Mybatis的配置. 这时候的目录结构是: 一:下面我们继续补充目录结构,在com.peakfortake的文件目录项目 

mybatis入门基础(二)----原始dao的开发和mapper代理开发

阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先苦后甜嘛! 回到顶部 一:原始dao开发方法 概要:1.在上篇中搭建好的框价中编写dao接口和dao实现类 2.向dao接口实现类中注入SqlSessionFactory,在方法体内通过SqlSe

Mybatis 框架学习

Mybatis 一. 入门 1. JDBC 回顾 (1). 准备数据库 新建 mybatis_learn 数据库 执行 sql 脚本 1 -- ---------------------------- 2 -- Table structure for `Blog` 3 -- ---------------------------- 4 DROP TABLE IF EXISTS `Blog`; 5 CREATE TABLE `Blog` ( 6 `id` int(11) NOT NULL AUTO