自己Mybatis的复习整合

Mybatis 的Mapper动态代理开发。
一、首先,需要在res下面新建几个包,包名分别为mapper,model(pojo),test,新建一个xml文件,名为sqlMapconfig。
二、目录:在包下面建立相应的文件。
1.mapper,这一个类别相当于dao+daoimpl层,里面包含“表名”mapper.java+“表名”mapper.xml两个文件,用于实现数据的增删改查。
2.model层是数据库中表的信息,后面可用逆向工程直接生成,里面还可以包含包装类QueryVo,用于数据的查询。
3.测试类是编写一个Junit测试来实现对数据库数据的简单查询。
4.sqlMapconfig,用于连接数据池,用来注入mapper文件所在位置。

三、详解
1.mapper
拿用户订单举例。
UserMapper.java是一个接口,里面是一些抽象方法,类似于dao层示例

UserMapper.xml文件是将这些方法实现,相当于Dao.Impl层,但是又不完全是,因为它需要遵循四个原则,见上图,只有名称相同了,才能进行动态代理开发。
在编写xml文件之前,需要给定命名空间namespace,用于隔离sql,还有一个很重要的作用,后面会讲
xml文件的头部信息:<?xml version="1.0" encoding="UTF-8" ?>

命名空间: ,值就是dao层下面的java文件的URL

xml文件中有很多的标签,<select><delete>等,都对应了相应的数据库操作,拿最简单的查询来说吧,根据用户ID查询用户,UserMapper.java中的方法名是:
public User findUserById(Integer id);   那么xml文件来实现这个方法的标签就应该如下写:
 <select id="findUserById" parameterType="Integer" resultType="model.User">
	select * from user where id=#{v}
</select>
其中, id要和java文件中的方法名相同,第二,parameterType要和java文件中的入参类型相同,最后,返回值是一个User对象。注意,如果返回值是对象,就要指明对象文件的位置所在.
下面是动态sql的信息:
	其中sql片段要在前面做好定义,在标签中使用,采用include标签,
		<!--sql 片段  -->
		<sql id="select">select * from user</sql>
		上面就是一个简单的sql片段
		这是where if标签和foreach标签的使用
		 <!-- 根据用户姓名和性别动态查找用户 --> 
 <select id="selectUserBySexAndName" parameterType="User" resultType="User">
 	<include refid="select"></include>  <!-- 引用前面的sql片段-->
 	<where >
 	 		<if test="sex!=null and sex!=''" >
 			sex=#{sex}
 		</if>
 	 		<if test="username!=null and username!=''" >
 			and username=#{username}
 		</if>	
 	</where>
 </select>
 <select id="selectUserByIds" parameterType="QueryVo" resultType="User">
 	<include refid="select"></include>
 	<where>
 		<!-- 如果换用另外两种方法,idList就要换成array和list -->
	 	<foreach collection="idList"  item="id" open="id in (" close=")" separator=","> 
	 			#{id}
	 	</foreach>
 	</where>
 </select>

idList是QueryVo里面定义的,QueryVo示例:在这里插入图片描述

如果你需要通过QueryVo来查询,就要在里面定义好类型和变量,如果通过list查询所有信息,就要定义List idList;并且生成set和get方法。标签的入参属性改为QueryVo。
2.model
里面就是数据库的一些基本信息,没什么好说的,见下图:
在这里插入图片描述

3.test
test里面是对我们写的方法的调用和测试,先看例子:根据多个id查询用户:
在这里插入图片描述

前面五行是照常写的,后面建一个list集合,添加数据,然后set到波里面,通过实现类userMapper来调用当中的方法实现查询,最后输出。

附:sql语句的写法,一般写法,select * from user where id=#{v} ,里面的v可以随意写,特殊情况,select * from user where username like ‘%${value}%’,
insert: insert into user (username,birthday,sex,address)
value(#{username},#{birthday},#{sex},#{address})
update:update user
set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
where id=#{id}
在java中用?表示的,都要用 #{内容} 来代替。

猜你喜欢

转载自blog.csdn.net/StreamlineWq/article/details/82898886