我的第一个MaBatis程序

我的第一个mybatis程序

1、新建一个普通的java工程即可,因为mybatis框架封装了JDBC。写一个main方法即可

2、引入相关的jar包

mybatis-3.4.5.jar(mybatis核心jar)

mysql-connector-java-5.1.xx-bin.jar(mysql数据库驱动jar)

3、从XML中构建SqlSessionFactory

官方文档

我的第一个MaBatis程序

通过以上描述可以提取哪些信息?

  • mybatis中有一个XML文件
  • mybatis中有一个类:SqlSessionFactory
  • SqlSessionFactory对象的创建依赖XML文件
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

通过以上代码的第一行可以得出:

  • mybatis有一个配置文件叫做:mybatis-config.xml

  • mybatis-config.xml文件存放在类路径中

  • mybatis框架默认从类的根路径下作为起点开始查找资源

    ? 什么是类路径?

    ? bin是类的根路径

    ? eclipse当中可以看到src(src可以等同看做类的根路径)

在src这个类的根路径下新建一个mybatis-config.xml文件,修改main方法代码:

String resource = "mybatis-config.xml";

编辑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="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

修改:

<?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://localhost:3306/wkcto?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    
    <!--通过这里的配置我们可以看出,mybatis还有另一个配置文件,专门编写sql语句的-->
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

有一点需要注意:在xml文件中,

&amp;

代表&

mybatis-config.xml:核心配置文件,主要配置连接数据库的信息,以及“sql语句配置文件”的路径。

4、提交一个sql语句的配置文件

通常这种文件一般都叫做:sql映射文件(例如起名SqlMapper.xml)。

在类路径下创建SqlMapper.xml

修改相应的配置位置(mybatis-config.xml):

<mappers>
    <mapper resource="SqlMapper.xml"/>
</mappers>

5、编辑SqlMapper.xml文件

官方文档

我的第一个MaBatis程序

<?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="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

6、关于mybatis的核心API:SqlSession对象

package com.wkcto.mybatis.test;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisTest01 {
    public static void main(String[] args) {

        SqlSession sqlSession = null;

        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            //事务自动提交机制关闭,相当于:conn.setAutoCommit(false);
            //SqlSession对象等同看做Connection,专门用来执行sql语句的一个会话对象
            //开启事务
            sqlSession = sqlSessionFactory.openSession();

            // do work(执行核心业务逻辑)

            // 没有出现异常,则事务结束,提交
            sqlSession.commit();
        } catch (IOException e) {
            //出现异常则回滚
            if (sqlSession != null){
                sqlSession.rollback();
            }
            e.printStackTrace();
        } finally {
            //关闭资源
            if (sqlSession != null) {
                sqlSession.close();
            }
        }

    }
}

我的第一个MaBatis程序

我的第一个MaBatis程序

7、查询所有的学生

MyBatisTest01类:

// do work(执行核心业务逻辑)
// 获取所有的学生,返回List集合,List集合中存储Student
List<Student> studentList = sqlSession.selectList("getAll");

SqlMapper.xml配置文件:

    <select id="getAll" resultType="com.wkcto.mybatis.domain.Student">
        select
          id as sid,name as sname,birth as sbirth
        from
          tb1_student
    </select>

可以看到,sqlSession.selectList("getAll");里面的getAll,就是配置文件中sql语句的唯一标识。

为了接收返回结果,创建了一个Student的类。

个人这么理解,先执行sql语句,查询到的结果给谁?给resultType="com.wkcto.mybatis.domain.Student"这个类,然后mybatis框架会自动赋值给Student,注意sql语句列的别名sid 对应 Student类中的 private String sid,这样数据才能匹配得上。

整体代码:

MyBatisTest01类:

package com.wkcto.mybatis.test;

import com.wkcto.mybatis.domain.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest01 {
    public static void main(String[] args) {

        SqlSession sqlSession = null;

        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            //事务自动提交机制关闭,相当于:conn.setAutoCommit(false);
            //SqlSession对象等同看做Connection,专门用来执行sql语句的一个会话对象
            //开启事务
            sqlSession = sqlSessionFactory.openSession();

            // do work(执行核心业务逻辑)
            // 获取所有的学生,返回List集合,List集合中存储Student
            List<Student> studentList = sqlSession.selectList("getAll");

            for (Student s : studentList) {
                System.out.println(s.getSid()+","+s.getSname()+","+s.getSbirth());
            }

            // 没有出现异常,则事务结束,提交
            sqlSession.commit();
        } catch (IOException e) {
            //出现异常则回滚
            if (sqlSession != null){
                sqlSession.rollback();
            }
            e.printStackTrace();
        } finally {
            //关闭资源
            if (sqlSession != null) {
                sqlSession.close();
            }
        }

    }
}

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://localhost:3306/wkcto?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--通过这里的配置我们可以看出,mybatis还有另一个配置文件,专门编写sql语句的-->
    <mappers>
        <mapper resource="SqlMapper.xml"/>
    </mappers>
</configuration>

SqlMapper.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">
<mapper namespace="org.mybatis.example.BlogMapper">

    <select id="getAll" resultType="com.wkcto.mybatis.domain.Student">
        select
          id as sid,name as sname,birth as sbirth
        from
          tb1_student
    </select>

</mapper>

Student - javabean类:

package com.wkcto.mybatis.domain;

public class Student {
    private String sid;
    private String sname;
    private String sbirth;

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSbirth() {
        return sbirth;
    }

    public void setSbirth(String sbirth) {
        this.sbirth = sbirth;
    }
}

运行结果:

我的第一个MaBatis程序

成功!

总结

1、创建一个普通的java类

2、引入mybatis和jdbc的jar包

3、在类路径下创建一个mybatis-config.xml配置文件

4、普通java类指定mybatis-config.xml的位置,并创建SqlSessionFactory对象

5、配置mybatis-config.xml

6、在类路径下创建执行sql语句的SqlMapper.xml配置文件,并在mybatis-config.xml中指定SqlMapper.xml的位置

7、从 SqlSessionFactory 中获取 SqlSession

SqlSession session = sqlSessionFactory.openSession();//开启事务

8、sqlSession通过调用selectList()方法执行sql语句

9、到SqlMapper.xml编写sql语句

<select id="sql语句的唯一id" resultType="返回结果给哪一个类">
	sql语句
</select>

并在selectList()指定这个唯一的sql id

10、创建接收返回结果的Student javabean类,类的属性名要能对上sql查询结果的列名

11、处理List集合中存放的Student对象,例如遍历啊之类的

12、处理异常、关闭资源之类的

我的第一个MaBatis程序

上一篇:面向对象编程


下一篇:Markdown基础语法