家有Mybatis初养成1

环境:

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怎么编辑模板文件,这不是重点,有需要百度就是,没有模板也不要紧,反正最后文件是这样的

代码也给你:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

    <environments default="development">
        <environment id="development">

            <transactionManager type="JDBC"/>

            <dataSource type="POOLED">
                <property name="driver" value=""/>
                <property name="url" value=""/>
                <property name="username" value=""/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>

    <mappers>

    </mappers>

</configuration>
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 Transfer

Source Server         : localhost_3306
Source Server Version : 80011
Source Host           : localhost:3306
Source Database       : mybatis

Target Server Type    : MYSQL
Target Server Version : 80011
File Encoding         : 65001

Date: 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文件还需要有文件头,这里直接提供:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

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怎么编辑模板文件,这不是重点,有需要百度就是,没有模板也不要紧,反正最后文件是这样的

代码也给你:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

    <environments default="development">
        <environment id="development">

            <transactionManager type="JDBC"/>

            <dataSource type="POOLED">
                <property name="driver" value=""/>
                <property name="url" value=""/>
                <property name="username" value=""/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>

    <mappers>

    </mappers>

</configuration>
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 Transfer

Source Server         : localhost_3306
Source Server Version : 80011
Source Host           : localhost:3306
Source Database       : mybatis

Target Server Type    : MYSQL
Target Server Version : 80011
File Encoding         : 65001

Date: 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文件还需要有文件头,这里直接提供:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

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的用户

数据库数据如此:

 控制台:

 

 

posted @ 2018-11-14 16:20  咩阿  阅读(172)  评论(0编辑  收藏  举报