1. 常用标签介绍
1.1 mybatis配置文件的标签
Properties
resource: 直接可以获取类路径
url: 指定文件的绝对路径。
方式一:
<properties>
<property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/test"/>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="root"/>
</properties>
方式二:
<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>
typeAliases
<typeAliases>
<!-- 单个别名定义 -->
<typeAlias alias="user" type="com.tledu.zrz.pojo.User"/>
<!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) -->
<package name="com.tledu.zrz.pojo"/>
<package name="其它包"/>
</typeAliases>
Mappers属性
Mappers使我们所说的映射器,用于通过mybatis配置文件去找到对应的mapper文件
有三种用法
Resource
如:<mapper resource="com/tledu/mjw/mapper/UserMapper.xml" />
class
使用 mapper 接口类路径
<mapper class="com.tledu.mjw.mapper.UserMapper"/>
此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。
Package
注册指定包下的所有 mapper 接口
如:<package name="com.tledu.zrz.mapper"/>
此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。
1.2 Mapper.xml sql标签介绍
取值属性:
#{} 取值特点:会默认将获取值加单引号,可以防止sql注入
${} 取值特点:直接将值取出不会加引号,可能会出现sql注入的风险
parameterType
作用:用来接收出入参数的类型
resultType
作用:用来设置返回数据的数据类型
resultMap
作用:如果在表中的字段与接收对象的属性名不一致时,可以通过定义resultMap来实现映射。
2. Junit 单元测试
作用:实现局部多个不同模块的快速测试
第一步:导包
junit.jar hamcrest-core.jar
第二步:直接在要测试的方法上加@Test注解
3. 分页
分页需要的参数:
cpage:当前页
PageSize: 分页单位
totalPage:总页数
totalCount:总条数
start: 起始值= (cpage-1) * pageSize;
核心sql: limit start,pageSize;
Map map = new HashMap();
map.put(“start”,start);
map.put(“pageSize”,pageSize);
Select * from t_user limit #{start},#{pageSize}
4. 模糊查询
select CONCAT('a','b','c');
concat()函数就是用来拼接字符串的
like concat('%',#{name},'%')
5. 动态SQL
if标签
<if test=”name != null”>
where name like concat(‘%’,#{name},’%’);
</if>
where标签
<where>
<if test=”name != null”>
and name like concat('%',#{name},'%')
<if test="price != null">
and price > #{price}
</if>
<where>
set标签
<set>
<if test="name != null">name=#{name},</if>
<if test="price != null">price=#{price},</if>
</set>
trim标签
<trim prefix="where" prefixOverrides="and|or">
<if test="name != null">
name like concat('%',#{name},'%')
</if>
<if test="price != null">
price > #{price}
</if>
</trim>
<trim prefix="set" suffixOverrides=",">
<if test="name != null">name=#{name},</if>
<if test="price != null">price=#{price},</if>
</trim>
choose、when、otherwise
<where>
<choose>
<when test="name != null">
name like concat('%',#{name},'%')
</when>
<when test="price != null and price != 0">
price > #{price}
</when>
<otherwise>
id > 1
</otherwise>
</choose>
</where>
foreach标签
item集合中每一个元素进行迭代时的别名,open该语句以什么开始,separator在每次进行迭代之间以什么符号作为分隔符,close以什么结束
<foreach collection="list" item="ii" open="(" close=")" separator="," >
#{ii}
</foreach>
bind标签
<select id="listProductByName" parameterType="Product" resultType="Product">
<bind name="likename" value="'%' + name + '%'" />
select * from t_product where name like #{likename}
</select>
6. 关联查询
一对多:一个产品类型有多个产品信息
1、想到在一的一方Category 添加多的一方属性 List<Product> products
2、创建ResultMap标签,通过collection标签将多的一方进行封装
3、注意哪张表是主表哪张表信息是从表
resultMap标签中的type属性表示主表的数据类型
Collection标签中的 ofType属性表示从表也就是多数据的数据类型
<resultMap id="categoryBean" type="Category">
<id column="cid" property="id"></id>
<result column="cname" property="name"></result>
<collection property="products" ofType="Product">
<id column="pid" property="id"></id>
<result column="pname" property="name"></result>
<result column="price" property="price"></result>
</collection>
</resultMap>
多对一:多个产品中每个产品对应了一个产品类型
1、在每个商品中添加对应的类型属性 Category category
2、创建ResultMp标签,通过association标签将对应的每个类型进行映射
3、association标签中的 javaType 指定对应的映射类型 Category
<resultMap id="productBean" type="Product">
<id column="pid" property="id"></id>
<result column="pname" property="name"></result>
<!--映射对应的类型-->
<association property="category" javaType="Category">
<id column="cid" property="id"></id>
<result column="cname" property="name"></result>
</association>
</resultMap>
day52 Mybatis标签
最新推荐文章于 2023-07-28 00:31:31 发布