Mybatis基础
mybatis不会自动建表,hibernate会
Mybatis配置属性详解
1. environment
主要注意以下两个
- dateSource
- transactionManager
<!-- 数据库环境 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/testbase?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
2. properties
使用${}引用
<properties>
<property name="username" value="root"/>
</properties>
<!--使用${username}引用此属性值-->
<!--使用resource引用外部文件-->
<properties resource="jdbc.properties">
<property name="username" value="root"/>
</properties>
<!--
dataSource里面的字面值的优先级>外部的properties文件里面的属性的优先级>properties里面子节点的属性
-->
<properties resource="jdbc.properties"/>
3. typeAliases
<!--类别名,影响的是resultType-->
<!--不建议使用别名-->
<typeAliases>
<!--注册一个简写的类名,可以在其他mapper文件中引用-->
<!--不推荐使用,因为这种全限定名在mapper文件中,插件有提示,如此操作多此一举-->
<typeAlias type="com.ag.pojo.Student" alias="student"/>
<!--直接注册整个包,该包之下的所有类都生效,默认规则为简写类名-->
<!--规则是首字母小写的简写类名,实际上简写或原类名都能生效-->
<package name="com.ag.pojo"/>
</typeAliases>
<!-- 将namespace的值设置为DAO类对应的路径 -->
<mapper namespace="pojo">
<select id="listStudent" resultType="Student">
select * from mybatis_test
</select>
</mapper>
4. typeHandlers
用于转换数据类型,一般不需要额外添加,特殊情况特殊考虑
5. settings
默认配置一般友好
<!--一个配置完整的 settings 元素的示例如下:-->
<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"/>
<!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。-->
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
6. Mappers
<!-- 映射文件 -->
<mappers>
<!--不要写. 要写斜杠/-->
<!--第一种:通过路径方式引入XML文件-->
<!--<mapper resource="com/ag/mapper/StudentDao.xml"/>-->
<!--第二种:通过URL 协议:地址的方式引入-->
<!--<mapper url="file:///F:/IDEA_workspace/TomcatTest/src/main/resources/mapper/StudentDao.xml"/>-->
<!--第三种:通过接口的全限定名引入,必须保持接口与Mapper.xml在同包之下-->
<!--<mapper class="com.ag.StudentMmapper"/>-->
<!--第四种:引入一个包的方式,之后新建的mapper不需重新引入-->
<!--<package name="com.ag.mapper"/>-->
</mappers>
mybatis参数问题
单个基本或非基本数据类型
select * from student where sid = #{sid} and name = #{name}
#{}表达式里随便写,但建议写有意义的参数名
多个基本或非基本数据类型
默认的参数名称风格
Student queryBySidName(int sid,String name);
<select id="queryBySidName" resultType="Student">
-- select * from student where sid = #{arg0} and name = #{arg1}
select * from student where sid = #{param1} and name = #{param2}
</select>
推荐使用
Student queryBySidName(@Param("sid") int sid, @Param("name") String name);
<select id="queryBySidName" resultType="Student">
select * from student where sid = #{sid} and name = #{name}
</select>
单个JavaBean
默认通过JavaBean里面的属性的名称去引用,通过getter方法去获得这些值
select * from student where sid = #{sid} and name = #{name}
#{}表达式里必须写存在的属性名,不能随便写
Map
以map封装,则以键取值
多个JavaBean
原生
select * from girl where name = #{param1.name} and flower = #{param2.flower}
推荐
Girl queryByAB(@Param("a") A a, @Param("b") B b);
select * from girl where name = #{a.name} and flower = #{b.flower}
一组值传入(list集合)问题
使用步骤:
- 创建实体类
- 创建全局配置文件(名称不固定)
- 创建实体类对应的接口类
- 创建对应的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBL