》MyBatise 入门案例 : 环境搭建 与入门的案 --- 最原始 main方法的测试

本文介绍了MyBatis的基础环境搭建,包括创建必要的配置文件和数据库表,强调了MyBatis如何简化数据库操作。通过一个简单的main方法测试案例,展示了如何使用SqlSessionFactory和SqlSession进行数据查询。同时,提到了MyBatis的设计模式,如工厂模式、构建者模式和动态代理模式,并探讨了配置文件路径的优化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

封红卫 —

友情提示:

  •    使用 mybatis 是非常容易的一件事情,因为只需要编写 Dao 接口并且按照
    

mybatis 要求编写两个配置文件,就可以实现功能。远比我们之前的 jdbc 方便多了。(我们使用注解之后,将变得
更为简单,只需要编写一个 mybatis 配置文件就够了。)
但是,这里面包含了许多细节,比如为什么会有工厂对象(SqlSessionFactory),为什么有了工厂之后还
要有构建者对象(SqlSessionFactoryBuilder),为什么 IUserDao.xml 在创建时有位置和文件名的要求等等。
这些问题我们在自定义 mybatis 框架的章节,通过层层剥离的方式,给大家讲解。
请注意:我们讲解自定义 Mybatis 框架,不是让大家回去自己去写个 mybatis,而是让我们能更好了了解
mybatis 内部是怎么执行的,在以后的开发中能更好的使用 mybatis 框架,同时对它的设计理念(设计模式)有一个认识*

创建maven 什么也不√ 直接的 创建
创建 数据库 用的sqlyong的数据库 图形 客户端不影响
DROP TABLE IF EXISTS user;

