y2第一章 初始mybatis的上机3_MyBatis从入门到精通(第1章):MyBatis入门

最近在知乎读书复习刘增辉老师所著的《MyBatis从入门到精通》一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正!知乎读书可以通过火狐浏览器另存页面为“网页,全部”的方式永久保存你借阅的电子书。

作为一个正在自学Java的自动化专业本科生,在学习和实践过程中”趟了不少雷“,“走了不少弯路”。这本书首先是适合刚学完JavaSE知识后入门,不足之处是未能在整合过程中集成spring框架测试。为此我会将更新的IDEA版源码给出。

第1章  Mybatis入门

1.1  Mybatis简介

MyBatis是一款支持自定义SQL查询、存储过程和高级映射的持久层框架。消除了几乎所有JDBC代码和参数的手动设置以及结果集的检索。

MyBatis可以使用XML或注解进行配置和映射。它通过将参数映射到配置的SQL最终形成执行的SQL语句,最后将执行的SQL的结果映射成Java对象返回。

与其他的ORM(对象关系映射)框架不同,MyBatis并没有将Java对象与数据库表关联起来,而是将Java方法与SQL语句关联。

MyBatis 支持声明式数据缓存( declarative data caching )。当一条 SQL 语句被标记为“可缓存”后,首次执行它时从数据库获取的所有数据会被存储在高速缓存中,后面再执行这条语句时就会从高速缓存中读取结果,而不是再次命中数据库。

1.2  创建Maven项目

Maven是一个项目构建和管理工具。目前市面上很多(2018年以前出版)陈旧的Java参考书还停留在讲如何使用Eclipse开发工具,包括本书。不过自2018年之后IT培训毕业班的双元视频都在介绍如何使用IntelliJ IDEA开发。

因此我们要新建个Maven项目,使用IntelliJ IDEA 2018.3.6 新建Maven项目的过程如下:

+ Create New Project

注:JDK1.8 和 Maven3.6.2是需要用户解压安装并配置好系统环境变量,相关教程请参考黑马双元视频课的介绍。

我们新建完的Maven项目结构如下图所示:

默认生成的pom.xml文件其内容如下所示。

(此处省略,工具自动生成->无需记忆)

首先,设置源代码编码方式为UTF-8,配置如下。(推荐新手看:尚硅谷Java开发利器:IntelliJ IDEA的安装、配置与使用 ->编码格式如何在IDEA中配置成UTF-8)

UTF-8

1.8

接着,设置编译源代码的JDK版本,为了增大兼容范围使用的是JDK 1.8,配置如下。

org.apache.maven.plugins

maven-compiler-plugin

3.8.1

${java.version}

${java.version}

${project.build.sourceEncoding}

还需要在配置文件pom.xml中添加一些依赖才能使接下来的工作顺利进行。

这里要添加最重要的Mybatis3依赖、接着还需要添加会用到的 MySql驱动、JUnit、、Log4j的依赖。

注:数据库依赖的version要和自己电脑安装的实际情况一致->高版本的数据库驱动比如8.0.17兼容5.6.45数据库,但是url具体的一些连接规则有变化。(比如需要serverTimezone=Asia/Shanghai)

junit 是一个单元测试框架,那么使用 Junit 能让我们快速的完成单元测试。下载地址:  https://www.mvnjar.com/junit/junit/4.12/detail.html

mysql是一个数据库,Navicat是数据库可视化操作工具,两者需要先自行安装后再进行本实验流程。下载地址:   https://www.mysql.com/downloads/

log4j是一个一款开源的日志框架,在项目中,我们一般会结合slf4j和log4j一起使用。                     下载地址:   http://logging.apache.org/log4j/1.2/download.html

slf4j是一个简单日记门面(simple logging Facade for java)可以为各种loging APIs提供一个简单统一的接口。  下载地址:    https://www.slf4j.org/download.html

最终的pom.xml文件内容如下:

完成这个步骤后,MyBatis的基本开发环境就已经准备好了。

4.0.0

cn.bjut.mybatis

example

0.1-SNAPSHOT

jar

1.8

junit

junit

4.12

test

org.mybatis

mybatis

3.4.6

mysql

mysql-connector-java

