起别名:
mapper配置文件中
<select id="getAllUserLike" resultType="com.dongmu.pojo.User">
select * from User where name like '%${param}'
</select>
可以发现resultType比较长,怎么可以直接使用你 User呢?
方式:起别名。
在mybatis-config.xml主配置文件中使用:
<mappers>
<package name="com.dongmu.dao"/>
<typeAlias type="com.dongmu.pojo.User" alias="kkk"/>
</mappers>
第一种指定类中的类名首字母小写作为别名。我做的时候大写也可以,官方建议使用小写。
第二种是指定别名,但是同时只能用一种。两种同时用报错
第三种方式:使用注解。而且这种优先级最高。
默认的别名:https://mybatis.net.cn/configuration.html
关于setting的设置:
为什么mysql一般用下划线连接命名呢,为什么不是驼峰命名?
因为在Oracle或者其他数据库会把字段名转为大写,不用下划线不容易认出来,可读性太差了
完整配置(了解):
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
Mybatis种注册Mapper文件的注意事项
<mappers>
<mapper resource=""/>//指定xml文件的位置,这时候文件放在哪里都可以
<mapper class=""/>//这种方式接口和mapper文件必须同名且在同一个包下
<package name="com.dongmu.dao"/>//这种扫面包的方式和class的方式一样,必须同名同包
</mappers>
生命周期和作用域
(前面说过,很重要)
SqlSessionFactoryBuilder一旦创建了 SqlSessionFactory,就不再需要它了, 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。
SqlSessionFactory是很占用资源的,有一个就够了,因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。
SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
每个线程都要有它自己的Sqlsession。绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。用完了之后要关闭。这个关闭操作很重要。
一个Session可以获得多个Mapper