CREATE TABLE user (
id int(11) NOT NULL auto_increment,
username varchar(32) NOT NULL COMMENT ‘用户名称’,
birthday datetime default NULL COMMENT ‘生日’,
sex char(1) default NULL COMMENT ‘性别’,
address varchar(256) default NULL COMMENT ‘地址’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into user(id,username,birthday,sex,address) values (41,‘老王’,‘2018-02-27 17:47:08’,‘男’,‘北京’),(42,‘小二王’,‘2018-03-02 15:09:37’,‘女’,‘北京金燕龙’),(43,‘小二王’,‘2018-03-04 11:34:34’,‘女’,‘北京金燕龙’),(45,‘传智播客’,‘2018-03-04 12:04:06’,‘男’,‘北京金燕龙’),(46,‘老王’,‘2018-03-07 17:37:26’,‘男’,‘北京’),(48,‘小马宝莉’,‘2018-03-08 11:44:00’,‘女’,‘北京修正’);

空的项目 :能够视图 直接是java 的
pom。xml :至少要有 《“ MyBatis ”mysql数据库 》 junit log4j
IDEA 编辑器里
1:创建 对应数据库的实体类 的《javaBean 对象》
public class User implements Serializable{
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
get set toString 方法 生成
2: (无需创建实现类)dao 包的里 接口 用户的持久层接口 查询所有的操作 IUserDao: 以I为首 的interface

public interface IUserDao {

/**
 * 查询所有操作
 * @return
 */
List<User> findAll();

}

MyBatise 环境的搭建
1:maven的project 并导入 坐标(maven里 GroupId 就是我们 接下来的 包 的层级 与路径 )

<?xml version="1.0" encoding="UTF-8"?>


4.0.0

<groupId>com.fhw</groupId>
<artifactId>mybatise_fhw_day01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
 <dependencies>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
</dependency>
2:创建实体类 一定要实现 Serializable 和dao 的 包层级与名称 就是依据 创建maven 的 GroupId群,组-- artifactId 制品-- version 版本 (上面已准备) 3: 主配置文件 :sqlMapConfg.xml 名称自定义 要在 Resource 下面 的第一层: 顶层 ============》 主配置xml 文件@@@@@@@@@@@@@@@@@@@@@ <?xml version="1.0" encoding="UTF-8"?> 4:映射文件: 要与实体类的包 要 包,类的 层级 前缀名称 相同 对应() 是的行成映射 =====》 和微信小程序的开发也有类似 的映射 5: 映射文件 mapper namespace 必须是 接口所在的全限定名 6:映射文件 的 操作配置select id 属性 必须是 接口所在的 方法名 -------------------------------- <?xml version="1.0" encoding="UTF-8"?> 认识自定义就无需 MyBatise官方 的约束 select * from user

@@@:总结 3个xml 文件 基于maven 的pom.xml文件 导入依赖 resources里的— 主配置xml文件 (在顶层) 映射xml文件(与接口 层级 前缀名称 相

同)
接口 与mapper 文件 的对应 与 形成 映射的条件 resources 里 包的名称 层级统一一致 就连配置文件名称 与接口名称 也是相同的
如此这般 : 我们就不用在写接口的 实现类 。。。。开发里最常用 的
基础版====》 主配置文件的 遍写描述:
file ----自定义名称 后缀名为xml 的 如: SqlMapConfg.xml

<?xml version="1.0" encoding="UTF-8"?> --->MyBatise的官方 dtd 约束文件

先写 再写<environments 就生成 了 default 指定 的这个库 — 多个库
—<transactionManager type="" sw 管理 的类型 是 我选的是JDBC
—< dataSource type=""> 数据源类型 POOLED 连接池–这里-继续写的是 数据库的配置连接的4个基本 property name value
----- 分别是:driver驱动 。。。。 url —vaulue里 java:mysql: (url 格式的 ip 端口号port 与库名)
可优化===》(这里可以来自外面 propertise文件里解决 )然后xml里引入 在Value里使用OGNL表达式: 对象名.属性名来调用 即可)
最后指定 映射文件的位置:全限定类名—》 mappers—mapper resource=的值全限定类名

然后: log4g.propertise 文件
备用 jdbcConfig.properties 文件 可进行OGNL表达式在主配置文件的应用
编写 测试类 这里的包–没有映射 条件
测试类里 ----》
public static void main(String[] args) throws Exception{
// 读取配置文件
InputStream in = Resources.getResourceAsStream(“SqlMapConfig.xml”);
// 创建sqlSession 工厂
//).build(in); 就是创建者 模式
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 使用工厂生产SqlSession 对象
SqlSession session = factory.openSession();
// SqlSession创建代理对象
IUserDao iUserDao = session.getMapper(IUserDao.class);
//代理对象执行方法
List users=iUserDao.findAll();
for (User user : users) {
System.out.println(user);
}
//释放资源
session.close();
in.close();
}
我们分析的 是 在main 方法里 —配置文件 里
我们是用的 路径
分析 在实际开发里 绝对路径与相对路径 都是不靠谱的
优化的 有 2种
1: 使用类的加载器
2:使用ServiletContext 的对象的 getRealPath
还有 这些模式

工厂的模式 :解耦 解决 类只间的耦合 生产Session的 就使用 工厂模式
构建者模式 解决了修改源码的 弊端 创建的细节隐藏 使用 就直接的调用 即可
//).build(in); 就是创建者 模式
build() 与 openSession 都有很多重载 : 灵活

动态代理模式: 的优势 动态代理 ----》在不修改源码的 的基础上 对 对象方法的增强
SqlSession创建代理对象
IUserDao iUserDao = session.getMapper(IUserDao.class);
代理模式: 从而 不用在写实现类

每多加的类 就灵活的多 他每次多创建 一个类的额 优势 -----》 项目需求 为
设计模式 只需要使用的好处

分析的 自定义MyBatise
有什么,???
------》Connection Database 的miserge 信息 —》 就能创建Connection对象

        Mapper Resouce =“全类名”  映射配置文件的  ---是实体类的 全限定名

mapper 映射 文件xml---------------------》
Mapper 里namesPace select 的查询所有 就执行SQL语句 ------》

SQLSession接口的里写的(核心对象) 是?

sqlSessionDactory
xml解析 里额的 直接用的的是 utils 的 copy 到 选择的 项目里 —》给Pomeranian文件里 加上坐标 ====》看一下Xpath 的教程 就是为为了找到POM.xml

自定义MyBatise的类 导出来 创建ConfigRection实体类 来 封装了配置信息

创建Mepper 类里就是为了 执行 sql语句 和 全限定类名
‘’
看图分析
在这里插入图片描述
接着我们来分析2个 配置xml文件 的
主配置xml 文件@@@




在 有了连接数据库的–Connection 对象
在 最后 指定映射配置文件的位置,


接值 映射xml 文件 里
进行执行 SQL 语句 的

》-- 》 分享 — 解析 xml 文件 用的是 dom4j 的@@@@@@@@@》

Set root category priority to INFO and its only appender to CONSOLE.

#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

*Set the enterprise logger category to FATAL and its only appender to CONSOLE. *

log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

CONSOLE is set to be a ConsoleAppender using a PatternLayout.

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

LOGFILE is set to be a File appender using a PatternLayout.

log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
先不要关注 dom4j 的解析过程

=====》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值