Mybatis学习总结

环境搭建

主配置文件( SqlMapConfig.xml )

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--mybatis的主配置文件 -->

<!--引入外部配置文件-->
	 <properties resource="jdbcConfig.properties"></properties>
	 
<!--配置实体类的别名-->
    <typeAliases>
        <!--配置完成后可直接使用user类(不需要再写全限定类名)-->
        <typeAlias type="com.it.domain.User" alias="user"></typeAlias>
      
        <!--也可使用package属性配置,指定实体类所在的包,配置后类名就是别名,且不区分大小写-->
        <package name="com.it.domain"/>
    </typeAliases>

<configuration>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.username}"></property>
                <property name="password" value="${jdbc.password}"></property>
            </dataSource>

        </environment>
    </environments>
    
    <!--指定映射配置文件的位置,映射配置文件是每个dao独立的配置文件-->
    <mappers>
        <mapper resource="com/it/dao/UserDao.xml"/>
        <!--也可以使用package指定dao接口所在的包-->
        <package name="com.it.dao"/>
    </mappers>
</configuration>

实体类映射配置文件

在resources下配置和dao类同级的配置文件,这样就可以使用代理模式不在需要dao的实现类
在这里插入图片描述

<?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">

        <!--namespace : 映射位置-->
 <mapper namespace="com.it.dao.IUserDao">

    <!--定义User的resultMap-->
    <resultMap id="userAccountMap" type="user">
        <id property="id" column="id"></id>
        <result property="username" column="username"></result>
        <result property="address" column="address"></result>
        <result property="sex" column="sex"></result>
        <result property="birthday" column="birthday"></result>
        <!--一对多映射配置封装Account集合的内容-->
                                        <!--ofType:集合中元素类型-->
        <collection property="accounts" ofType="account">
            <id property="id" column="aid"></id>
            <result property="uid" column="uid"></result>
            <result property="money" column="money"></result>
        </collection>
    </resultMap>

    <!--查询所有-->
    <!--id : 映射位置内方法 resultMap : 封装到哪里去-->
    <select id="findAll" resultMap="userAccountMap">
        <!--左外连接返回左边所有的数据和右边匹配数据-->
        select * from user u left outer join account a on u.id = a.uid;
    </select>
    
    <!--根据id查询-->
    <select id="findById" parameterType="int" resultType="user">
         select * from user where id like #{uid};
    </select>
    
    <!--删除使用delete标签-->
     <delete id="deleteUser" parameterType="int">
        delete from user where id=#{uid}
    </delete>
    <!--保存使用insert标签-->
    <insert id="insertUser" parameterType="com.it.domain.User">
        insert into user (username,password) values (#{username},#{password})
    </insert>
    <!--更新使用upadate标签-->
    <update id="updateUser" parameterType="com.it.domain.User">
        update user set username=#{username},password=#{password} where id=#{id}
    </update>
    

测试类

使用代理模式

public static void main(String[] args) throws Exception {
        //1.读取配置文件
       InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");

        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);

        //3.使用工厂创建SqlSession对象
        SqlSession session = factory.openSession();

        //4.使用SqlSession创建Dao接口代理对象
        UserDao userDao = session.getMapper(UserDao.class);

        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for (User user : users){
            System.out.println(user);
        }
        //6.释放资源
        session.close();
        in.close();
    }
}

延时加载

延时加载:在真正使用一个数据时候才去查询(即按需加载或懒加载;
                 一般在一对多、多对多的情况下使用;
                   在查询一个学生信息时,其关联的课程信息是需要时候才去查询,不需要的时候仅查询学生信息

立即加载:不管用不用,只要调用就马上查询;
                 一般多对一,一对一的情况下使用;

延时加载的使用
         查询学生信息:

<select id="findUserById" parameterType="int" resultMap="user_course" >
    select user.id,user.name,user.age from user where user.id=#{id}
</select>

         查询学生的选课信息可以使用延时加载
         fetchType属性:lazy为延时加载,默认为立即加载eager

 <resultMap id="user_course" type="User">
       <id column="id" property="id">
       <collection property="ucourse" column="id" select="com.it.dao.CourseDao.queryCourseByUserId" fetchType="lazy"></collection>
     </resultMap>

注解配置

在使用mybatis的注解开发时要在主配置文件中添加下列内容,使用注解开发后可以不在书写映射文件

 <mappers>
        <mapper class="com.it.dao.UserDao"/>
        <!--或者也可以使用package标签-->
        <package name="com.it.dao"/>
 </mappers>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值