-
mybatis
-
是一款优秀的持久层框架,用于简化JDBC开发的。
-
持久层:就是将数据保存到数据库的那层代码。
-
javeEE 三层架构,表现层,业务层,持久层。
-
框架
-
框架就是一个半成品软件,是一套可重用的,通用的,软件基础代码模型
-
在框架的基础之上构建软件编写更加高效,规范,通用,可扩展。
官网:http://mybatis.org/mybatis-3/zh/index.html
传递参数
-
SQL语句设置多个参数有三种方式
-
散装参数:需要使用@Param(Sql中参数占位符)
-
实体类封装参数
*只需要保证SQL中的参数名和实体类属性名对应上
-
map集合
* 只需要保证SQL中的参数名和map集合的键的名称对应上
-
案例
-
要完成的功能列表清单
-
查询
*查询所有数据
*查看详情
*条件查询
-
-
添加
-
修改
*修改全部字段
*修改动态字段
-
删除
*删除一个
*批量删除
总结
-
Mybatis完成操作需要几步?
三步:编写接口方法-->编写SQL-->执行方法
条件查询
-
查询-多条件-动态查寻
-
SQL语句会随着用户的输入或者外部的变化而变化,我们称之为动态sql。
-
Mybatis对动态SQL有很强大的支撑
*if
*choose(when,otherwise)
*trim(where,set)
*foreach
设置字符集
-
setting--->Editor-->File Encodings 改三处:
*Global Encoding
*Project Encoding
*Default Encoding
-
具体
useUnicode=true&characterEncoding=UTF-8"
mybatis 参数传递
-
MyBatis接口方法中可以接收各种各样的参数,mybatis底层
对于这些参数进行不同的封装处理方式
*单个参数
-
POJO类 :直接使用,属性名和参数占位符名称一致
-
Map集合:直接使用,键名 和参数占位符名称一致
-
Collection: 封装为Map集合 @Param
map.put("arg0",collection集合)
map.put("collection",collection集合)
-
List @Param
map.put("arg0",list集合)
map.put("collection",list集合)
map.put("li'st",list集合)
-
Array:封装为Map集合 @Param
map.put("arg0"数组)
map.put("array",组)
-
其它:直接使用
*多个参数 @Param
封装为Map集合,可以使用@Param 注解,替换掉Map集合中arg键名
默认键名 :map.put("arg0",参数值1)
map.put("param1",参数值1
map.put("arg1",参数值2)
map.put("param2",组参数值2
*总结:建议使用@Param 注解来修改Map集合中的默认键名,并使用修改后的名称来获取值,这样可读性更高。
总结代码
*映射文件:重要
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yang.mapper.BrandMapper">
<!--发现一个问题:
数据库的表字段和实体类的属性不一致,导致不能完成自动封装
解决方法2种: *起个别名 将不一致的名字起别名
缺点:每次都得写
*写个sql片段
缺点:不灵活
*resultMap:
* 定义<resultMap>标签
* 要将<select>标签中的<resultType>标签替换
-->
<!--
id:唯一标识
type:映射的类型,支持别名
-->
<resultMap id="brandResultMap" type="brand">
<!--
<resultMap>标签下2个:
<id>:主键的字段的映射
<column> :表的列名
<property>:实体类的属性名
<result>: 完成一般字段的映射
<column> :表的列名
<property>:实体类的属性名
-->
<result column="brand_name" property="brandName"></result>
<result column="company_name" property="companyName"></result>
</resultMap>
<select id="selectAll" resultMap="brandResultMap">
select *
from tb_brand;
</select>
<!--sql片段
<sql id="brand_column">
id, brand_name as brandName,company_name as companyName,ordered,description,status
</sql>
//查询所有
<select id="selectAll" resultType="brand">
select
<include refid="brand_column"/>
from tb_brand;
</select>-->
<!--别名-->
<!-- <select