mybatis入门学习笔记(1)

1mybatis使用步骤:
1创建和数据库表对应的实体类
2创建dao持久层.
3配置主配置文件SqlMapConfig.xml
4配置映射配置文件或选择注释的方式
5创建测试类{
1配置工具–配合单元测试初始化和摧毁
2实现方法
}

2原理:当在测试类中,
1通过ResourcesAsTream读取主配置文件.通过此文件查找映射文件或者没有映射文件,就直接查看daO持久层的接口.
2MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。
3利用sqlSessionFactory生成sqlSession对象,完成和数据库的数据查询交互
4调用api,根据指定的paramType(表的实体类)和id(方法名)等将数据进行封装.
5主要原理就是映射.

配置法:
1基本格式:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace=" accountDao" >
    <resultMap id="AccountMap" type="domain.account">
        <id column="bid" property="id"></id>
        <result property="uid" column="uid" ></result>
        <result column="money" property="money"></result>

        <association property="user" javaType="domain.User" column="uid" select="dao.IUserDao.findOne">
        </association>
    </resultMap>
    <resultMap id="AccountMap1" type="domain.account">
        <id column="bid" property="id"></id>
        <result property="uid" column="uid" ></result>
        <result column="money" property="money"></result>
    </resultMap>

    <select id="findALL" resultType="domain.account" resultMap="AccountMap" >
         select * from account
     </select>
    <select id="findById" resultMap="AccountMap1" resultType="domain.account" parameterType="int">
        select * from account where uid=#{uid}
    </select>


</mapper>

1案列:
1一对一查询:

<resultMap id="AccountMap" type="domain.account">
    <id column="bid" property="id"></id>
    <result property="uid" column="uid" ></result>
    <result column="money" property="money"></result>

    <association property="user" javaType="domain.User" column="uid" select="dao.IUserDao.findOne">
    </association>
</resultMap>

2一对多查询:

<resultMap id="UserMap" type="domain.User">
    <id property="id" column="id"></id>
    <result property="username" column="username"></result>
    <result property="address" column="address"></result>
    <collection property="accounts" ofType="domain.account" select="dao.IAccountDao.findById" column="id">
    </collection>
</resultMap>

3多对多:

<resultMap id="roleMap" type="domain.role">
    <id column="rid" property="roleId"></id>
    <result column="ROLE_NAME" property="roleName"></result>
    <result column="ROLE_DESC" property="roleDesc"></result>
    <collection property="users" ofType="domain.User">
        <id property="id" column="id"></id>
        <result property="username" column="username"></result>
        <result property="address" column="address"></result>
    </collection>
</resultMap>
<select id="findAll" resultMap="roleMap" resultType="domain.role">
 select u.*,r.id as rid,r.role_name,r.role_desc from
 role r  left outer join user_role ur on ur.rid=r.id  
 left outer join user u on u.id=ur.uid;
</select>

上述案列注解的方法:

@Select("select * from user")
@Results(id = "UserMap1",value = {
        @Result(id = true,column = "id",property = "id"),
        @Result(column = "username",property = "username"),
        @Result(column ="address",property = "address"),
        @Result(property = "accounts",column = "id",many =@Many(fetchType = FetchType.LAZY,
        select = "dao.IAccountDao.findById"))
})
List<User> findAll1();
引用:@ResultMap("roleMap")
role findOne(int id);
发布了6 篇原创文章 · 获赞 0 · 访问量 44

猜你喜欢

转载自blog.csdn.net/zisuu/article/details/104729118