02-MyBatis的基本使用

一.常用api

SqlSessionFactory 是一个接口,实现类有DefaultSqlSessionFactory  
SqlSessionFactoryBuilder().build() 默认返回的就是DefaultSqlSessionFactory实例

SqlSession 是一个接口,实现类有DefaultSqlSession 
SqlSessionFactory.openSession()默认返回的就是DefaultSqlSession实例

SqlSessionFactoryBuilder

// 获取一个连接,autoCommit表示是否自动提交事务
SqlSession sqlSession = SqlSessionFactory.openSession(boolean autoCommit)  

//
sqlSession.selectList()
sqlSession.selectOne()
sqlSession.insert()  
sqlSession.update()

二.Mybatis 中#{} 和 ${} 的区别

#{}:转换类型后拼接,相当于占位符?,可以防注入 

${}:直接拼接,不会转换类型,不能放注入  

使用时:

  • 参数是简单类型时:基本数据类型+String 如果用#{},里面名称随便写 如果用${},必须用value

  • 使用时应当都用#{},尽量不用${}

三.MyBatis 可以实现类型自动转换

比如pojo中定义birthday字段为String,数据库中字段对应为datatime类型,  
只要传值的时候符合日期格式的字符串也可以完成自动类型转换  

伪代码:    

User user = new User();  
user.setBirthday("1991-11-9");

sqlSession.insert("UserMapper",user);  

四.输入参数类型和输出参数类型

1.输入参数

  简单类型:基本数据类型+String  
    #{}:名称随便  
    #{}:${value}  

  pojo类型  
    #{} ${} 属性名引用 

  包装对象类型,比如自己定义的QueryVO类型(V:value,O:Object)  
    引用 #{属性.属性名}  

  Map集合
    引用:#{key} 

  多个参数 
    引用时:#{param1},#{param2}.....#{paramN}    

2.返回值类型

    <!--resultMap:结果映射:一般属性名和表列名不一致的情况
        id:唯一标示
        type:返回的类型
        -->
    <resultMap id="userList" type="user">
        <!--id:一般写主键的映射:property:属性名 column:列名-->
        <id property="id" column="user_id"/>
        <!--result:映射其他属性和列名-->
        <result property="username" column="user_name"/>
    </resultMap>
    <!--用select/insert/update/delete的resultMap属性配置关联关系,值为resultMap标签中id属性-->
    <select id="selectOne" resultMap="userList" parameterType="int">
        select * from user where user_id = #{id}
    </select>

五.动态代理模式开发配置

  • 接口UserDao 映射配置文件UserDao.xml

    规范:

  • UserDao.xml Mapper配置文件namespace必须是接口的全限类名

  • 配置文件的路径必须与接口的包名路径一致

  • 子标签(select,insert,update,delete)id必须是接口中的方法名

  • 参数类型必须与parameterType是一致的

  • 返回值类型必须与resultType是一致的

核心配置文件 properties:引入属性文件 typeAlias:别名映射 mappers:引入配置文件 resource="xxx/xxxx/Mapper.xml" class="com.itheima.xxx" package="接口所在的包 比如com.themelove.dao"

1.SqlMapperConfig.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">

    <configuration>
        <typeAliases>
            <!--配置包的别名-->
            <package name="com.mybatis.domain"/>
        </typeAliases>

        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://192.168.199.88:3306/mybatis?characterEncoding=utf-8"/>
                    <property name="username" value="themelove"/>
                    <property name="password" value="themelove"/>
                </dataSource>
            </environment>
        </environments>

        <!--配置mapper-->
        <mappers>
            <mapper resource="UserMapper.xml"/>
        </mappers>
    </configuration>

2.UserMapper.xml 配置

    <?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:必须是代理接口的全限定类名
    select/update/insert/delete 标签的id必须是接口中的方法名
    -->
    <mapper namespace="com.mybatis.domain.UserDao">
        <select id ="selectAll" resultType="com.mybatis.domain.User">
            select * from user
        </select>
        <!--resultMap:结果映射:一般属性名和表列名不一致的情况
            id:唯一标示
            type:返回的类型
            -->
        <resultMap id="userList" type="user">
            <!--id:一般写主键的映射:property:属性名 column:列名-->
            <id property="id" column="user_id"/>
            <!--result:映射其他属性和列名-->
            <result property="username" column="user_name"/>
        </resultMap>
        <!--用select/insert/update/delete的resultMap属性配置关联关系,值为resultMap标签中id属性-->
        <select id="selectOne" resultMap="userList" parameterType="int">
            select * from user where user_id = #{id}
        </select>
    </mapper>

Last updated

Was this helpful?