【Mybatis从0到1-003】mybatis框架及简单入门程序

来源:互联网 发布:空气质量检测仪 知乎 编辑:程序博客网 时间:2024/06/07 18:04

mybatis是持久层的框架,是Apache下的顶级项目。2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。 Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

本文首先介绍mybatis的框架,之后通过id查询用户的基本信息作为入门程序。

其框架结构如下:


框架结构也同样是,我们进行操作的流程。

【1】为了便于程序开发,首先创建一个日志文件,便于将来错误的查看。创建log4j.properties文件,路径为:src\main\resources\log4j.properties,输入以下内容:

# Global logging configuration#开发环境日志要设置成debuglog4j.rootLogger=DEBUG, stdout# MyBatis logging configuration...log4j.logger.org.mybatis.example.BlogMapper=TRACE# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
【2】创建SqlMapConfig.xml文件,路径为:src\main\resources\SqlMapConfig.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>    <!-- 和spring整合后 environments配置将废除-->    <environments default="development">        <environment id="development">            <!-- 使用jdbc事务管理-->            <transactionManager type="JDBC" />            <!-- 数据库连接池-->            <dataSource type="POOLED">                <property name="driver" value="com.mysql.jdbc.Driver" />                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />                <property name="username" value="root" />                <property name="password" value="123" />            </dataSource>        </environment>    </environments>    <!-- 加载 映射文件 --></configuration>
【3】根据上面的框架,现在开始配置映射文件,需要注意,在后期的开发中,mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml,这里,我们暂时不用mapper代理进行开发,采用最为原始的方式进行开发,这也是从0到1的过程。

新建文件,起名字为User.xml,之所以用User,是因为,后面的内容我们将引入一个更删改查用户信息的入门例子,这也是为后面的开发所准备的。文件路径为:src\main\resources\sqlmap\User.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"><!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离注意:使用mapper代理方法开发,namespace有特殊重要的作用--><mapper namespace="test">    <!-- 在 映射文件中配置很多sql语句 -->    <!-- 需求:通过id查询用户表的记录 -->    <!-- 通过 select执行数据库查询    id:标识 映射文件中的 sql    将sql语句封装到mappedStatement对象中,所以将id称为statement的id    parameterType:指定输入 参数的类型,这里指定int型    #{}表示一个占位符号    #{id}:其中的id表示 接收输入 的参数,参数名称就是id,如果输入参数是简单类型,#{}中的参数名可以任意,可以value或其它名称    resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。-->    <select id ="findUserById" parameterType="int" resultType="po.User">        SELECT *FROM user WHERE id=#{id}    </select></mapper>
这段程序不懂不要紧,一点点来解释。这里配置的文件实现的要求是:通过id查询用户表的记录 。代码中有具体的解释。在映射文件中,
resultType="po.User"

表示执行SQL之后返回结果所对应的java对象类型,这里的po.User 中的User类可以看做是返回体,这个文件需要自己创建(当然,在后面,结合spring之后就能自动生成了,现在,我们先手动创建吧)在创建文件之前,还有一点千万注意,就是在SqlMapConfig.xml中加载映射文件。在SqlMapConfig.xml中加入以下代码:

<!-- 加载 映射文件 --><mappers>    <mapper resource="sqlmap/User.xml"/></mappers>

【4】创建User.java文件,路径为:src\main\java\po\User.java

public class User {    private int id;    private String username;// 用户姓名    private String sex;// 性别    private Date birthday;// 生日    private String address;// 地址//setter、getter方法及tostring方法略}
【5】上面都设置好之后,开始逻辑的程序编写吧。首先创建java文件,路径为:src\main\java\first\MyFirstMybatis.java,代码的逻辑,在上面的框架中都有提到,这里,简单叙述下:1.根据配置文件创建会话工厂(SqlSessionFactory);2.通过工厂得到SqlSession;3.通过SqlSession操作数据库。

code如下,先通过单元测试来测试下,我们的代码逻辑正确与否。

public class MyFirstMybatis {    // 根据id查询用户信息,得到一条记录结果    public void findUserByIdTest() throws Exception {        // mybatis配置文件        String resource = "SqlMapConfig.xml";        // 得到配置文件流        InputStream inputStream = Resources.getResourceAsStream(resource);        // 创建会话工厂,传入mybatis的配置文件信息        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        // 通过工厂得到SqlSession        SqlSession sqlSession = sqlSessionFactory.openSession();        // 通过SqlSession操作数据库        // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id        // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数        // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象        // selectOne查询出一条记录        User user = sqlSession.selectOne("test.findUserById", 1);        System.out.println(user);        // 释放资源        sqlSession.close();    }}

【6】最后一步,创建测试文件,进行单元测试。单元测试很简单,idea创建单元测试,这里简单说下简单操作流程。

6.1 鼠标光标放到上面代码的“MyFirstMybatis ”处,点击鼠标右键。如图:


6.2 点击“create new test”---->,之后按照图示操作。


6.3 点击OK,之后创建的文件路径为:src\test\java\first\MyFirstMybatisTest.java,在public void findUserByIdTest() throws Exception { }中贴入下面的代码:

// mybatis配置文件        String resource = "SqlMapConfig.xml";        // 得到配置文件流        InputStream inputStream = Resources.getResourceAsStream(resource);        // 创建会话工厂,传入mybatis的配置文件信息        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        // 通过工厂得到SqlSession        SqlSession sqlSession = sqlSessionFactory.openSession();        // 通过SqlSession操作数据库        // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id        // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数        // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象        // selectOne查询出一条记录        User user = sqlSession.selectOne("test.findUserById", 1);        System.out.println(user);        // 释放资源        sqlSession.close();
【7】到此,所有操作结束。点击run运行,将会看到我们通过id查询用户的基本信息。如下:


【8】最后,对比下,数据库的信息,看select的结果是否一致。

请继续关注后续内容,欢迎评论转发并给出指导意见!

原创粉丝点击