5.1.45

log4j

log4j

1.2.17

org.slf4j

slf4j-api

1.7.25

org.slf4j

slf4j-log4j12

1.7.25

org.apache.maven.plugins

maven-compiler-plugin

3.8.1

${java.version}

${java.version}

UTF-8

example 的 pom.xml

1.3  简单配置让MyBatis跑起来

1.3.1  准备数据库

注:首先需要安装mysql软件,并且记下root管理员的密码。然后再安装Navicat这个有图形界面的MySQL客户端工具,此处命令行代码的录入建议用文本编辑器 Notepad++。

SQL语句学习,推荐看 《MYSQL必知必会》。

通过执行下面的SQL语句创建一个名为 testmybatis的数据库,然后再创建一个名为country的表并插入一些简单的数据。

CREATE DATABASE testmybatis DEFAULT CHARACTER SETutf8 COLLATE utf8_general_ci;--mysql语句单行注释使用 "-- " 注意,--后跟有一个空格

usetestmybatis;--表头的字符串用` `括起来

CREATE TABLE`country`(

`id`int NOT NULLAUTO_INCREMENT ,

`countryname`varchar(255) NULL,

`countrycode`varchar(255) NULL,PRIMARY KEY(`id`)

);--表的字符串内容用' '括起来,格式使用同MATLAB

insertcountry (`countryname`,`countrycode`)values ('中国','CN'),('美国','US'),('俄罗斯','RU'),

('英国','GB'),('法国','FR');

首先点击【连接】弹出窗体 确定->创建了一个名为‘MyBatis从入门到精通’的【连接】->右键单击选择【打开连接】->右键菜单选择【命令列界面】->输入上述SQL语句并回车得到结果如下:

我们检查一下 数据库testmybatis 表country的内容如下图所示:

1.3.2  配置MyBatis

除XML方式外,在后面介绍MyBatis集成Spring会使用spring bean方式进行配置。

如果是SpringBoot开发构建微服务项目,还可以通过Java编码方式进行配置。

本节使用XML形式进行配置,首先在 src/main/resources 下面创建 mybatis-config.xml配置文件。

也可以叫做 SqlMapConfig.xml(对文件名没有强制要求,但公司内部一般有默认的标准约定)。

/p>

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

中的logImpl属性配置 指定使用LOG4J输出日志。

在MyBatis中需要频繁用到储存查询结果的JavaBeans的全限定名称,为了方便使用,我们配置了 cn.bjut.simple.model包,这样后在使用类的时候不需要写包名的部分,只使用Country即可。

环境配置中主要配置了数据库连接,数据库的url为:     jdbc:mysql://localhost:3306/mybatis  使用的本机MySQL中的mybatis数据库。

如果使用本地数据库要改的格式:jdbc:mysql://localhost:3306/mybatis

com.mysql.jdbc.Driver 会报错应该改成:  com.mysql.cj.jdbc.Driver

按照上述改完之后报错显示没填写默认时区修正方法:

中配置了一个 包含完整类路径的 CountryMapper.xml  ,这是一个MyBatis的SQL语句的映射配置文件。

1.3.3  创建实体类和Mapper.xml文件

MyBatis是一个 结果映射框架 ,这里创建的实体类是一个数据值对象(Data Value Object)。在实际应用中,一个表一般会对应一个实体。

在src/main/java 下创建一个基础的包 cn.bjut.simple ,在这个包下面再创建model包。

根据数据库表 country ,在model包下创建实体类Country ,代码如下。

packagecn.bjut.simple.model;public classCountry {//实体类的成员变量

privateLong id;privateString countryname;privateString countrycode;//Alt+Insert 生成get/set方法

publicLong getId() {returnid;

}public voidsetId(Long id) {this.id =id;

}publicString getCountryname() {returncountryname;

}public voidsetCountryname(String countryname) {this.countryname =countryname;

}publicString getCountrycode() {returncountrycode;

}public voidsetCountrycode(String countrycode) {this.countrycode =countrycode;

}

@OverridepublicString toString() {return "Country{" +

"id=" + id +

", countryname='" + countryname + '\'' +

", countrycode='" + countrycode + '\'' +

'}';

}

}

