Mybatis框架是一个优秀的持久层框架,一个办ORM(对象关系映射)框架,
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集
MyBatis可以使用简单的XML或注解来配置和映射原生类型,
接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录
在mybatis中,${}和#{}的区别
#{}为参数占位符?,即sql预编译,对应的变量会自动加单引号,能够避免sql注入
${}为字符串替换,即sql拼接,不会自动拼接单引号,不能防止sql注入
mybatis中,resultType和resuitMap的区别
resultType 可以把查询到的结果封装到pojo中,但是查询到的数据库表的字段名必须uipojo类的属性 名一致
resultMap,运行查询到的字段与pojo的熟悉名不一致,但是需要result,ao将字段名与属性名对应起来,进行手动配置封装,将结果映射到pojo中,之选一对一和一对多查询
一对一:
改造pojo类

先使用id和result属性,映射order类的结果集,然后在使用association映射关联对象User的结果集
resultMap中 type属性 : 将结果映射到那个pojo类,不区分大小写
id为唯一字段,用于select语句定位
association:配置一对一属性
<resultMap type="order" id="orderUserResultMap">
<id property="id" column="id" />
<result property="userId" column="user_id" />
<result property="number" column="number" />
<result property="createtime" column="createtime" />
<result property="note" column="note" />
<!-- association :配置一对一属性 -->
<!-- property:order里面的User属性名 -->
<!-- javaType:属性类型 -->
<association property="user" javaType="user">
<!-- id:声明主键,表示user_id是关联查询对象的唯一标识-->
<id property="id" column="user_id" />
<result property="username" column="username" />
<result property="address" column="address" />
</association>
</resultMap>
<!-- 一对一关联,查询订单,订单内部包含用户属性 -->
<select id="queryOrderUserResultMap" resultMap="orderUserResultMap">
SELECT
o.id,
o.user_id,
o.number,
o.createtime,
o.note,
u.username,
u.address
FROM
`order` o
LEFT JOIN `user` u ON o.user_id = u.id
</select>
一对多查询
<resultMap type="user" id="userOrderResultMap">
<id property="id" column="id" />
<result property="username" column="username" />
<result property="birthday" column="birthday" />
<result property="sex" column="sex" />
<result property="address" column="address" />
<!-- 配置一对多的关系
property:填写pojo类中集合类类属性的名称
javaType:填写集合类型的名称
-->
<collection property="orders" javaType="list" ofType="order">
<!-- 配置主键,是关联Order的唯一标识 -->
<id property="id" column="oid" />
<result property="number" column="number" />
<result property="createtime" column="createtime" />
<result property="note" column="note" />
</collection>
</resultMap>
<!-- 一对多关联,查询订单同时查询该用户下的订单 -->
<select id="queryUserOrder" resultMap="userOrderResultMap">
SELECT
u.id,
u.username,
u.birthday,
u.sex,
u.address,
o.id oid,
o.number,
o.createtime,
o.note
FROM
`user` u
LEFT JOIN `order` o ON u.id = o.user_id
</select>