黑马程序员技术交流社区

标题: Mybatis [打印本页]

作者: 草莓味的可爱    时间: 2019-6-21 10:51
标题: Mybatis
- Mybatis
  - 概念:是一种持久层的框架
  - 作用:
    - 只关心sql的编写,不需要考虑数据源和连接的创建等
    - 可以直接将入参和出参直接封装到java对象中
    - 解耦:将sql代码从java代码中解放,写在xml配置文件中便于维护和提高阅读性,
    - sql编写更加灵活
- Mybatis的映射配置文件:userMapper.xml
  - namespace:命名空间
  - select,insert,update,delete
    - id
    - parameterType:入参类型
    - resultType:出参类型
    - 返回主键:insert操作
      - keyProperty=“id”
      - useGenerateKeys=true
- Mybatis的核心配置文件:sqlMqpConfig.xml
  - properties:引入外部priperties文件
  - typeAliases:别名标签
  - environments:配置数据源环境 defalut=""
    - environment:某个数据源环境
      - transactionManager:事务管理器 JDBC
      - dataSource:POOLED
  - mappers:加载映射文件
- Mybatis的相关API
  - 加载核心配置文件:Resouces
  - 用sqlSessionFactoryBulider创建sqlSessionFactory
  - 用sqlSessionFactory创建sqlSession
    - openSession()
    - openSession(boolean autoCommit)
  - 执行sql操作
    - 命名空间.id
- Mybatis的入门demo开发步骤
  - 导入坐标
  - 编写实体类和表
  - 编写映射文件
  - 编写核心配置文件
  - 测试

### 2 今日目标

#### 2.2.1 能够使用Mybatis代理方式生成Mapper实现类(dao层)。【++++】

- 条件:
  - userMapper.xml的namespace=userMapper接口的全类名
  - userMaper接口的方法名= userMapper.xml的id名
  - userMaper接口的方法的返回类型= userMapper.xml的resultType类型
  - userMaper接口的方法的参数类型= userMapper.xml的aprameterType类型

#### 2.2.3 能够使用Mybatis的常用动态SQL标签(映射文件)【+++++】

- if标签 test="条件"

- where标签 如果where标签内有条件拼接就在最外面拼接where关键字

- foreach 标签:

  - 应用场景:常用于in()的参数的循环

  - ```
    <foreach collection="list" open="id in(" close=")" item="id" separator=",">
    ```

- sql标签:抽取相同的sql片段
- include标签:引入sql标签的sql片段
- 其他动态sql标签:<http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html>

#### 2.2.4 能够使用Mybatis的核心配置文件的其他标签【++++】

- typeHandler:自定义类型转换器

  - 步骤
    - 编写类继承类(BaseTypeHandler)或者实现一个接口(TypeHandler)
      - setxxxxParamenter()
      - getxxxResult()
    - 配置sqlMapConfig.xml
      - <typeHandlers>
        - typeHandler handler ="编写的类"
    - 测试

- plugins:引入第三方插件

  - pageHelper:分页助手

    - 步骤:

      - 导入坐标(两个)

      - zai核心配置文件中配置plugins

        - ```
          <plugins>
              <plugin interceptor="com.github.pagehelper.PageHelper">
                  <property name="dialect" value="mysql"></property>
              </plugin>
          </plugins>
          ```

      - ```
        //设置分页相关参数   当前页+每页显示的条数
        PageHelper.startPage(3,3);
        ```

#### 2.2.5 日志使用(拓展)

1.日志级别:debug,info,warning,error

2.log4j的使用:

- 导入坐标:log4j

- 导入log4j.properties

- ```
  private  static Logger logger = Logger.getLogger(MapperTest.class);
          logger.info("debug....");//打印重要信息
          logger.error("debug....");//打印异常信息
  ```

3.log4j配置文件解析:

```
### direct log messages to stdout 打印到控制台###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log 打印到日志文件###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###
### 日志级别,别名1,别名2 ###
log4j.rootLogger=debug, stdout,file
```

详细配置参考链接:<https://www.cnblogs.com/gaishishengzhu/articles/1735441.html>

4.日志工具种类:

​    1)log4j (常用)

​    2)jdk logging

​    3)logback(常用)

​    4)  apach common-logging

5.日志工具API:slf4j

   底层可以使用上面的任意一种日志工具:

  slf4j+log4j

  slf4j+logback

日志文件发展史:<https://blog.csdn.net/qq_32625839/article/details/80893550>

### 3 上午总结

- mybatis代理方式生成mapper实现类
  - 条件
    - 映射文件的namespace=mapper接口的全限定名
    - 映射文件的id=mapper接口的方法名
    - 映射文件的parameterType=mapper接口的方法的参数类型
    - 映射文件的resultType=mapper接口的方法的返回值类型
  - 使用方法
    - SqlSession session = SqlSessionFactory.openSession()
      - session.selectList(命名空间.id);
    -  SqlSession session = SqlSessionFactory.openSession()
      - UserMapper mapper =session .getMapper(UserMapper.class)
      - mapper.findAll();
- 动态sql标签
  - if test="条件"
  - where
  - foreach: in()参数的循环
    - open=""
    - item=""
    - close=""
  - sql 抽取相同的sql片段
    - include




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2