栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

javs5.1 MyBatis[创建案例,基本使用,配置,日志]

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

javs5.1 MyBatis[创建案例,基本使用,配置,日志]

MyBatis 基本使用【上】
    • 一.概述
    • 二.创建MyBatis程序
        • 2.1 搭建环境
          • (1)创建数据库
          • (2)创建maven项目
        • 2.2 创建模块
          • (1)编写核心配置文件
          • (2)编写工具类
        • 2.3 编程
          • (1)实体类
          • (2)Mapper接口
          • (3)Mapper配置文件
        • 2.4 测试
        • 2.5 补充
          • (1)作用域问题
          • (2)项目结构
    • 三.增删改查
        • 3.1 select
        • 3.2 增删改
        • 3.3 拓展
          • (1)使用map代替实体类
          • (2)模糊查询
          • (3)Limit实现分页
        • 3.4 结果集映射ResultMap
    • 四.配置解析
        • 4.0 配置文件
        • 4.1 环境配置
        • 4.2 属性优化
        • 4.3 别名优化
        • 4.4 设置
        • 4.5 映射器
    • 五.日志工厂
        • 5.1 STDOUT_LOGGING(标准)
        • 5.2 LOG4J

一.概述

MyBatis 是一个 Maven 项目

  • 是基于Java的持久层框架
  • 简单化 SQL,可定制
  • 避免几乎所有的 JDBC
  • 可使用简单的 XML、注解、接口为数据库中的记录

【下载】
Maven仓库


    org.mybatis
    mybatis
    3.5.7

gitHab : https://github.com/mybatis/mybatis-3

中文文档 : https://mybatis.org/mybatis-3/zh/index.html

特点:解除sql与程序代码的耦合(sql写在xml配置文件中)

二.创建MyBatis程序

思路:搭建环境 > 导入MyBatis > 编程 > 测试

2.1 搭建环境 (1)创建数据库

(2)创建maven项目

[父项目中]导入依赖


    
    
        mysql
        mysql-connector-java
        8.0.27
    
    
    
        org.mybatis
        mybatis
        3.5.7
    
    
    
        junit
        junit
        4.13.2
    

注:需要配置xml文件打包


    
        
            src/main/java
            
                ***
            
        
    

2.2 创建模块 (1)编写核心配置文件

文件名 mybatis-config.xml (用于连接数据库)





    
        
        
            
            
            
            
                
                
                
                
            
        
    
    
    
    
        
    

(2)编写工具类
public class MyBatis {
    //==== 1.构建 sqlSessionFactory 对象
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //==== 2.从 SqlSessionFactory 中获取 SqlSession
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();//输入参数true则每次事务完成自动提交
    }
}
2.3 编程 (1)实体类

(属性私有,get/set)略…

(2)Mapper接口
import com.zheng.pojo.User;
import java.util.List;

public interface UserMapper {
    List getUserList();
}
(3)Mapper配置文件

映射的sql语句(在一个 XML 映射文件中,可以定义无数个映射语句)





    
    
    select * from mybatis.user where id=#{id}

3.2 增删改

注:增删改执行结束需要提交事务,sqlSession.commit();

@Test
public void test04(){
    SqlSession sqlSession = MyBatis.getSqlSession();
    try{
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.updataUser(new User(111, "李某迪", "123321"));
        System.out.println(i>0?"成功":"失败");
        sqlSession.commit();//提交事务
    }
    finally {
        sqlSession.close();
    }
}

【例】

