mybatis
--------------------------------------------------------------------------------------------------------
一、什么是数据持久化
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。
二、什么是ORM 《==数据持久化技术
ORM即对象/关系映射,是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,
并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。
三、MyBatis环境搭建的基本步骤《==数据持久化框架
1.下载jar包
2.部署jar包
3.编写MyBatis核心配置文件
4.创建实体类
5.创建DAO接口
6.创建SQL映射文件
7.编写测试类
四、Mybatis的三个基本要素是什么
1.核心接口和类
2.MyBatis核心配置文件(mybatis-config.xml)
3.SQL映射文件(mapper.xml)
五、SQLsession有哪两种使用方式
1.通过SqlSession实例来直接执行已映射的SQL语句。
2.基于mapper接口方式操作数据。
六、在mybatis-config.xml中哪个元素时配置类型别名的
在typeAliasses元素中配置类型别名
面试题:
mybatis执行流程:
1.加载配置
2.解析sql
3.sql的执行
4.结果映射
------------------------------------------------------------------------------------------------------------------------------------------------------
一、列举下SQL映射文件的几个顶级元素
1.mapper-映射文件的根原色节点,只有一个属性namespace(命名空间),作用如下:
用于区分不同的mapper,全局唯一
绑定DAO接口,即面向接口编程
2.cache-配置给定命名空间的缓存
3.cache-ref-从其他命名空间引用缓存配置
4.resultMap-用来描述数据库结果集和对象的对应关系
5.sql-可以重用SQL块,也可以被其他语句引用
6.insert-映射插入语句
7.update-映射添加语句
8.delete-映射删除语句
9.select-映射查询语句
二、resultType和resultMap的区别是什么?
1.resultType:
resultType直接表示返回类型,包括基本数据类型和复杂数据类型。
2.resultMap:
resultMap则是对外部resultMap定义的引用,对应外部resultMap的id,表示返回结果映射到哪一个resultMap上。
它的用用场景一般是:数据库字段信息与对象属性不一致或者做复杂的联合查询以便自由控制映射结果。
三、MyBatis多参数入参如何处理?有几种方式?
1.利用参数出现的顺序#{param1}#{param...}
2.传参时利用注解的方式@param(...),映射文件中的参数必须和注解的名字一致。例---@param("name")==>#{name}
3.使用map需要map的键和映射文件的#{内容}里面的内容一致
4.把参数封装在Javabean中,传递JavaBean对象作为参数,映射文件中的#{内容}必须和JavaBean中的字段保持一致
5.可以利用数字,多参数情况下,映射文件中的#{内容}可以使用参数顺序给数字(1...)
四、mapper元素的namespace属性的作用是什么?
1.用于区分不同的mapper,全局唯一
2.绑定DAO接口,即面向接口编程
五、不同的SQL映射文件,元素的id必须不同吗?
不同namespace,ID是可以重复
六、谈谈你对association和collection元素的理解
association:
映射到JavaBean的某个“复杂类型”属性,比如JavaBean类,
即JavaBean内部嵌套一个复杂数据类型属性,这种情况就数据复杂类型的关联。association处理的是一对一的关联关系。
collection:
和association几乎一样,collection是映射到JavaBean中的“复杂数据类型集合”
------------------------------------------------------------------------------------------------------------------------------------------------------
一、列举下实现动态SQL的主要元素有哪些?
1.if
2.where
3.trim
4.set
5.foreach
二、trim元素的主要功能是什么?
prefix: 前缀---在SQL语句前添加指定字段
suffix: 后缀---在SQL语句后添加指定字段
prefixOverrides:---前缀覆盖,指定去除掉SQL前的属性
suffixOverrides:---后缀覆盖,指定去除掉SQL后的属性
三、set元素主要用在什么操作上?
set:主要用于update修改上,用于添加set字段和去除最后一个都逗号,可与if一块使用
四、有in语句查询的时候需要使用哪个元素?
需要使用foreach
五、当List或者数组对象入参的时候,MyBatis是如何处理的?
通过使用foreach标签,遍历传进来的参数,数组没有别名的情况使用array,List在没有别名的情况使用list。
---------------------------------------------------------------------------------------------------------
mybatis-config.xml
--------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 引入外部文件 -->
<properties resource="database.properties" />
<settings>
<!-- 日志文件 -->
<setting name="logImpl" value="LOG4J"/>
<!-- 全局缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 类别名 -->
<typeAliases>
<package name="cn.easybuy.entity" />
</typeAliases>
<!-- 运行环境 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${user}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 映射 -->
<mappers>
<!-- 分类表的xml -->
<mapper resource="cn/easybuy/dao/mapper/ProductCategorymapper.xml" />
<!-- 咨询表的xml -->
<mapper resource="cn/easybuy/dao/mapper/EasybuyNewsmapper.xml" />
<!-- 订单表的xml -->
<mapper resource="cn/easybuy/dao/mapper/Ordermapper.xml" />
<!-- 订单详情表的xml -->
<mapper resource="cn/easybuy/dao/mapper/OrderDetailmapper.xml" />
<!-- 商品表的xml -->
<mapper resource="cn/easybuy/dao/mapper/Productmapper.xml" />
<!-- 用户地址表的xml -->
<mapper resource="cn/easybuy/dao/mapper/UserAddressMapper.xml" />
<!-- 用户表的xml -->
<mapper resource="cn/easybuy/dao/mapper/Usermapper.xml" />
<!-- 我的订单的xml -->
<mapper resource="cn/easybuy/dao/mapper/Wodemapper.xml" />
</mappers>
</configuration>
-------------------------------------------------------------------------------------
mapper.xml映射文件
-------------------------------------------------------------------------------------
<!-- 头部 -->
<?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">
<!-- 写入查询、添加、修改、删除语句 -->
<!-- mamespace必须和映射的接口的全限定名相同 -->
<mapper namespace="cn.easybuy.dao.EasybuyNewsDao">
<!-- id和映射的方法名相同 -->
<!-- resultType是返回值类型,没有配置类别名时,必须是全限定名 -->
<select id="selectqb" resultType="EasybuyNews">
SELECT * FROM easybuy_news LIMIT 5
</select>
<!-- 添加方法 -->
<insert id="方法名"></insert>
<!-- 修改方法 -->
<update id="方法名"></update>
<!-- 删除方法 -->
<delete id="方法名"></default>
</mapper>
----------------------------------------------------------------------------------------
database.properties外部连接数据库文件
---------------------------------------------------------------------------------------
driver=com.mysql.jdbc.Driver
#å¨åmysqlä¼ éæ°æ®çè¿ç¨ä¸ï¼ä½¿ç¨unicodeç¼ç æ ¼å¼ï¼å¹¶ä¸å符é设置为utf-8
url=jdbc:mysql://localhost:3306/easybuy?useUnicode=true&characterEncoding=utf-8
user=root
password=123456
---------------------------------------------------------------------------------------
where的作用,用于在条件判断的前面添加where关键字,如果手动写where再使用该标签会报错,也用于去除首个and或者or
用于判断传入的字段,假如传入的是id
<where>
<if test="id != null and id != 0">
and id = id
</if>
</where>
trim的作用:
prefix: 前缀---在SQL语句前添加指定字段
suffix: 后缀---在SQL语句后添加指定字段
prefixOverrides:---前缀覆盖,指定去除掉SQL前的字符或属性字段
suffixOverrides:---后缀覆盖,指定去除掉SQL后的字符或属性字段
<trim prefix="where" suffix="" prefixOverrides="and | or" suffixOverrides=",">
<if test="id != null and id != 0">
and id = id
</if>
</trim>
set:主要用于update修改上,用于添加set字段和去除最后一个都逗号,可与if一块使用
<set>
<if test="id != null and id != 0">
and id = id
</if>
</set>
foreach的作用: 循环传入进来的数组、集合、Map
collection: 传入进来的参数---如果在没有别名的情况下《==》数组使用array代替,List使用list代替,Map使用主键
item: 迭代部分
open:头部什么符号包裹
separator: 数据之间什么间隔
close: 尾部用什么包裹
<foreach collection="sz" item="all" open="(" separator="," close=")">
#{all} <!-- 展示数据 -->
</foreach>