源码地址
1、回顾mybatis的自定义再分析和环境搭建+完善基于注解的mybatis
2、mybatis的curd(基于代理dao的方式)
2.1模糊查询-两种不同的模糊查询
preparedstatement的参数占位符
statement对象的字符串拼接对象
2.2保存中的细节
<!--保存用户-->
<insert id="saveUser" parameterType="com.ha.domain.User">
<!--配置插入数据的id-->
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
INSERT into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday});
</insert>
3、myabtis中的参数深入及结果集的深入
3.1mybatis的常数
3.1.1 parameterTypee(输入类型)
3.1.2传递简单类型
3.1.3 传递pojo对象
mybatis 使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称
OGNL表达式:Object Graphic Navigation Language 对象图导航语言
它是通过对象的取值方法来获取数据,在写法上把get给省略了,比如我们获取用户的名称
类中的写法: user.getUsername();
OGNL表达式写法: user.username
问:mybatis中为什么能直接写username,而不用user?
答:在parameterType中已经提供了属性所属的类,所以此时不需要所以此时不需要写对像名mybatis
使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称
OGNL表达式:Object Graphic Navigation Language
对象 图 导航 语言
它是通过对象的取值方法来获取数据,在写法上把get给省略了,比如我们获取用户的名称
类中的写法: user.getUsername();
OGNL表达式写法: user.username
问:mybatis中为什么能直接写username,而不用user?
答:在parameterType中已经提供了属性所属的类,所以此时不需要所以此时不需要写对像名
3.1.4传递pojo包装对象
开发中通过poi传递查询条件,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件), 这时可以使用包装对象传递输入参数
Pojo类中包含pojo.
需求:根据用户名查询用户信息,查询条件放到 QueryVo的user属性中。
3.2 Mybatis的输出结果封装
3.2.1 resultType(输出类型)
tips: mysql数据库在win系统下区分大小写/linux系统严格区分大小写
属性名个数据库列名不一致 (可避免安全问题),如何封装?
方法1:取别名(执行效率高)
<select id="findAll" resultType="com.ha.domain.User">
SELECT * from user;
</select>
------------------------------------------------------->
<select id="findAll" resultType="com.ha.domain.User">
SELECT id as userId,username as userName,address as userAddress,sex as userSex,birthday as userBirthday from user;
</select>
方法2:resultMap (开发效率高)
<!--配置 查询结果的列名和实体类的属性名的对应关系-->
<resultMap id="userMap" type="com.ha.domain.User" >
<!--主键字段的对应-->
<id property="id" column="userId" />
<!--非主键字段的对应-->
<result property="userName" column="userName" />
<result property="userAddress" column="address" />
<result property="userSex" column="sex" />
<result property="userBirthday" column="birthday" />
</resultMap>
同时需要在对应的resultType 改为resultMap
<!--查询所有-->
<select id="findAll" resultMap="userMap">
SELECT * from user;
</select>
3.2.1.1 输出简单类型
3.2.1.2 输出pojo对象
3.2.1.2 输出pojo列表
4、mybatis中基于传统dao的方式2编写dao的实现类)——了解
4.1编写dao实现类Mybatis的执行过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pruY1eUJ-1627657332005)(https://cdn.jsdelivr.net/gh/hairlyOwl/photo@master/非常重要的一张图-分析编写dao实现类Mybatis的执行过程(1)].24l0ajqh2sv4.png)
4.2使用代理dao的分析
5、mybatis中的配置(主配置文件:SqlMapConfig.xml
properties标签
<!--配置properties
可以在标签内部配置连接数据库的信息,也可以通过属性引用外部配置文件信息
resource属性:
用于指定配置文件的位置,是按照类路径的写法,并且必须存在与类路径下
url属性:
是要求按照url的写法来写地址
URL: Uniform Resource Locator 统一资源定位符。可以唯一标识一个资源的位置。
它的写法
http://localhost:8080/mybatisserver/demo1servlet
协议 主机 端口 URI
URI: Uniform Resource Identifier 统一资源标识符,应用中唯一定位一个资源-->
<!--1.直接在标签内部配置-->
<!--<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>-->
<!--2.1 resource属性-->
<!--<properties resource="jdbcConfig.properties" />-->
<!--2.2 url属性-->
<properties url="file:///E:/ideawork/mybatisWK/day02_eesy_01mybatisCURD/src/main/resources/jdbcConfig.properties" />
typeAliases标签
<!--使用typeAliases配置别名,它只能配置domain中类的别名-->
<typeAliases>
<!-- typeAlias用于配置别名; type属性指定的是实体类全限定类名; alias 属性指定别名,当指定了别名就不再区分大小写-->
<!--<typeAlias type="com.ha.domain.User" alias="user" />-->
<!--用于指定配置别名的包,当指定之后,该包下的实体类都会注册别名,且类名是别名不再区分大小写-->
<package name="com.ha.domain"/>
</typeAliases>
mappers标签
<mappers>
<!--<mapper resource="com/ha/dao/IUserDao.xml" />-->
<!--package标签是用于指定dao接口所在的包,指定后就不需要写mapper,resource,或者class-->
<package name="com.ha.dao"/>
</mappers>