1、环境的搭建
1、创建maven和resources的环境
-
第一步:在环境变量中设好maven的路径:如图
-
第二步:在maven路径的conf文件夹下打开settings.xml,然后在55行和146行分别设置本地仓库以及镜像,如图:
-
配置IDEA中Maven的环境
什么是mybatis?
mybaits的别名
当类的地址太长或者其它的原因,可以在mybatis全局环境(mybatis_config.xml)配置,对该地址进行取别名:
<!--类的别名配置区域-->
<typeAliases>
<!--
设置com.sc.pojo.Dept的别名为dept,通过dept代替它。
通过设置别名emp代替com.sc.pojo.Emp
-->
<typeAlias type="com.sc.pojo.Dept" alias="dept" />
<typeAlias type="com.sc.pojo.Emp" alias="emp" />
<typeAlias type="com.sc.pojo.EmpDept" alias="empDept" />
</typeAliases>
mybatis的映射配置:
在mybatis的全局环境(mybatis_config.xml)配置中设置,
<!--配置映射文件-->
<mappers>
<!-- 把映射文件放到配置映射文件中 -->
<mapper resource="mappers/DeptMapper.xml" />
<mapper resource="mappers/EmpMapper.xml" />
</mappers>
</configuration>
mybatis的一对一,一对多,多对一,多对多
一对一:查询的数据库中的一个字段和对应类中的一个属性相对应,当类中的属性名和数据库中的字段名不匹配时,就需要进行一一映射。
<!--
当数据库列名和类的属性名不一致,需要使用resultMap,
来实现映射关系,将类的属性no映射到数据中deptno,name映射
到数据库中deptname;
type表示返回的类型问题,这里dept的表示是别名。
-->
<resultMap id="deptMapper" type="dept">
<!--
id用来配置主键,column是数据库表中列的名字,
property是类中成员变量的名字,
-->
<id column="deptno" property="no" />
<!--
其他的字段使用的result
-->
<result property="name" column="dname" />
</resultMap>
<select id="getDepts2" resultMap="deptMapper">
select * from dept
</select>
一对一的情况下,如果类中的属性名name和数据库中的字段名dname不一致,要接收数据库的字段dname的
数据,就需要进行resultMap映射结果到类名的属性名name上。
一对多:在查询中,一个主键关联了多个外键,通过这个主键值获取所有与之有关外键的信息,这样就是属于一对多的情况下,
DeptMapper.xml中的代码:
<!--
多表查询:
多表查询利用了结果映射来实现多表查询。
在dept表中拥有empSet的对象字段名,通过empSet对象可以接收到在
另一张表中查询到的所有数据。
在column="deptno" 中,它对应dept表中的deptno
来匹配emp表中的数据,
select表示需要映射的需要执行的地址,在某个.xml中namespace="com.sc.pojo.Emp"下
找到getEmpsByDeptno的数据。
<collection property="empSet" column="deptno"
select="com.sc.pojo.Emp.getEmpsByDeptno">
</collection>
-->
<resultMap id="deptMapper3" type="dept">
<id column="deptno" property="no" />
<result property="name" column="dname" />
<collection property="empSet" column="deptno"
select="com.sc.pojo.Emp.getEmpsByDeptno">
</collection>
</resultMap>
<select id="getDept2" resultMap="deptMapper3">
select * from dept
</select>
/************************************************************************/
/* 这是多对一的情况,它的返回值是dept类型,它放置的位置是dept*/
<resultMap id="deptMapper4" type="dept">
<id column="deptno" property="no" />
<result property="name" column="dname" />
</resultMap>
<select id="getDeptByNo" parameterType="int" resultMap="deptMapper4">
select * from dept where deptno = #{deptno}
</select>
多对一:查询语句,如果需要实现多个外键关联另一张表中的主键,那么通过该外键获取到主键的所有信息,情况如下显示:
/* 这是是实现了一对多的代码,它是通过传递过来的参数查询语句,他返回的类型是emp,它放置的位置是empSet字段*/
<select id="getEmpsByDeptno"
parameterType="int" resultType="emp">
select * from emp where deptno = #{deptno}
</select>
/*****************************************************/
<!--
<association property="dept" column="deptno"
select="cad.getDeptByNo" />
association表示映射,多行数据对应单行数据进行使用的,
当一个部门对应多个员工,通过员工来查询部门表时,
使用映射关系,association。这个映射关系可以通过column
的值传递到需要识别的表上对应匹配信息,其中deptno是emp表
中的字段信息。
-->
<resultMap id="empMapper" type="emp">
<association property="dept" column="deptno"
select="cad.getDeptByNo" />
</resultMap>
<select id="getEmpByName" resultMap="empMapper"
parameterType="string">
select * from emp where ename like
concat('%',concat(#{ename},'%'))
</select>