//插入数据
int addUser(User u);
//修改数据
int updataUser(User u);
//删除数据
int deletetUser(int id);

    insert into user values(#{id},#{name},#{pass})


    update user set pass=#{pass} where id=#{id}


    delete from user where id=#{id}

3.3 拓展 (1)使用map代替实体类

当实体类对象较大时,为了方便传递多个参数,可用map。一般用于条件查询

接口和配置

//万能map
int addMapUser(Map map);

    insert into user values(#{uid},#{uname},#{upass})

测试类

SqlSession sqlSession = MyBatis.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map map = new HashMap();
map.put("uid",123);
map.put("uname","李某迪");
map.put("upass","123456");
mapper.addMapUser(map);
sqlSession.commit();
sqlSession.close();
(2)模糊查询

    select * from user limit #{startIndex},#{pageSize}

HashMap map = new HashMap();
map.put("startIndex",2);
map.put("pageSize",2);
List userLimit = mapper.getUserLimit(map);
3.4 结果集映射ResultMap

【问题】:解决属性名和字段名不一致的问题

例如:当数据库表字段分别为id、name、passworld,而实体类为 id、name、pass时

查询结果如下:

解决方法:


    
    
    
    


四.配置解析 4.0 配置文件

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。

配置文档的顶层结构如下

configuration(核心配置)

  • properties(属性)
  • settings(设置)
  • typeAliases(类型别名)
  • environments(环境配置)
    • environment(环境变量)
      • transactionManager(事务管理器)
      • dataSource(数据源)
  • mappers(映射器)
  • …(其余了解即可)
4.1 环境配置

(1)多道环境

【说明】MyBatis 可以配置多种环境,即可以有多个environment。例如,开发、测试和生产环境。

但每个 SqlSessionFactory 实例只能选择一种环境。

【使用】通过environments的default属性进行切换,每一个环境对应一个id

(2)事务管理器 transactionManager

type="[JDBC|MANAGED]" 默认:JDBC

(3)数据源 dataSource:配置 JDBC 连接对象的资源

type="[UNPOOLED|POOLED|JNDI]" 默认:POOLED

4.2 属性优化

通过 properties 标签实现引用配置文件

【外部文件 db.properties】

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=false
uname=root
upass=123


4.3 别名优化

  

如上配置,使得在任何地方都可以使用别名 Author 代替 domain.blog.Author

也可以使用 package 指定一个包名


  

如上配置,直接使用该包下类名作为该类地址别名,一般不可指定别名名称

思考:如果两个包中类名相同怎么办

@Alias("author")
public class Author {...}

使用注解为实体类起别名

常见的 Java 类型内建的类型别名

别名映射
_intint
intinteger
mapMap
4.4 设置
设置名描述有效值默认值
cacheEnabled全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。truefalsetrue
lazyLoadingEnabled开启时,任一方法的调用都会加载该对象的所有延迟加载属性;否则,每个延迟加载属性会按需加载。懒加载truefalsefalse
logImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找。LOG4JSTDOUT_LOGGING-

  
  

4.5 映射器

【常用写法】


  

即一个 mapper 标签对应一个 mapper 文件

【了解】


  


  

以上两种方法适用于一定的条件,但有以下局限

  • 接口和绑定接口的Mapper文件 必须同名
  • 接口和绑定接口的Mapper文件 必须在同一目录下
五.日志工厂

用于排错,代替原来的debug

配置文件>设置>logImpl

  • LOG4J
  • STDOUT_LOGGING(标准日志输出)

具体使用哪一个日志实现,在设置中设定

5.1 STDOUT_LOGGING(标准)

    

5.2 LOG4J

链接:Log4j入门教程

1.配置和导包


    


    log4j
    log4j
    1.2.17

2.创建一个配置文件 log4j.properties

#将等级分为DEBUG的日志信息输出到console和file这两个目的地
log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold = DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%c]-%m%n

#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = ./log/my212Log.log
log4j.appender.file.MaxFileSize = 10mb
log4j.appender.file.Threshold = DEBUG
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = [%p][%d{yy-MM-dd}][%c]%m%n

#日志输出级别
log4j.logger.org.mybatis = DEBUG
log4j.logger.java.sql = DEBUG
log4j.logger.java.sql.Statement = DEBUG
log4j.logger.java.sql.ResultSet = DEBUG
log4j.logger.java.sql.PreparedStatement = DEBUG

3.log4j的使用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584678.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号