Mybatis(一)

Mybatis使用过程:
  • 1.创建sql映射文件
  • 2.将sql映射文件注册到全局配置文件
  • 3.根据全局配置文件得到SqlSessionFactory,使用SqlSession工厂获取到SqlSession对象来执行crud,使用sql id来告诉mybatis执行那个sql
使用mapper接口,推荐使用接口式编程。mapper是个代理对象。获取接口的实现类对象,会为接口自动创建一个代理对象,代理对象执行crud。
mapper = sqlSession.getMapper(xxxMapper.class);
mapper.getEmpById();

mybatis配置文件可以使用properties标签来引入外部properties配置文件的内容,resource:引入类路径下的资源、URL:引入网络路径或磁盘路径下的资源

数据库字段名和JavaBean字段名大小写不匹配时可以设置别名或者开启驼峰命名

<typeAliases>
	//typeAlias为某个Javabean的全类名起别名
	//type指定要起别名的类型全类名,默认别名是类名小写
	//alias可指定新的名字
 	<typeAlias type="com.mybatis.bean.User" alias="user"/>
	//package为某个包下的多个Javabean起别名,默认类名小写
	//也可以使用@Alias注解为某个类型指定别名
	<package name="com.mybatis.bean"/>
</typeAliases>
Mybatis 多条记录封装成一个map时,可以使用resultMap:
  • @MapKey(“id”)加在bean主键上指定封装map时使用哪个属性作为map的key
  • 使用resultMap标签自定义某个javabean的封装规则
<resultMap type="com.mybatis.bean.Employee" id="myEmp">
	//指定主键列的对应规则
	//column="id":指定哪一列是主键列
	//property="id":指定user的哪个属性封装id这一列数据
	<id property="id" column="id"/>
	//普通列
	<result property="name" column="last_name"/>
	<result property="email" column="email"/>
	<result property="gender" column="gender"/>
	//支持级联属性封装
	<result property="dept.departmentName" column="dept_name"/>
</resultMap>
//查询时使用自己定义的封装规则
<select id="getEmpById" resultMap="myEmp">
</select>
  • 也可以使用association定义单个对象的封装规则
<resultMap type="com.mybatis.bean.Employee" id="myEmp">
	<id property="id" column="id"/>
	<result property="name" column="uName"/>
	//property指定哪个属性是联合的对象
	//javaType指定这个属性对象的类型
	<association property="dept" javaType="com.mybatis.bean.Department">
		<id column="did" property="id"/>
		<result column="dept_name" property="departmentName"/>
	</association>
</resultMap>
  • association进行分布查询
    1.先按照员工id查询员工信息
    2.根据查询员工信息中的d_id值去部门表查出部门信息
    3.部门设置到员工中
<resultMap type="com.mybatis.bean.Employee" id="myEmpByStep">
	<id column="id" property="id"/>
	<result column="last_name" property="lastName"/>
	//association定义关联对象的封装规则
	//select表明当前属性是调用select指定的方法查出的结果
	//column指定将哪一列的值传给这个方法
	//流程:使用select指定的方法(传入column指定的这列参数的值)查出对象,并封装给property指定的属性
	<association property="dept"
		select="com.mybatis.dao.DepartmentMapper.getDeptById"
		column="d_id">
	</association>
</resultMap>
<select id="getEmpByIdStep" resultMap="MyEmpByStep">
	select * from tbl_employee where id = #{id}
</select>

可以使用延迟加载:
Employee包含dept,我们每次查询Employee对象的时候,都将一起查询出来(执行两条sql语句),要想部门信息在我们使用的时候再去查询,则在mybatis配置文件加两个配置

<setting>
	//开启懒加载模式,只有在用到的时候才去加载
	<setting name="lazyLoadingEnabled" value="true"/>
	//将自动全部加载关闭
	<setting name="aggressiveLazyLoading" value="false"/>
</setting>

collection定义关联集合类型的属性的封装规则

<resultMap type="com.mybatis.bean.Department" id="myDept">
	<id column="did" property="id"/>
	<result column="dept_name" property="departmentName"/>
	//ofType指定集合里面元素的类型
	<collection property="emps" ofType="com.mybatis.bean.Employee">
		//定义这个集合中元素的封装规则
		<id column="eid" property="id"/>
		<result column="last_name" property="lastName">
		<result column="email" property="email"/>
	</collection>
</resultMap>
//扩展:分布查询将多列的值传递过去:
		将多列的值封装map传递:
		column="{key1=column1,key2=column2}"
		fetchType="lazy":表示使用懒加载
				    eager:立即加载
<collection property="emps"
	select="com.mybatis.dao.EmployeeMapper.getEmpsByDeptId"
	column="{deptId=id}" fetchType="lazy">
</collection>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值