*轻量级,性能出色
*SQL和Java编码分开,功能边界清晰。Java代码专注业务逻辑,SQL语句专注数据
*能够与Spring很好的集成
1.Mybatis核心包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
2.MySQL驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.3</version>
</dependency>
3.junit单元测试
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
4.log4j日志
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
1.settings标签内
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="lazyLoadingEnabled" value="true"/>
2.properties标签:关联外部属性文件
<properties resource="jdbc.properties"/>
3.mappers标签:注册Mapper配置文件
<mapper resource="mappers/EmployeeMapper.xml"/>
<package name="com.atguigu.mybatis.mapper"/>
<environments default="development">
<!-- environment表示配置Mybatis的一个具体的环境 -->
<environment id="development">
<!-- Mybatis的内置的事务管理器 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<!-- 建立数据库连接的具体信息 -->
<property name="driver" value="${wechat.dev.driver}"/>
<property name="url" value="${wechat.dev.url}"/>
<property name="username" value="${wechat.dev.username}"/>
<property name="password" value="${wechat.dev.password}"/>
</dataSource>
</environment>
</environments>
1.select标签
resultType属性:指定封装查询结果的实体类类型
1.简单数据类型
<select id="selectCount" resultType="int">
SELECT count(*) from t_emp
</select>
2.Map类型
<select id="selectEmpNameAndMaxSalary" resultType="map">
select emp_name,max(emp_salary) from t_emp
</select>
3.实体类类型
<select id="selectEmpById" resultType="com.atguigu.mybatis.entity.Emp">
select emp_id ,emp_name,emp_salary from t_emp where emp_id=#{empId}
</select>
<select id="selectAll" resultType="com.atguigu.mybatis.entity.Emp">
select * from t_emp;
</select>
resultMap属性
1.映射实体类自身属性
<!--专门声明一个resultMap设定column到property之间的对应关系-->
<resultMap id="empMapResultMap" type="com.atguigu.mybatis.entity.Emp">
<id column="emp_id" property="empId"/>
<result column="emp_name" property="empName"/>
<result column="emp_salary" property="empSalary"/>
</resultMap>
<!--Emp selectWithResultMap(long empId)-->
<select id="selectWithResultMap" resultMap="empMapResultMap">
select emp_id ,emp_name,emp_salary from t_emp where emp_id = #{empId}
</select>
2.映射关联属性
<resultMap id="selectOrderWithCustomerResultMap" type="com.atguigu.mybatis.entity.Order">
<id column="order_id" property="orderId"/>
<result column="order_name" property="orderName"/>
<result column="customer_id" property="customerId"/>
<!-- 使用association标签配置“对一”关联关系 -->
<association property="customer" javaType="com.atguigu.mybatis.entity.Customer">
<result column="customer_id" property="customerId"/>
<result column="customer_name" property="customerName"/>
</association>
</resultMap>
<!--Order selectOrderWithCustomer(long orderId);-->
<!--关键词:association javaType-->
<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 order_id = #{orderId}
</select>
<resultMap id="selectCustomerWithOrderListResultMap" type="com.atguigu.mybatis.entity.Customer">
<id column="customer_id" property="customerId"/>
<result column="customer_name" property="customerName"/>
<collection property="orderList" ofType="com.atguigu.mybatis.entity.Order">
<result column="order_id" property="orderId"/>
<result column="order_name" property="orderName"/>
<result column="customer_id" property="customerId"/>
</collection>
</resultMap>
<!--Customer selectCustomerWithOrderList(long customerId);-->
<!--关键词:collection ofType-->
<select id="selectCustomerWithOrderList" resultMap="selectCustomerWithOrderListResultMap">
select c.customer_id,customer_name,order_id,order_name
from t_customer c left join t_order o ON c.customer_id = o.customer_id
where c.customer_id = #{customerId}
</select>
2.insert标签
<insert id="getGeneratedKeys" useGeneratedKeys="true" keyProperty="empId">
insert into t_emp(emp_name, emp_salary) values (#{empName},#{empSalary})
</insert>
3.update标签
<update id="updateEmp">
update t_emp set emp_name=#{empName},emp_salary=#{empSalary} where emp_id=#{empId}
</update>
4.delete标签
<delete id="deleteEmp">
delete from t_emp where emp_id=#{empId}
</delete>
#{}:将来变成?占位符
${}:将来拼接字符串
动态SQL存在的意义是为了解决拼接SQL语句字符串时的痛点问题。
<select id="selectEmpByCondition" resultType="com.atguigu.mybatis.entity.Emp">
select * from t_emp
<where>
<if test="empName != null">
or emp_name = #{empName}
</if>
<if test="empSalary > 800.00">
or emp_salary > #{empSalary}
</if>
</where>
</select>
<select id="selectEmpByConditionByTrim" resultType="com.atguigu.mybatis.entity.Emp">
SELECT emp_id,emp_name,emp_salary from t_emp
<trim prefix="where" suffixOverrides="and|or">
<if test="empName != null">
emp_name = #{empName} or
</if>
<if test="empSalary < 1000">
emp_salary <#{empSalary}
</if>
</trim>
</select>
<--批量插入多条数据-->
<insert id="insertEmpByBatch">
insert into t_emp(emp_name,emp_salary)
<foreach collection="empList" index="index" item="emp" open="values" separator=",">
(#{emp.empName},#{emp.empSalary})
</foreach>
</insert>
<--批量更新多条数据-->
<update id="updateEmpByBatch">
<foreach collection="empList" separator=";" item="emp" >
update t_emp set emp_name = #{emp.empName},emp_salary = #{emp.empSalary} where emp_id = #{emp.empId}
</foreach>
</update>
</mapper>
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
原文:https://www.cnblogs.com/luochenggui/p/14847597.html