MyBatis复习笔记整理

又回头来复习了

还是得做做笔记,虽然麻烦还费时间,写了也不一定看。但是时间久了真的容易忘,特别是一些细节,所以还是做下笔记吧,,给自己加深加深印象,以后说不定还可能拿出来翻翻。
我做得很乱,给自己看的,如果要做精致要花的时间更多了,亏。
但是有强迫症又加了不少格式,还是花了时间 哈哈哈

MyBatis配置文件

在这里插入图片描述
约束全国统一 复制就行

<?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="conf/dbconfig.properties"></properties>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

	<typeAliases>
		<typeAlias type="com.atguigu.bean.Employee" alias="emp"/>
	</typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>

        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${db2.driver}"/>
                <property name="url" value="${db2.url}"/>
                <property name="username" value="${db2.username}"/>
                <property name="password" value="${db2.password}"/>
            </dataSource>
        </environment>
    </environments>

    <databaseIdProvider type="DB_VENDOR">
        <property name="MySQL" value="mysql"/>
        <property name="DB2" value="db2"/>
    </databaseIdProvider>

    <mappers>
        <!--  <mapper resource="EmployeeMapper.xml"/>
        <mapper resource="TAdsWhDbwh0004Mapper.xml"/>
        <mapper class="com.atguigu.dao.EmployeeMapperAnnotation"/>-->
        <package name="com.atguigu.dao"/>
    </mappers>
    

</configuration>

用eclipse的同学可以把mybatis的jar里的2个dtd文件拷贝出来,然后在eclipse的设置里在xml设置中添加进去,这样写标签时就有提示。(IDEA自带)
在这里插入图片描述

在这里插入图片描述

type换成URI,key就是dtd网址,上面Location点File System,选择刚拷出来的dtd文件在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • environments

environments用于配置环境,可以(多个)配置数据库连接信息,可以在<environments default="development">中切换不同的环境,比如(开发环境/正式环境)
transactionManager事务管理器 默认JDBC
dataSource数据库连接信息 连接类型一般是POOLED使用连接池

  • mappers

mappers标签是将mapper.xml映射文件注册到配置文件中。
resource就是用mapper.xml的路径地址,类路径下就可以省略路径,只写文件名即可, class就是用类的全类名指定。
mappers中的namespace命名空间:可以注册包下的所有跟接口同路径、同名的Mapper.xml,一般的做法是在资源路径下建立跟类同包名的路径,这样在java编译时他们会在一起
在这里插入图片描述

Mapper.xml映射文件

还是全国统一的约束
然后是mappernamespace名称空间
也就是用来指定当前这个xml文件是给哪个接口(类)用的。

select标签:

  • 声明一个查询语句, resultType声明返回值类型(这套是MyBatis自带的自动封装),可以将返回值封装为JavaBean、基础数据类型、 ListMap等等,还能配合一些注解实现简单的自定义 例如在接口的方法上@MapKey注解 指定返回值Map的key用哪个字段

  • 标签中间是写 SQL语句的 参数用井号大可号 #{}代替,这玩意好,是采用的填充参数,预编译SQL语句,可以防止 SQL注入,而${}不是预编译的,有面试喜欢问MyBatis#{}${}的区别,可以留个心眼记一下。

在这里插入图片描述

  • useGeneratedKeys配合keyProperty可以回显自增的id值。
    (当插入一条数据,idnull,数据库自增,数据插入完成后,我们需要得到这条记录对应的id,就可以使用这2个参数组合,获取到自增的id,并存入到返回值的属性中)
    在这里插入图片描述

ResultMap自定义封装返回值映射

在这里插入图片描述

  • resultMap的typeJavaBean的全类名,用于指定这个resultMap将返回的结果封装成啥类型

  • resultMap的id:给此resultMap命名用的,后面引用时写这个id即可

  • 以下用于指定resultMap如何进行封装:

  • id:对应数据库表中的主键列

  • colunm:对应数据库表中的普通列(非主键列)列名

  • property:对应JavaBean中的属性名

  • 其他的列如果和属性同名,或者符合驼峰命名规则,则可以不写,MyBatis也会自动封装。
    但是为了符合开发习惯和规范,还是要统一全部完整的写完所有列和属性的映射。(避免你同事打你

关联查询-级联属性封装

Employee对象新增dept属性,封装了员工所在的部门信息
在这里插入图片描述
Department类有2个属性
在这里插入图片描述
新增tbl_dept表:
在这里插入图片描述
数据库中新增dept_id字段:
在这里插入图片描述

给dept_id添加外键约束:

alter table tbl_employee add constraint fk_emp_dept
foreign key (dept_id) references tbl_dept(id)

写SQL语句 员工表左连接部门表:

select a.*,b.dept_name
from tbl_employee a
left join tbl_dept b
on a.dept_id = b.id

查询结果
在这里插入图片描述
给Mapper接口中新增查员工With部门方法:

public interface EmployeeMapperPlus {

	public Employee selectById(Integer id);
	
	public Employee selectWithDeptById(Integer id);
}

先编写xml中的resultMap封装返回信息:

	<resultMap type="com.atguigu.bean.Employee" id="MyEmpWithDept">
	<!-- type为JavaBean的全类名 id是给这个resultMap命名  -->
		<id column="id" property="id"/>
<!-- 		id标签指定主键和 property指定主键对应的属性名 -->
		<result column="last_name" property="lastName"/>
<!-- 		result封装非主键列和对应的属性名 -->
		<result column="gender" property="gender"/>
		<result column="email" property="email"/>
		<result column="dept_id" property="dept.id"/>
<!-- 		property用属性名.属性 将数据封装到类的属性中 -->
		<result column="dept_name" property="dept.deptName"/>
	</resultMap>

再编写select标签:

	<select id="selectWithDeptById" resultMap="MyEmpWithDept">
<!-- 	select标签 id为类中的方法名 resultMap为上面resultMap声明的id值 -->
		select a.*,b.dept_name
		from tbl_employee a
		left join tbl_dept b
		on a.dept_id = b.id
		where a.id = #{id}
<!-- 		SQL语句 记得添加where条件 -->
	</select>

写Java测试代码:

@Test
	public void test5() {
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class);
			Employee employee = mapper.selectWithDeptById(7);
			System.out.println(employee);
		} finally {
			openSession.close();
		}
	}

运行结果:
成功封装dept部门信息

Employee [id=7, lastName=李思, email=lisi@qq.com, gender=0, dept=Department [id=2, deptName=市场部]]

下一篇

这篇再写就有点太长了 咱们下回分解
下一篇:resultMap更多玩法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值