mybatis入门基础详解

mybatis入门详解

Mybatis框架简介
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
1.mybatis运行过程
mybatis入门基础详解
1、 sqlmapconfig.xml文件是mybatis全局配置文件,配置了mybatis运行相关的环境。
2、 mapper.xml 是sql映射文件,文件中主要配置了对数据库操作的sql语句,文件需要在sqlmapconfig.xml文件在进行载入。
3、 sqlSessionFactory 工厂会话,通过主配置文件中的信息构造出来。
4、 sqlSession 通过会话工厂创建,用来操作数据库。
5、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
6、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

  1. 配置开发环境
    2.1添加相关jar包。
    mybaits框架依赖jar包:
    mybatis入门基础详解
    mybatis-3.2.7.jar —mybatis的核心包
    mybatis-3.2.7.pdf–mybatis使用手册
    如果您使用Maven,只需将以下依赖项添加到您的pom.xml:
<dependency>
 <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>
<!--以下是mysql数据库驱动和log4j jar包-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

除了添加Mybatis jar包还需要添加具体数据库驱动。
2.2 添加mybatis的主配置文件。
此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
主配置文件的名称可以随意命名的,一般将其命名为mybatis-config.xml,这里也将配置文件命名为mybatis-config.xml,如果创建的是web项目将配置文件房子src目录下,如果是maven项目放在main/resources目录下。
web项目:
mybatis入门基础详解
maven项目:
mybatis入门基础详解
2.3 mybatis-config.xml

<?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="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydatabase"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
 	<mappers>
        <!--注册映射文件-->
        <mapper resource="com/Gorilla1024/dao/UserMapper.xml"/>
    </mappers>
</configuration>

我这里数据库配置信息默认为mysql数据库,账号密码:root 123456 请按照实际情况修改。
2.4 映射文件

<?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">
<mapper namespace="com.Gorilla1024.dao.UserMapper">
    <!--编写sql语句-->
</mapper>

2.4 创建数据库
现在创建一个测试的数据库。
数据库已经提前创建好了,命名mydatabase 。
现在创建一张用户信息表,包括用户ID,密码,姓名,手机号,性别。

DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
  `UseId` varchar(20) NOT NULL,
  `usePassword` varchar(20) NOT NULL,
  `UseName` varchar(40) NOT NULL,
  `Phone` varchar(15) NOT NULL,
  `UseSex` varchar(4) NOT NULL,
  PRIMARY KEY (`UseId`)
) ;

2.5 创建对应数据库的Java对象。
这里在 com.Gorilla1024.dao包下创建UserInfo;

package com.Gorilla1024.dao;

public class UserInfo {
    private String UseId;
    private String usePassword;
    private String UseName;
    private String Phone;
    private String UseSex;
    
 	public UserInfo(){};
    public UserInfo(String useId, String usePassword, String useName, String phone, String useSex) {
        UseId = useId;
        this.usePassword = usePassword;
        UseName = useName;
        Phone = phone;
        UseSex = useSex;
    }

    public String getUsePassword() {
        return usePassword;
    }

    public void setUsePassword(String usePassword) {
        this.usePassword = usePassword;
    }

    public String getUseName() {
        return UseName;
    }

    public void setUseName(String useName) {
        UseName = useName;
    }

    public String getPhone() {
        return Phone;
    }

    public void setPhone(String phone) {
        Phone = phone;
    }

    public String getUseSex() {
        return UseSex;
    }

    public void setUseSex(String useSex) {
        UseSex = useSex;
    }

    public String getUseId() {
        return UseId;
    }

    public void setUseId(String useId) {
        UseId = useId;
    }
}

3 mybatis实现简单的CRUD

3.1 插入信息。
先编写sqlmapper.xml sql映射。

<?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"> 
<mapper namespace="com.Gorilla1024.dao.UserMapper">
   <insert id="insertUser" parameterType="com.Gorilla1024.dao.UserInfo">
        insert  into UserInfo values (#{UseId},#{usePassword},#{UseName},#{Phone},#{UseSex})
    </insert>
</mapper>
</mapper>

id 是唯一标识这个sql映射,在同一个命名空间中保持唯一。
parameterType 是作为输入参数类别配置,mybatis会自动将传入参数对象一一配对赋值给#{xxx} 保持xxx于参数对象内的变量名相同。(可以省略不写)。

测试代码

    public void test2(){
        SqlSession sqlsession=null;
        UserInfo userinfo=new UserInfo("1","123456","Gorilla1024","18143375977","男");
        try {
          	//加载核心文件
            InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
            //创建sqlSessionFactory
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            //创建会话
            sqlsession= sqlSessionFactory.openSession();
            //执行sql语句  一个参数为sqlmapper文件中的ID,第二个为创建的user对象。
            sqlsession.insert("insertUser",userinfo);
            //提交事务,不提交数据库不会发生改变。
            sqlsession.commit();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

结果
mybatis入门基础详解
3.2 查询信息
添加sql映射。

  <select id="selectUser" resultType=""com.Gorilla1024.dao.UserInfo" >
       SELECT *  FROM UserInfo;
    </select>

resultType 设置查询结果集类型,结果集会对应到UserInfo对象。

测试代码

    public void test2(){
        SqlSession sqlsession=null;
            List<UserInfo> list=new ArrayList<UserInfo>();
        try {
          	//加载核心文件
            InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
            //创建sqlSessionFactory
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            //创建会话
            sqlsession= sqlSessionFactory.openSession();
            //执行sql语句  一个参数为sqlmapper文件中的ID,第二个为创建的user对象,将结果赋值给UserInfo对象的集合。
              list= sqlsession.selectList("selectUser");          
              System.out.println(list);
            //提交事务,不提交数据库不会发生改变。
            sqlsession.commit();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

结果
mybatis入门基础详解

更新,删除类似,这里就省略掉了。
如有错误欢迎指出,谢谢阅读。