Mybatis入门&配置文件&映射文件

这几天很忙,一直断断续续的在学习Mybatis,这篇文章先总结一下Mybatis的配置文件和映射文件。

1.配置环境

首先得现在相应的jar包,点击这里下载,下载好后,进行解压,建议把源码包一起下载,因为里面不止有源码,还有配置文件和映射文件的模板,到时我们可以直接拷贝进项目。
这里写图片描述

解压出来后,目录如下
这里写图片描述

这里写图片描述
把jar包导入相应的目录结构下就可以进行开发了。


2.配置文件

配置文件的目录结构如下
这里写图片描述
这里我就记录一下environments的配置,因为其他的我还没用到。

在我们解压出来的源码包里,mybatis-3-mybatis-3.4.6-source\src\test\java\org\apache\ibatis\submitted\complex_property目录下有一个Configuration.xml,我们把它拷贝进项目中。

environments主要配置的就是连接的数据库,比如我连接的MySQL数据库。配置如下

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC">
            <property name="" value=""/>
        </transactionManager>
        <dataSource type="UNPOOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8"/>
            <property name="username" value="root"/>
            <property name="password" value="1311664842"/>
        </dataSource>
    </environment>
</environments>

这个总的配置文件应该就和Hibernate的hibernate.cfg.xml作用大概类似,和数据库进行连接,加入映射文件等。


3.映射文件

映射文件的目录结构如下
这里写图片描述

一个项目中可以有好多映射文件,映射文件的主要作用就是配置JavaBean实体类和数据库表的对应关系以及定义一些SQL语句。

我先定义一个Message类

public class Message implements Serializable{ 
    private static final long serialVersionUID = 1L; 
    private int id; 
    private String command; 
    private String description; 
    private String content; 
    public Message() {}
}

该类中有四个属性,分别对应我数据库中message表的四个属性。

接着我们来配置该实体类的映射文件Message.xml。同样在mybatis-3-mybatis-3.4.6-source\src\test\java\org\apache\ibatis\submitted\complex_property目录下有一个User.xml,我们把它拷贝进项目,修改一下。

<!-- 一个名字空间 -->
<mapper namespace="Message">
    <!-- 和数据库的表字段相对应 ,type表示相应的实体类-->  
    <resultMap type="com.codeliu.bean.Message" id="MessageResult">  
        <!-- 主键  column表示数据库中的字段,property表示实体类对应的属性-->    
        <id column="id" jdbcType="INTEGER" property="id"/>    
        <result column="command" jdbcType="VARCHAR" property="command"/>    
        <result column="description" jdbcType="VARCHAR" property="description"/>    
        <result column="content" jdbcType="VARCHAR" property="content"/>  
    </resultMap> 
    <!-- 同一个命名空间下的id要唯一 -->  
    <select id="getList" resultMap="MessageResult" parameterType="com.codeliu.bean.Message">    
        select id,command,description,content from message
        <where>   
            <if test="command != null and !&quot;&quot;.equals(command.trim())">    
                and command = #{command}    
            </if>    
            <if test="description != null and !&quot;&quot;.equals(description.trim())">    
                and description like '%' #{description} '%'    
            </if>  
        <where>
    </select>
</mapper>

上面的Message.xml配置了实体类和数据库表的对应关系,同时还有一条Select语句。在select语句中,我们用了where标签,如果where后面的条件都不成立,则直接输出where前的语句,这样就消除了动态拼接SQL的很多麻烦。

这里还用到了OGNL表达式,Mybatis中的OGNL表达式的规则如下
这里写图片描述
同时我们还看到在if标签中,我们可以像写Java语句一样,进行条件的判断,只是记得特殊符号要进行转义,比如双引号写成" OGNL表达式我也是第一次听,所以了解不是太多,恩只能写这么多。

当然,在该配置文件中还可以写delete,insert和update。写完该映射文件之后,还有一件重要的事,那就是在配置文件中进行配置。

<mappers>  
    <!-- 可以配置多个 -->    
    <mapper resource="com/codeliu/config/sqlxml/Message.xml"/>  
</mappers>

配置完之后,我们就可以试试从数据库中取数据了。


4.log4j日志文件

学习过程中,我还学到了log4j日志文件的一些简单配置和应用,在进行取数据之前,我再总结一下log4j的配置。

首先还是得导入jar包,在我们下载的Mybatis里的lib目录下,就包含了这个jar包,把它导进项目即可。

log4j很强大,可以输出信息到日志文件中等等,但我现在只会一点点,那就是按格式输出到控制台。

还是在Mybatis源码文件中的mybatis-3-mybatis-3.4.6-source\src\test\java目录下,有一个log4j.properties,我们把它考皮进来,修改一下。

#日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,定义低的优先级则高的也会显示
log4j.rootLogger=DEBUG, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
#%d:产生日志的时间; 
#%t:线程名称; 
#%p:日志级别,DEBUG; 
#-5:至少占5位字符,不够的话用空格补齐,放在右边 
#%c:输出日志的类的全名,包括包名 
#%m:附加信息 
#%n:换行 
log4j.appender.Console.layout.ConversionPattern=%d[%t] %-5p[%c]-%m%n
log4j.logger.org.apache=INFO

具体可以看看这篇文章http://www.codeceo.com/article/log4j-usage.html

做完这些,我们就可以开始从数据库读数据了。


5.使用Mybatis从数据库读文件

public class DBAccess { 
    public SqlSession getSqlSession() throws IOException { 
        // 读取配置信息里的数据库连接 
        Reader reader = Resources.getResourceAsReader("com/codeliu/config/Configuration.xml");
        // 获取sqlSessionFactory 
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 
        // 获取sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); 
        return sqlSession; 
    }
}

上面的代码先读取配置文件中的配置,然后获取一个sqlSession,SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。

接下来,我们就看看怎么使用sqlSession执行映射文件中的sql语句。

Message message = new Message(); 
List<Message> messages = null;
message.setCommand(command); 
message.setDescription(description); 
// 读取Message.xml中的sql语句 
messages = sqlSession.selectList("Message.getList", message); 
sqlSession.commit();

还记得我上面映射文件中写的select语句,上面的代码执行的就是Message.xml中的查询语句。selectList函数中传入了两个参数,第一个是查询语句的id,这个在一个名字空间中是唯一的。第二个是Message类的实例,通过它,我们就可以把它的两个属性传入sql语句中。最后记得commit,因为Mybatis默认是不自动提交的。同时还要记得关闭sqlSession。

sqlSession.close();

启动tomcat,然后在网页中运行(当然,这里我省略了很多比如相关的Servlet,大家自己补充)。

2018-05-09 09:45:21,094[http-bio-8080-exec-9] DEBUG[Message.getList]-==> Preparing: select id,command,description,content from message where 1=1 and command = ? and description like '%' ? '%' 
2018-05-09 09:45:21,097[http-bio-8080-exec-9] DEBUG[Message.getList]-==> Parameters: 查看(String), 精彩(String)
2018-05-09 09:45:21,340[http-bio-8080-exec-9] DEBUG[Message.getList]-<== Total: 1

上面是控制台输出的日志,这是log4j的效果,通过这个,我们就可以看得清清楚楚了。首先Mybatis先把映射文件中的OGNL表达式替换成?,然后使用我们的输入条件把?进行替换,最后输出查询结果。



大概说的就是这么多,最后再发一些资料。

Mybatis文档,点击这里

OGNL文档,点击这里



个人博客 http://www.codeliu.com,欢迎志同道合的朋友!

猜你喜欢

转载自blog.csdn.net/a_helloword/article/details/80249614