MyBatis HelloWorld

Posted esc_ai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis HelloWorld相关的知识,希望对你有一定的参考价值。

一、MyBatis简介


iBatis是apche的一个开源项目,2010年迁移到google code后改名为MyBatis,2013年前已到github.MyBatis是一个基于java的持久层框架,与hibernate相比更加简单。关于MyBatis和Hibernate的对比,可参考这篇博客: Hibernate与 MyBatis的比较.

二、MyBatis特点


  1. 开源的优秀持久层框架
  2. sql语句与代码分离
  3. 面向配置编程
  4. 支持复杂数据映射
  5. 动态sql

三、MyBatis开发环境搭建


工程目录:
这里写图片描述

3.1下载jar包

  1. mybatis-3.2.8.zip(3.2.8之后的jar包没有log4j,这一点我暂时也不知道为什么)
  2. mysql-connector,选择JDBC Driver for mysql下载。

3.2在mysql中新建数据库

MyBatis是一个持久层框架,也就是和数据库打交道的,mysql新建一个数据库用来做测试。

create database book

建立一张user表:

Create Table: CREATE TABLE `User` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `passWord` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) 

插入几条记录:

+----+----------+------------+
| id | username | passWord   |
+----+----------+------------+
|  1 | 小华     | xiaohua    |
|  2 | 柯南     | 666666     |
|  3 | 慕白     | 123456     |
|  4 | 小明     | xiaoming12 |
+----+----------+------------+

这样数据库准备好了,也可以在mysql图形界面中操作。

3.3配置开发环境

3.3.1新建java project

在eclipse中新建java project,命名为Mybatis HelloWorld

3.3.2导入jar包

单击工程名右键->build path->config build path->add external jars,加入以下jar包mysql-connector-java-5.1.38-bin.jarmybatis-3.2.8.jarasm-3.3.1.jarcglib-2.2.2.jarcommons-logging-1.1.1.jarjavassist-3.17.1-GA.jarlog4j-1.2.17.jarlog4j-api-2.0.2.jarlog4j-core-2.0.2.jarslf4j-api-1.7.5.jarslf4j-log4j12-1.7.5.jar

3.3.3配置log4j

在src目录下添加log4j.properties,log4j可用来打印sql查询语句:

log4j.rootLogger=DEBUG, CONSOLE

#Console
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

3.3.4 添加User.java

新建ucas.book.map、ucas.book.pojo、ucas.book.test包
在ucas.book.pojo包下新建User实体:

package ucas.book.pojo;

public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

3.3.5Mybatis配置文件

在ucas.book.map包下加入mybatis.xml和UserMapper.xml:

数据库连接和相关配置信息写在mybatis.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>

    <typeAliases>
        <typeAlias alias="User" type="ucas.book.pojo.User" />
    </typeAliases>


    <environments default="development">
        <environment id="development">
            <!-- 事务管理类型,JDBC表示直接使用JDBC的提交和回滚设置,依赖于数据源得到的连接来管理事务 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池POOLED表示使用数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/book?useSSL=true" />
                <property name="username" value="root" />
                <property name="password" value="napoay" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- SQL代码和映射信息配置文件 -->
        <mapper resource="ucas/book/map/UserMapper.xml" />
    </mappers>
</configuration>

sql代码写在UserMapper.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必须是唯一的,建议用该文件所在的包路径全类名 -->
<mapper namespace="ucas.book.map.UserMapper">
    <!-- select:表示这是一个查询操作 -->
    <!-- id:用来配合namespace来定位这个操作,也就是在调用时,将采用ucas.book.pojo.User.getUserById -->
    <!-- resultType:表示返回值类型,必须是全类名,MyBatis将自动为我们将查询结果封装成Student对象 -->
    <!-- parameterType:表示传进来的参数的类型,因为传的是id主键,所以是int型 -->
    <select id="getUserById" parameterType="int" resultType="ucas.book.pojo.User">
        <!-- #{id}:表示占位符,也就是调用时必须为其传一个id参数进来,注意是#不是$ -->
        select * from User where id = #{id}
    </select>
</mapper>

<select></select>中写的是通过id查询记录的sql语句。

3.3.6测试代码

package ucas.book.test;

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 ucas.book.pojo.User;

public class TestUser {
    public static void main(String[] args) {
        String resource = "ucas/book/map/mybatis.xml";
        Reader reader = null;
        SqlSession session;

        try {
            reader = Resources.getResourceAsReader(resource);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);

        session = factory.openSession();
        User user = session.selectOne("getUserById", 1);

        System.out.println("\\nusername:" + user.getUsername());

        session.close();

    }
}

结果:
这里写图片描述

以上是关于MyBatis HelloWorld的主要内容,如果未能解决你的问题,请参考以下文章

初探MyBatis之HelloWorld

markdown [mybatis参考]关于mybatis #mybatis的一些片段

初探MyBatis之HelloWorld

新建一个mybatis HelloWorld

MyBatis HelloWorld

mybatis学习(39):动态sql片段