public class Country

在  src/main/resources 目录下面创建  cn/bjut/simple/mapper  目录,再在该目录下面创建 CountryMapper.xml文件,添加如下内容。

/p>

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select id,countryname,countrycode from country

SQL定义在 CountryMapper.xml文件中,里面的配置作用如下。

: XML的根元素,属性namespace定义了当前XML的命名空间,同时也是该映射文件对应接口文件的全限定名称。

元素: 我们所定义的一个  SELECT查询。

id属性: 定义了当前SELECT查询的 唯一 一个id。它就是接口中抽象方法的方法名。

resultType: 定义了当前查询的返回值类型,此处就是指 实体类Country。(前面配置了实体类别名扫描包,否则要写成cn.bjut.simple.model.Country)

创建好实体和Mapper.xml后,接下来要有针对性地配置 Log4j ,让MyBatis在执行数据库操作时将有关信息输出到控制台。

1.3.4   配置Log4j以便查看MyBatis操作数据库的过程

在 src/main/resources 中添加 log4j.properties配置文件,输入如下内容。

#全局配置

log4j.rootLogger=ERROR, stdout

#MyBatis 日志配置

log4j.logger.cn.bjut.simple.mapper=TRACE

#控制台输出配置

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

在MyBatis的日志实现中,所谓的包名实际上是XML配置中 namespace 属性值的一部分。由于namespace属性值必须和接口全限定类名相同(只有这样框架才能自动创建接口的实现类)。

MyBatis日志的 最低级别是 TRACE ,在这个日志级别下,会输出执行SQL过程中的详细信息,这个级别特别适合 开发时使用。

1.3.5  编写测试代码 让MyBatis跑起来

首先在 src/test/java 中创建 cn.bjut.simple.mapper 包 ,然后创建  CountryMapperTest1测试类 ,代码如下。

packagecn.bjut.simple.mapper;importjava.io.IOException;importjava.io.Reader;importjava.util.List;importcn.bjut.simple.model.Country;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.BeforeClass;importorg.junit.Test;public classCountryMapperTest1 {//静态成员方法只能访问静态成员变量

private staticSqlSessionFactory sqlSessionFactory;

@BeforeClasspublic static voidinit(){try{

Reader reader= Resources.getResourceAsReader("mybatis-config.xml");

sqlSessionFactory= newSqlSessionFactoryBuilder().build(reader);

reader.close();

}catch(IOException ignore) {

ignore.printStackTrace();

}

}

@Testpublic voidtestSelectAll(){

SqlSession sqlSession=sqlSessionFactory.openSession();try{

List countryList = sqlSession.selectList("selectAll");//直接调用在this类里定义的私有成员方法

this.printCountryList(countryList);

}finally{

sqlSession.close();

}

}private void printCountryList(ListcountryList){for(Country country : countryList){

System.out.printf("%-4d%4s%4s\n",country.getId(), country.getCountryname(), country.getCountrycode());

}

}

}

public class CountryMapperTest1

调用这个类里定义的私有成员方法时,可以省略this关键字。

通过 Resources 工具类 将mybatis-config,xml配置文件读入 Reader。

再通过 SqlSessionFactoryBuilder 建造类使用Reader创建 SqlSessionFactory工厂对象。这个过程中会读取全部的Mapper.xml进行 具体 方法的解析。

使用时通过 SqlSessionFactory工厂对象获取一个 SqlSession。

通过SqlSession的 selectList 方法查找到  CountryMapper.xml中id='selectAll'的方法,执行SQL查询。

MyBatis底层使用 JDBC执行SQL,获取查询结果集ResultSet后,根据 resultType的配置,将结果映射为Country类型的集合,返回查询结果。

这样就得到了最后的查询结果 countryList ,简单将结果输出到控制台。最后一定不要忘记关闭 SqlSession 。否则导致数据库连接数过多,造成系统崩溃。

1. Junit 入门使用教程    https://www.cnblogs.com/ysocean/p/6889906.html#_label2

2. log4j 日志框架使用    https://blog.csdn.net/king_kgh/article/details/80430002

3. slf4j学习小结        https://imshare.iteye.com/blog/772770

=========================

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值