MyBatis

尚硅谷mybatis

一.mybatis快速入门

使用xml配置实现。需要两个xml文件分别是

二.mybatis的基本使用

2.1mybatis配置文件的参数配置,sql语句中#{}(?占位符(推荐使用)) 和${}(是字符串拼接,可能引发sql注入问题)的区别

2.2数据输入

单值类型随便取名

Employee selectEmployee(Integer empId);
<select id="selectEmployee" resultType="com.atguigu.mybatis.entity.Employee">
  select emp_id empId,emp_name empName,emp_salary empSalary from t_emp where emp_id=#{empId}
select>

实体类型:取实体类名的属性,需要实体类有get方法
多值类型:1.用@Param注解起别名 2.用Mybatis默认的取名规则arg0开始
map类型:取map的键值对

2.3数据输出

sql语句默认返回int类型(操作影响的行数)

细节解释:
select标签,通过resultType指定查询返回值类型!
resultType = “全限定符 | 别名 | 如果是返回集合类型,写范型类型即可”

取别名:

<typeAliases>
  <typeAlias alias="Author" type="domain.blog.Author"/>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
typeAliases>

返回实体类型
1:取别名
2:开启驼峰映射(Java中 ClassPath =sql中 class_path)
返回map



<select id="selectEmpNameAndMaxSalary" resultType="map">
  SELECT
    emp_name 员工姓名,
    emp_salary 员工工资,
    (SELECT AVG(emp_salary) FROM t_emp) 部门平均工资
  FROM t_emp WHERE emp_salary=(
    SELECT MAX(emp_salary) FROM t_emp
  )
select>

返回List类型

自增长的主键回显

MyBatis_第1张图片
非自增长的主键维护
MyBatis_第2张图片

三.多表映射

根据ID查询订单,以及订单关联的用户的信息!
多对一的关系




<resultMap id="selectOrderWithCustomerResultMap" type="order">

  
  <id column="order_id" property="orderId"/>

  <result column="order_name" property="orderName"/>

  
  
  
  <association property="customer" javaType="customer">

    
    <id column="customer_id" property="customerId"/>
    <result column="customer_name" property="customerName"/>

  association>

resultMap>


<select id="selectOrderWithCustomer" resultMap="selectOrderWithCustomerResultMap">

  SELECT order_id,order_name,c.customer_id,customer_name
  FROM t_order o
  LEFT JOIN t_customer c
  ON o.customer_id=c.customer_id
  WHERE o.order_id=#{orderId}

select>

一对多的关系
查询客户和客户关联的订单信息!


<resultMap id="selectCustomerWithOrderListResultMap"

  type="customer">

  
  <id column="customer_id" property="customerId"/>

  <result column="customer_name" property="customerName"/>

  
  
  
  <collection property="orderList" ofType="order">

    
    <id column="order_id" property="orderId"/>

    <result column="order_name" property="orderName"/>

  collection>

resultMap>


<select id="selectCustomerWithOrderList" resultMap="selectCustomerWithOrderListResultMap">
  SELECT c.customer_id,c.customer_name,o.order_id,o.order_name
  FROM t_customer c
  LEFT JOIN t_order o
  ON c.customer_id=o.customer_id
  WHERE c.customer_id=#{customerId}
select>

此外可以在setting属性中开启驼峰映射

setting属性 属性含义 可选值 默认值
autoMappingBehavior 指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示关闭自动映射;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。 FULL 会自动映射任何复杂的结果集(无论是否嵌套)。 NONE, PARTIAL, FULL PARTIAL

我们可以将autoMappingBehavior设置为full,进行多表resultMap映射的时候,可以省略符合列和属性命名映射规则(列名=属性名,或者开启驼峰映射也可以自定映射)的result标签!

四.动态mysql

五.扩展

5.1批量映射(批量映射接口)

5.2PageHelper分页插件

5.3逆向工程(单表)

你可能感兴趣的:(java,spring,mybatis,java)