使用maven创建项目配置mybatis

一个mybatis的构建需要六部分:依赖包的导入,创建pojo,配置核心配置文件,配置映射文件,创建mybatis的工具类,测试

1.首先在myeclipse中创建一个maven项目,然后导入依赖包

<dependencies>
        <!-- mybatis核心包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <!-- jdbc的包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
        <!-- 查看日志文件的log4j包 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <!-- 测试用的依赖包 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>

2.创建一个Student的pojo

注意:如果数据表字段是int类型的数据,建议pojo中使用Integer来修饰,因为int的默认值是0,不是null,可能在进行sql操作时出错,

private Integer id;

    private String sname;

    private String address;

    private String sex;

    private Integer tid;

    public Integer getId() {
        return id;
    }

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

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname == null ? null : sname.trim();
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address == null ? null : address.trim();
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex == null ? null : sex.trim();
    }

    public Integer getTid() {
        return tid;
    }

    public void setTid(Integer tid) {
        this.tid = tid;
    }

    @Override
    public String toString() {
        return "Student [id=" + id + ", sname=" + sname + ", address=" + address + ", sex=" + sex + ", tid=" + tid
                + "]";
    }

3.创建mybatis的核心配置文件

mybatis的核心配置文件并不像hibernate一样必须使用特定的名称,这里我创建的是mybatis.xml

在对jdbc的连接配置时,可以通过properties文件,也可以不使用,如果使用的话,需要在标签的最上面使用<properties resource="db.properties"></properties>来引入自己配置的properties文件,并在下面通过${}来引用properties中的属性名

<?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>
    <properties resource="db.properties"></properties>
    <!-- 接收数据库的数据源(元数据) default默认读取以下的配置 -->
    <environments default="mysql">
        <!-- 针对不同的数据库来配置元数据 id:区分元数据 -->
        <!-- 配置MySQL -->
        <environment id="mysql">
            <!-- 事务的管理交给jdbc管理 -->
            <transactionManager type="jdbc" />
            <!-- 不使用properties手动配置
                <dataSource type="pooled">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/test" />
                    <property name="username" value="root" />
                    <property name="password" value="root" />
                </dataSource> 
            -->
            <!-- 使用properties加载properties中的属性 -->
            <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>

        <!-- 配置Oracle -->
        <environment id="oracle">
            <!-- 事务的管理交给odbc管理 -->
            <transactionManager type="jdbc" />
            <dataSource type="pooled">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:oracle:thin:@localhost:1521/test" />
                <property name="username" value="scott" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="StudentMapper.xml" />
    </mappers>
</configuration>

 

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root

 

4.创建映射文件

<?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命名必须是唯一的,前期可以直接以所映射的pojo类的唯一路径来命名 -->
<mapper namespace="com.oracle.pojo.Student">
    <!-- 
        mybaits通过自己手动写sql语句来对数据库进行操作,select就是查询操作
        同样有update,delete,insert
        id:标识符,测试时调用的标识符来调用sql语句,相当于方法名
        resultType:返回值类型
        parameterType:传入的参数类型
        如果是引用数据类型的话,需要传入完整的路径.如:java.lang.String以及对象com.oralc.pojo.Student
        在下方的条件需要以#{}来占位,如果传入类型是对象型,需要与对象的属性名一致
     -->
    <select id="findStudentById" resultType="com.oracle.pojo.Student" parameterType="int">
        select * from student where id=#{id}
    </select>
    <select id="findAll" resultType="com.oracle.pojo.Student">
        select * from student
    </select>
</mapper>

5.创建mybatis的工具类

这里使用ThreadLocal类,用来绑定线程,当程序执行时作为一个线程,无论执行到dao层或是其他层,从该线程中获取的session都是同一个session

public class MybatisUtil {
    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            // 读取mybatis核心配置文件
            Reader reader = Resources.getResourceAsReader("mybatis.xml");
            // 创建会话工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static SqlSession getSession() {
        // 获取会话
        SqlSession sqlSession = threadLocal.get();
        if (sqlSession == null) {
            // 从会话工厂获取session
            sqlSession = sqlSessionFactory.openSession();
            // 绑定会话工厂
            threadLocal.set(sqlSession);
        }
        return sqlSession;
    }

    public static void close() {
        SqlSession sqlSession = threadLocal.get();
        if (sqlSession != null) {
            sqlSession.close();
        }
    }
}

 

6.测试

public class Test {
    private SqlSession session = null;

    @Before
    public void before() {
        //获取会话
        session = MybatisUtil.getSession();
    }

    @org.junit.Test
    public void add() {
        /**
         * 从会话中调用映射文件中的sql语句,为了防止不同的映射文件标识符重复,通过namespace.标识符来调用
         * 如果后面有参数的话,在后面添加参数
         */
        Student student = session.selectOne("com.oracle.pojo.Student.findStudentById",1);
        System.out.println(student);
        List<Student> studentList = session.selectList("com.oracle.pojo.Student.findAll");
        for (Student student2 : studentList) {
            System.out.println(student2);
        }
    }

    @After
    public void after() {
        session.commit();
        MybatisUtil.close();
    }
}

测试结果

 

 

posted @ 2019-08-20 16:42  emmmmmm哇咔咔  阅读(2668)  评论(0编辑  收藏  举报