MyBatis-配置文件标签复习
Posted ianhuafeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis-配置文件标签复习相关的知识,希望对你有一定的参考价值。
1.MyBatis全局配置
以下标签均在父标签Configuration中
1.<properties resource="jdbc.conf"></properties> 引入外部文件文件 1.resource:从类路径引入(只有spring中才需要加上:classpath) 2.url:从磁盘路径或者网络路径引入
2.<!-- settings这是MyBatis中极为重要的调整设置,他会改变MyBatis的运行行为 -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
可以在MyBatis官方查询相关设置,此处只截取一部分
3.<!-- 类型别名,为常用的类型(JavaBean)起别名 --> <typeAliases> <!-- typeAlias:就是为一个JavaBean起别名,别名默认就是类名(不区分大小写),也可以自己指定 --> <typeAlias type="com.indi.bean.Employee" alias="Emp"/> <!-- 批量起别名;name="指定包名,默认别名就是类名"--> <package name="com.indi.bean"/> </typeAliases>
如果在批量的时候还想起别名,就用@Alias去类上标注解,不过推荐还是用全类名
4.<!-- environment 指定环境的id, environments 使用default指定id,使用哪一个环境,实现多个环境之间的切换-->
<environments default="development"> <environment id="development"> </environment> </environments>
5.Configuration中的标签也有先后顺序的,从上到下,一次摆放
从上到下,依次是:properties,setting,typeAliases,typeHandlers,objectFactory,objectWrapperFactory,
reflectorFactory,plugins,environments,databaseidProvider,mappers
6.<!-- mybatis用来考虑数据库移植的,比如可以在select上加一个属性databaseid指定数据库名称 --> <databaseIdProvider type="DB_VENDOR"> <!-- name:数据库厂商标识,value:给表示取一个好用的名称 --> <property name="mysql" value="mysql"/> <property name="Oracle" value="orcl"/> </databaseIdProvider>
7. <mappers> <!-- resource:在类路径下找sql映射文件 class:直接引用接口的全类名,但是将xml放在和dao接口同目录下,而且文件名和接口名一致
即需要把xml文件放到接口的目录下,或者在resource目录下建一个和类一样路径的包 url:引用网络和本地文件 --> <mapper resource="MyMapper.xml"/>
<!-- 当文件非常多时,一个个mapper注册太麻烦,直接扫描一个包,这种情况尤其针对接口名和文件名在一个
目录下,即src文件夹下的包中的接口对应resource文件夹下相同包中的映射文件-->
<package name="com.indi"/> </mappers>
class的第二种用法,不写映射文件,直接在接口上标注相应的标签,然后class指向该接口的全类名(示例如下)
public interface MyMapper {
@Insert("insert into t_employee values(#{id},#{empname},#{gender},#{email})")
void insertEmp(Employee emp);
}
小总结:注解和xml相结合,简单的用注解,复杂的用xml,因为复杂的一般不去改动
2.映射配置
1.获取自增属性
<!-- 让MyBatis自动的将自增id赋值传入给插入的Employee对象的id属性
useGeneratedKeys="true" : 原生jdbc获取自增主键的方法
keyProperty="id": 将刚才的自增的id封装给哪个属性-->
<insert id="insertEmp2" useGeneratedKeys="true" keyProperty="id">
insert into t_employee(empname,gender,email) values(#{empname},#{gender},#{email})
</insert>
2.获取非自增长主键id
<!-- public int insertEmp3(Employee employeeid)--> <insert id="insertEmp3"> <!-- 查询主键 order="BEFORE": 载核心sql语句之前先运行一个查询sql查到id,将查到的id赋值给JavaBean的某一个属性 --> <selectKey order="BEFORE" resultType="integer" keyProperty="id"> select max(id)+1 from t_employee </selectKey> </insert>
3.接口方法多个参数的值的获取问题
1. 单个参数:
基本类型: 取值:#{随便写}
传入POJO: 取值 #{pojo的属性名}
2.多个参数:
public Employee getEmpByIdAndEmpName(Integer id,String empName)
取值:#{参数名}是无效了
可用: 0,1(参数的索引)或者param1,param2(第几个参数paramN),参数的实际标识为 [0,1,param1,param2]
原因:只要传入了多个参数:mybati会自动的将这些参数封装在一个map中:
封装时使用的key就是参数的索引和参数的第几个表示
Map<String,Object> map = new HashMap<>();
map.put("1",传入的值);map.put("2",传入的值)
#{key}就是从这个map中取值
3,@Param:为参数指定key,命名参数,我们以后也推荐这么做;
我们可以告诉mybatis,封装参数map的时候别乱来,使用我们指定的key
示例:接口中方法:
public Employee getEmpByIdAndEmpName(@Param("id")Integer id,@Param("empName")String empName)
4.传入map,我们自己封装map,将多个要使用的参数封装起来,取值:#{key}
扩展:多个参数,自动封装map
method(@Param("id")Integer id,String empName,Employee employee);
Integer id -> #{id}
String empName -> #{param2}
Employee employee中的email -> #{param3.email}
4.#和$的区别
实际在MyBatis中,两种取值方式:
#{属性名}:是参数预编译的方式,参数的位置都是用?替代,参数都是后来预编译进去的,安全,不会有sql注入
${属性名}:不是参数预编译,而是直接取到值,然后和sql语句进行拼串,不安全
$使用场景,比如我当前要查询的表名不确定,要从参数中动态获取,此时就可以使用$,直接拿到然后拼串
sql语句中,只有参数位置是支持预编译的
5.参数取值规则
#{key}取值的时候可以设置一些规则:
id=#{id,jdbcType=INT}
javaType,jdbcType,mode,numericScale,resultMap,typeHandler
只有jdbcType才可能是需要被指定的
默认不指定jdbcType:mysq没问题,oracle没问题
万一传入的数据是null,mysql插入null没问题,oracle不知道null到底是什么类性
6.返回一个集合
<!-- public List<Employee> getAllEmps()-->
<!--resultType="" 如果是返回集合,就写集合里面的元素的类性-->
<select id="getAllEmps" resultType="com.indi.bean.Employee"></select>
7.<!--查询返回一个map-->
<!-- public Map<String,Object> getEmpByIdReturnMap(Integer id)-->
<select id="getEmpByIdReturnMap" resultType="map">
select * from t_employee where id=#{id}
</select>
8.<!--查询多个返回一个map;查询多个情况下,集合里面写元素类型-->
/**
*使用@MapKey注解,让id字段作为封装map的key,value就是这条记录封装好的对象
*/
@MapKey("id")
public Map<Integer,Employee> getAllEmpsReturnMap()
<!- public Map<Integer,Employee> getAllEmpsReturnMap()->
<select id="getAllEmpsReturnMap" resultType="com.indi.bean.Employee">
select * from t_employee
</select>
以上是关于MyBatis-配置文件标签复习的主要内容,如果未能解决你的问题,请参考以下文章