博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
家有Mybatis初养成1
阅读量:4950 次
发布时间:2019-06-11

本文共 11105 字,大约阅读时间需要 37 分钟。

环境:

java1.8

mybatis-3.2.7

mysql-8.0.11

 

IDE:

IntelliJ IDEA 2018.2

 

=======================================按惯例稍微了解下Mybatis======================================

  MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

  MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

  Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

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

 

=======================================正文开始==================================================

【1.新建项目并导包】

1.1 新建一个项目

1.2 当前值学习mybatis框架所以java项目就足够

1.3 起个名吧我就随便叫Mybatis-1了

1.4 项目建立完成长这样。接下来我们要导入jar包

1.5 导包方式有很多,不是本篇的重点,所以在此随便使用一种,导入本地的jar包(但真实项目中一般不会让你这么干的)。按图点就完事儿了

1.6 点完5就会出现下图框

 

提前下载好mybatis的jar包呀,此处版本为3.2.7,另外mybatis不是得跟数据库玩儿嘛所以还需要个数据库连接包,然后此处使用mysql数据库,就需要mysql-connector-java-x.x.x-bin.jar包,此处版本为5.1.7(上面说我的mysql版本是8.0.11,没有冲突,若有再联系博主或直接百度具体问题),我还导入一个junit-4.9,为了单元测试嘛。找到下载好的本地jar包后选中并点击OK关掉该窗口,再点击后面窗口的Apply和OK,在项目目录中看到External Libraries下有刚刚导入的包后就是成功了。

 

=======================================暂停了解下Mybatis架构图:重要!理清了对后续要干什么就会很清晰======================================

从下往上看吧。我们最终目的是对数据库进行操作,而直接跟数据库玩的是MappedStatement,MappedStatement是怎么来的呢?它是被封装在Executor中的一个对象,而Executor(执行者)又是SqlSession中的一个对象,换句话说,我们要和数据库玩,只需要有个SqlSession的实例就够了。继续往上爬,SqlSession是SqlSessionFactory(SqlSession工厂)生产出来的,而工厂要生产东西肯定需要原料吧,那么图中最上层的Mybatis配置文件就是原料,原料有两种:SqlMapConfig.xml和MapperX.xml,所以归根到底,我们得从SqlMapConfig.xml和MapperX.xml这两种文件开始写。

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

 

【2.写丫的配置文件】

 2.1 写丫的SqlMapConfig.xml

因为我懒,所以我直接写了个Mybatis配置文件的模板,这个Mybatis Config文件只有我机子上有,想用的时候直接新建就行。至于这款IDE怎么编辑模板文件,这不是重点,有需要百度就是,没有模板也不要紧,反正最后文件是这样的

代码也给你:

sqlMapConfig.xml

配置数据库连接池相信都懂,写上driver、url、username、password就是了。但是,真正开发应该也不会直接明文写上吧,所以来个配置文件吧,继续在src下新建个jdbc.properties文件

有了这个文件后就可以在sqlMapConfig.xml中引用了(注意路径问题)

 

 2.2 写丫的Mapper.xml

为啥要mapper文件呢?因为对数据库的操作语句都是写这里的(Mybatis与Hibernate不同的是,后者把sql代码写java文件里)

然后与原始Dao开发方式不同的是,这里我使用动态代理开发方式,解释起来又一堆相信想看理论的也不会点开这篇博文,所以直接操作起来吧

 

2.2.1 最初的最初,让我们先建好数据表:

新建user.sql文件内容如下:

