发表于: 2018-03-16 15:55:53

1 538


今天完成的事情:

使用Mybatis连接数据库,为什么不用实现层呢?

摘抄一段网上别人的总结,

Mybatis实现了接口绑定,使用更加方便。

 

      ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。



那么,想要使用Mybatis,自然要使用到Mybatisjar包,之前我们是根据别人的例子往maven中加入依赖的,复制别人的依赖就好了,那么如果我们需要的jar包版本与别人不同,或者是我们有自己需要的jar 包,依赖去哪里找呢?

我找到一个可以查依赖的网站

http://mvnrepository.com/

进入网站,输入Mybatis

自然是选择用的人最多的

我的选择是较新的用的人最多的版本3.4.1,点左边的3.4.1

就查到依赖了,发现这里好像还有其他工具的依赖,比如大名赫赫的Gradle,好像是maven更进一步的工具,有机会一定要去学一下。

再加上之前已经有的mysql的依赖,有了这两个jar包其实就可以开始我们的工程了。

新建一个maven项目

加入依赖

还是用之前那张表,所以建立的实体类Student和前面一样。

 

在工程下建立一个config.xml在里面配置SQl的运行环境。

 

<?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>

    <typeAliases>

        <typeAlias alias="Student" type="com.iotek.entity.Student"/>

    </typeAliases>

 

    <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/practice"/>

                <property name="username" value="root"/>

                <property name="password" value="zhangfeng8751"/>

            </dataSource>

        </environment>

    </environments>

   

    <mappers>

        <mapper resource="student.xml"/>

    </mappers>

</configuration>

再建立一个student.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="com.xrq.StudentMapper"> <select id="selectStudentById" parameterType="int" resultType="Student"> <![CDATA[ select * from student where studentId = #{id} ]]> </select> </mapper>

可以看出连sql语句都写在了配置文件中。

创建一个类写代码


import java.io.IOException;

import java.io.Reader;

 

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 com.iotek.entity.Student;

 

public class StudentOperator

{

    private static StudentOperator instance = new StudentOperator();

   

    protected static SqlSessionFactory ssf;

    protected static Reader reader;

   

    static

    {

        try

        {

            reader = Resources.getResourceAsReader("config.xml");

            ssf = new SqlSessionFactoryBuilder().build(reader);

        }

        catch (IOException e)

        {

            e.printStackTrace();

        }

    }

 

    private StudentOperator()

    {

       

    }

   

    public static StudentOperator getInstance()

    {

        return instance;

    }

   

    public Student selectStudentById(int studentId)

    {

        SqlSession ss = ssf.openSession();

        Student student = null;

        try

        {

            student = ss.selectOne("com.iotek.StudentMapper.selectStudentById", 1);

        }

        finally

        {

            ss.close();

        }

        return student;

    }

}

写一个Test来测试一下

执行结果

其实和JdbcTemplate相比。Mybatis可以说像又可以说不像。像的是它也是依靠配置文件来取代了类似于数据库连接的代码,也是利用依靠配置文件来取代冗余代码的思想。不像的地方则是Mybatis连sql语句都写到了配置文件当中,同样的还有封装数据的对象,也在配置文件当中,从数据库中查到的数据,直接就封装到对象中返回了。从这一点也可以看出这些大量冗余的代码是多么令程序员头痛的事,不过还好有大神开发这些好用的jar包,造福我们啊。

今天图书馆提早清场,好像做不了更多的事了。

明天计划的事情:

对这两种数据库连接方式进行练习,之前完成的都是copy别人的例子,虽然都能看懂但看懂和会用还是有很大的差距的,希望自己能联系实际做一点练习。

遇到的问题:

虽说是参考别人的例子但也不是完全一样,比如包的名称,创建数据表,创建的实体类啊,这些细小的改动都体现在配置文件里。今天测试时一开始返回的学生对象是null,我检查了好几遍配置信息觉得应该没问题。后来想了想既然数据库与实体类直接绑定在了一起,没准定义的字段名要一样,修改之后竟然真的成功了,看了看例子果然它们也是一样的。还好是自己建的表和实体类不然就发现不了这个问题了,说明果然自己还是要去实现看看的,发现潜在的漏洞。

收获:


学会了使用Mybatis连接数据库,xml文件的配置方法,感觉xml接触多了以后已经感觉不陌生了。


返回列表 返回列表
评论

    分享到