码迷,mamicode.com
首页 > 其他好文 > 详细

MyBatis-配置文件标签复习

时间:2020-03-10 14:21:05      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:style   wrapper   int   示例   mysql   width   efault   官方   ida   

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-配置文件标签复习

标签:style   wrapper   int   示例   mysql   width   efault   官方   ida   

原文地址:https://www.cnblogs.com/ianhuafeng/p/12455029.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!