mybatis基础

mybatis

1.mybatis有什么用

mybatis是一个orm持久层框架,对jdbc进行轻量级封装,对比hibernate与jpa纯oop的重量级持久层框架,半自动化持久层框架(oop+sql).

开发效率:jpa,hibernate开发效率高;

执行效率:jdbc最高-->mybatis-->jpa

持久层框架叫:orm框架,对象关系映射框架.dao层框架.

 

orm:实体类与数据库表的一一映射关系通过xml和注解方式进行配置.

 

2.入门

  • 添加mybatis依赖包;mysql驱动包

  • 添加mybatis配置文件

  • 创建数据库表;创对应的实体类

  • 创建mybatis映射文件,并把映射文件配置到mybatis配置文件中

  • 测试使用

 

3.mybatis的核心api(重要)

  • SqlSessionFactoryBuilder:会话工厂构建器对象.加载xml配置文件并解析,一个个标签进行解析,把标签数据统统解析到Configuratin对象中,该对象持有DataSource,持有别名映射关系,持有mybatis内置的27个类型处理器.持有映射文件中的MappedStatement对象的集合.

    生命周期:用完即销毁.

    方法:build

  • SqlSessionFactory:DefaultSqlSessionFactory,该对象持有Configuration对象.

    生命周期:全局唯一的对象.

    方法:openSession

  • SqlSession:会话对象,DefaultSqlSession.也持有Configuration对象.Sql执行器对象Executor

    生命周期:需要操作数据库时,创建会话对象,操作完成后,关闭会话对象.

    方法:selectOne,selectList,insert,update,delete,

    getMapper方法最重要.

 

4.mybatis的配置详解(不重要,了解)

<configuration>
    <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://127.0.0.1/ssmdb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
​
    <mappers>
        <mapper resource="com\javasm\sys\dao\sysuser-mapper.xml"></mapper>
    </mappers>
</configuration>
  • properteis标签:用来加载外部的properteis资源文件

  • settings标签:用来修改mybatis的默认运行行为.比如:logImpl,mapUnderscoreToCamelCase

  • typeAlias别名标签:指定包,对该包下的所有类起别名,忽略大小写.通过对常用的jdk内的类有默认别名.

    • String-string

    • Integer-int

    • HashMap-map

  • environments标签:数据库环境标签

  • mappers标签:引入映射文件.

 

5.mybatis的映射文件详解(最重要)

  • select:<select id="" parameterType="" resultType="">

  • insert:<insert id="" parameterType="" useGenerateKeys="true" keyProperty="实体的属性名">

  • delete

  • update

parameterType支持:简单类型(String,date,int,double).实体,map

resultType支持:简单类型,实体,map.

sql语句中动态参数表达式#{}.括号中写什么?

parameterType是简单类型,则#{随便}

parameterType是实体,则#{属性名}

parameterType是map,则#{key}

 

6.mybatis的模糊查询

在sql语句中使用双引号或者mysql拼接函数在#{}左右拼接%.

select * from sysuser where uphone like  "%"#{uphone}"%"

 

 

7.getMapper方法

  • 创建dao接口

  • 映射文件的namespace写成dao接口的全名称(包名.类名)

  • 映射文件中的curd标签的id名,写成dao接口的方法名

  • 通过sqlsession会话对象的getMapper方法得到指定接口的代理对象进行数据库操作.

SysroleDao rd = s.getMapper(SysroleDao.class);
Sysrole sysrole = rd.selectById(1);

 

8.mybatis多参数传递(重要)

mybatis底层把多个参数都是封装成了map单个参数.

  • 封装实体对象

  • 封装map对象

  • dao接口形参写多个参数,形参使用@Param注解.

public List<Sysrole> selectArgs(@Param("rname") String rname,@Param("rid") Integer rid);

 

9.mybatis常见异常

Type interface com.javasm.sys.dao.SysroleDao is not known to the MapperRegistry.(接口对应的映射文件没有添加的配置文件中或者是映射文件中的namespace写错了)

 

Invalid bound statement (not found): com.javasm.sys.dao.SysroleDao.selectById(接口中有方法,映射文件中没有对应的id)

 

ReflectionException:There is no getter for property named 'rname2' in 'class com.javasm.sys.entity.Sysrole'(未生成set,get;#{变量名写错})

 

PersistenceException:### The error may exist in *.xml.(id重复,或者文件结构错误)

 

配置文件或映射文件中有错

10.#{}与${}的区别

#{}:mybatis解析成了?占位符.安全.

${}:mybatis进行sql拼接,绝对不会应用在条件查询.应用在表格的动态排序上

select * from sysuser order by ${field} ${sort}

注意点:

数据库的日期类型:date,dateTime,timestamp

实体类的变量类型:Date,LocalDatetime,String

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值