/*Navicat MySQL Data TransferSource Server         : localhost_3306Source Server Version : 80011Source Host           : localhost:3306Source Database       : mybatisTarget Server Type    : MYSQLTarget Server Version : 80011File Encoding         : 65001Date: 2018-11-14 10:33:27*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `username` varchar(32) NOT NULL COMMENT '用户名称',  `birthday` date DEFAULT NULL COMMENT '生日',  `sex` char(1) DEFAULT NULL COMMENT '性别',  `address` varchar(256) DEFAULT NULL COMMENT '地址',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8;

然后随便加几条数据进去吧

 

2.2.2 在src下建个文件夹pojo并写个User类(没有技术含量,但还得写是吧)

package pojo;import java.io.Serializable;import java.util.Date;public class User implements Serializable {    private static final long serialVersionUID = 1L;    private Integer id;    private String username;// 用户姓名    private String sex;// 性别    private Date birthday;// 生日    private String address;// 地址    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    @Override    public String toString() {        return "User [id=" + id + ", username=" + username + ", sex=" + sex                + ", birthday=" + birthday + ", address=" + address + "]";    }}
User.java

可能你会疑问这是什么

这里我不告诉你,自己查去哈哈哈

 

2.2.3 在src下建个文件夹mapper并写个UserMapper接口(命名格式一般都这样,针对哪个实体类做数据库操作,就用实体类名+Mapper做接口名)

还得有个xml文件,名字叫UserMapper.xml,对,强制与接口名一致。UserMapper.xml文件还需要有文件头,这里直接提供:

 

2.3 关联sqlMapConfig.xml文件和Mapper.xml文件

如此编辑sqlMapConfig.xml文件(原理不表,本篇只说操作):

至此配置文件编写完成

 

【3.写功能并进行测试啦】

配置好环境了,接下来就是写实际的操作数据库的代码了

让我们想想,之所以要写接口是为了增添功能,所以

而Mapper.xml是为了具体写sql代码的,所以

随便想个功能吧,我们来做个根据用户id查用户所有信息的功能

 

3.1 在接口定义findUserById方法

findUserById方法的入参为Integer型,为啥呢,因为咱们不是要根据用户id查用户所有信息嘛,数据库中id类型就是整型。返回值是User

 

 然后如果直接用sql语句查询,那应该使用select语句,整句应该是“select * from user where id = 多少多少”,所以UserMapper.xml应该这么写:

新建mapper标签,在其下新建select标签,id要和接口中方法名一致,parameterType要和入参类型一致,resultType要和返回值类型一致。

然后要在select标签下写刚刚那句sql语句,条件查询中使用#来取值,大括号内任填 #{id}、#{uid}、#{userid}什么的都OK

 

3.2 测试啦

在src下新建test包,新建测试类TestMabatis(名字自己瞎起)

 

---恢复内容结束---

 

 

环境:

java1.8

mybatis-3.2.7

mysql-8.0.11

 

IDE:

IntelliJ IDEA 2018.2

 

=======================================按惯例稍微了解下Mybatis======================================

  MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

  MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

  Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

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

 

=======================================正文开始==================================================

【1.新建项目并导包】

1.1 新建一个项目

1.2 当前值学习mybatis框架所以java项目就足够

1.3 起个名吧我就随便叫Mybatis-1了

1.4 项目建立完成长这样。接下来我们要导入jar包

1.5 导包方式有很多,不是本篇的重点,所以在此随便使用一种,导入本地的jar包(但真实项目中一般不会让你这么干的)。按图点就完事儿了

1.6 点完5就会出现下图框

 

提前下载好mybatis的jar包呀,此处版本为3.2.7,另外mybatis不是得跟数据库玩儿嘛所以还需要个数据库连接包,然后此处使用mysql数据库,就需要mysql-connector-java-x.x.x-bin.jar包,此处版本为5.1.7(上面说我的mysql版本是8.0.11,没有冲突,若有再联系博主或直接百度具体问题),我还导入一个junit-4.9,为了单元测试嘛。找到下载好的本地jar包后选中并点击OK关掉该窗口,再点击后面窗口的Apply和OK,在项目目录中看到External Libraries下有刚刚导入的包后就是成功了。

 

=======================================暂停了解下Mybatis架构图:重要!理清了对后续要干什么就会很清晰======================================

从下往上看吧。我们最终目的是对数据库进行操作,而直接跟数据库玩的是MappedStatement,MappedStatement是怎么来的呢?它是被封装在Executor中的一个对象,而Executor(执行者)又是SqlSession中的一个对象,换句话说,我们要和数据库玩,只需要有个SqlSession的实例就够了。继续往上爬,SqlSession是SqlSessionFactory(SqlSession工厂)生产出来的,而工厂要生产东西肯定需要原料吧,那么图中最上层的Mybatis配置文件就是原料,原料有两种:SqlMapConfig.xml和MapperX.xml,所以归根到底,我们得从SqlMapConfig.xml和MapperX.xml这两种文件开始写。

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

 

【2.写丫的配置文件】

 2.1 写丫的SqlMapConfig.xml

因为我懒,所以我直接写了个Mybatis配置文件的模板,这个Mybatis Config文件只有我机子上有,想用的时候直接新建就行。至于这款IDE怎么编辑模板文件,这不是重点,有需要百度就是,没有模板也不要紧,反正最后文件是这样的

代码也给你:

sqlMapConfig.xml

配置数据库连接池相信都懂,写上driver、url、username、password就是了。但是,真正开发应该也不会直接明文写上吧,所以来个配置文件吧,继续在src下新建个jdbc.properties文件

有了这个文件后就可以在sqlMapConfig.xml中引用了(注意路径问题)

 

 2.2 写丫的Mapper.xml

为啥要mapper文件呢?因为对数据库的操作语句都是写这里的(Mybatis与Hibernate不同的是,后者把sql代码写java文件里)

然后与原始Dao开发方式不同的是,这里我使用动态代理开发方式,解释起来又一堆相信想看理论的也不会点开这篇博文,所以直接操作起来吧

 

2.2.1 最初的最初,让我们先建好数据表:

新建user.sql文件内容如下:

/*Navicat MySQL Data TransferSource Server         : localhost_3306Source Server Version : 80011Source Host           : localhost:3306Source Database       : mybatisTarget Server Type    : MYSQLTarget Server Version : 80011File Encoding         : 65001Date: 2018-11-14 10:33:27*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `username` varchar(32) NOT NULL COMMENT '用户名称',  `birthday` date DEFAULT NULL COMMENT '生日',  `sex` char(1) DEFAULT NULL COMMENT '性别',  `address` varchar(256) DEFAULT NULL COMMENT '地址',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8;

然后随便加几条数据进去吧

 

2.2.2 在src下建个文件夹pojo并写个User类(没有技术含量,但还得写是吧)

package pojo;import java.io.Serializable;import java.util.Date;public class User implements Serializable {    private static final long serialVersionUID = 1L;    private Integer id;    private String username;// 用户姓名    private String sex;// 性别    private Date birthday;// 生日    private String address;// 地址    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    @Override    public String toString() {        return "User [id=" + id + ", username=" + username + ", sex=" + sex                + ", birthday=" + birthday + ", address=" + address + "]";    }}
User.java

可能你会疑问这是什么

这里我不告诉你,自己查去哈哈哈

 

2.2.3 在src下建个文件夹mapper并写个UserMapper接口(命名格式一般都这样,针对哪个实体类做数据库操作,就用实体类名+Mapper做接口名)

还得有个xml文件,名字叫UserMapper.xml,对,强制与接口名一致。UserMapper.xml文件还需要有文件头,这里直接提供:

 

2.3 关联sqlMapConfig.xml文件和Mapper.xml文件

如此编辑sqlMapConfig.xml文件(原理不表,本篇只说操作):

至此配置文件编写完成

 

【3.写功能并进行测试啦】

配置好环境了,接下来就是写实际的操作数据库的代码了

让我们想想,之所以要写接口是为了增添功能,所以

而Mapper.xml是为了具体写sql代码的,所以(注意:mapper标签一定要指定namespace属性,值为该xml文件对应的mapper接口)

 

随便想个功能吧,我们来做个根据用户id查用户所有信息的功能

 

3.1 在接口定义findUserById方法

findUserById方法的入参为Integer型,为啥呢,因为咱们不是要根据用户id查用户所有信息嘛,数据库中id类型就是整型。返回值是User

 

 然后如果直接用sql语句查询,那应该使用select语句,整句应该是“select * from user where id = 多少多少”,所以UserMapper.xml应该这么写:

新建mapper标签,在其下新建select标签,id要和接口中方法名一致,parameterType要和入参类型一致,resultType要和返回值类型一致。

然后要在select标签下写刚刚那句sql语句,条件查询中使用#来取值,大括号内任填 #{id}、#{uid}、#{userid}什么的都OK

 

3.2 测试啦

在src下新建test包,新建测试类TestMabatis,写个测试方法test(名字自己瞎起)

 回忆一下要操作数据库需要什么——SqlSession,SqlSession怎么来——SqlSessionFactory,而SqlSessionFactory是由SqlSessionFactoryBuilder的实例使用build方法构建出来的,所以代码这么写

生产一个东西需要原料,所以build方法也就需要入参,有如上图所示一堆,可以用字节流、字符流、配置等作为参数,这里我就用字节流吧,以sqlMapConfig.xml文件作为原料,从Resources中构造字节流

.最后也可以获得session了

 使用动态代理开发,所以mapper该出场了。session.getMapper获得mapper,然后mapper就可以调用我们在接口定义的方法,所相应的数据库操作了。

 

最终代码如下:查询id为10的用户

数据库数据如此:

 控制台:

 

 

转载于:https://www.cnblogs.com/LambertCOL/p/9957025.html

你可能感兴趣的文章
JS基础-dom操作
查看>>
【转】Android详细的对话框AlertDialog.Builder使用方法
查看>>
Unite Beijing 2015大型活动
查看>>
loading加载的代码
查看>>
PHP框架CI CodeIgniter 的log_message开启日志记录方法
查看>>
arraylist
查看>>
关于poi导出excel三种方式HSSFWorkbook,SXSSFWorkbook,csv的总结
查看>>
zoj 1649 Rescue (BFS)(转载)
查看>>
371. Sum of Two Integers java solutions
查看>>
2124: 等差子序列 - BZOJ
查看>>
3529: [Sdoi2014]数表 - BZOJ
查看>>
字符串匹配算法综述
查看>>
Linux centosVMware shell 管道符和作业控制、shell变量、环境变量配置文件
查看>>
在程序被送入后台时,向 iOS 借点时间,来完成一个长期任务
查看>>
【设计模式】工厂模式
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
前端之路
查看>>
javascript 继承
查看>>
String类型转int类型方法
查看>>
关于渲染引擎设计,Scene Management的文章
查看>>