mybatis学习笔记
JinF~
这个作者很懒,什么都没留下…
展开
-
spring 整合 mybatis 三种方法
第一种:需要另外写dao层继承SqlSessionDaoSupport抽象类,使用super.getSqlSession()获取SqlSession对象后再使用mapper接口,service层使用的是dao层缺点是需要另外实现dao层public class MyBatisCardDao extends SqlSessionDaoSupport{ public Card getCardByStudentId(String id) { SqlSession sqlSes.原创 2020-10-11 17:26:44 · 129 阅读 · 0 评论 -
mybatis延迟加载示例
https://juejin.im/post/6844904062362583054官网描述id(colum) 元素在嵌套结果映射中扮演着非常重要的角色。你应该总是指定一个或多个可以唯一标识结果的属性。 虽然,即使不指定这个属性,MyBatis 仍然可以工作,但是会产生严重的性能问题。 只需要指定可以唯一标识结果的最少属性。显然,你可以选择主键(复合主键也可以)。...转载 2020-10-09 11:04:36 · 105 阅读 · 0 评论 -
mybatis 三种模糊查询方式
第一种select * from table where colum like '%${value}%'传参数的时候传 %参数%select * from table where colum like #{value}在标签内使用bind子标签原创 2020-10-08 16:43:12 · 179 阅读 · 0 评论 -
mybatis批量添加数据推荐操作
只需要在openSession( )的时候添加参数即可:sqlSessionFactory.openSession(ExecutorType.BATCH);原因:普通的Executor执行器在对于DML语句的执行方式是 n条语句进行n次预编译,n次的参数处理BATCH执行器对于DML语句的执行方式是 只进行一次预编译,后续只需要处理n次参数即可...原创 2020-10-08 16:39:37 · 111 阅读 · 0 评论 -
Mybatis缓存机制小结
一级缓存一级缓存默认开启,作用域是同一个SqlSession对象;只要在数据库中查到了结果,mybatis就会把查到的结果放入一级缓存;当执行update类型的语句时,进行了commit()操作,一级缓存就会被刷新;二级缓存二级缓存需要手动开启,在需要使用二级缓存的xml映射文件中添加一个</cache>还需要再xml配置文件中开启<settings> <setting name="cacheEnabled" value="tr.原创 2020-10-08 16:34:16 · 81 阅读 · 0 评论 -
Mybatis多数据库环境切换
可以配置多个enviroment,根据id区分配置default选择环境示例控制某个SQL标签只在指定数据库环境中使用的方法:首先在mybatis配置文件中添加自己需要的数据库环境<databaseIdProvider type="DB_VENDOR"> <property name="SQL Server" value="sqlserver"/> <property name="DB2" value="db2"/> <propert原创 2020-10-08 16:02:47 · 711 阅读 · 0 评论 -
mybatis foreach标签的parameterType以及collection该怎么写
ParameterType:简单类型数组使用普通数组 如int[ ]集合类型使用list对象数组使用object[ ]类的属性就写类名collection数组就写array集合就写list原创 2020-10-08 15:44:29 · 593 阅读 · 0 评论 -
Mybatis 主键由数据库自动生成 update后写回属性的配置
useGeneratedKeys (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。 KeyProperty是JavaBean的属性值...原创 2020-10-08 15:36:39 · 190 阅读 · 0 评论 -
mybatis mapper接口包含多参数时 XML映射文件获取参数的方法
第一种方法:在接口参数前面加上 @Param() 注解@Select("select * from user where id = #{id} and name= #{name}")User findById(@Param("id") long id,@Param("name") String name);如果加上@Param( ) 注解的参数是对象类型(比如@Param("stu") Student student),那么取值的时候使用 #{stu.属性}第二种方法:使用arg或原创 2020-10-08 15:29:46 · 949 阅读 · 1 评论 -
mapper接口参数存在null时 MySQL与Oracle的不同处理
mybatis对于null,会包装成other类型,mysql对于mybatis的other类型就是以null处理,所以mysql数据库可以不做以下配置,插入的就是nullOracle不认识other类型,所以需要以下处理第一种解决:JDBC 要求,如果一个列允许使用 null 值,并且会使用值为 null 的参数,就必须要指定 JDBC 类型(jdbcType)。要更进一步地自定义类型处理方式,可以指定一个特殊的类型处理器类(或别名),比如:#{age,javaType=int,jd原创 2020-10-08 15:22:16 · 584 阅读 · 0 评论 -
mybatis中 ${}和#{}的区别 以及底层原理
${}: 不会自动加 ' ',如果传入参数为简单类型,那么必须写 ${value},如果是对象,写的是${属性名}; 底层解析的时候只要sql语句包含 ${ } ,在创建cofigration对象的时候,这条sql就会被解析成动态类型的语句,底层不会把 ${ } 转成 ?(不做处理),只会在使用Mapper接口代理对象进行数据操作的时候把#{ }转成 ?,把${ }转成mapper接口的参数值,所以会存在SQL注入的问题#{}: 对于字符串会自动加 ' ',如果传入参数为简...原创 2020-10-08 15:17:13 · 2226 阅读 · 0 评论