文档章节

mybatis学习之入门实例

c
 caiyezi
发布于 2016/11/08 20:23
字数 969
阅读 1
收藏 0

测试版本

mybatis:3.2.8

数据库:mysql

项目结构

jar包准备

mybatis-3.2.8.jar

mysql-connector-java-5.1.39-bin.jar

junit-4.4.jar

log4j-1.2.17.jar

配置文件

1、jdbc.properties配置文件:

jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.1.0.1:3306/db_mybatis
jdbc.username=root
jdbc.password=root

2、mybatis主要配置文件,mybatis-config.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>
    
    <properties resource="jdbc.properties"></properties>
    <typeAliases>
        <typeAlias type="com.cz.model.Student" alias="Student"/>        <!-- 类型别名 -->
    </typeAliases>
    
    <environments default="development">        <!-- 默认开发环境 -->
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="com/cz/mappers/StudentMapper.xml"/>
    </mappers>
    
</configuration>

其中typeAliases是为了指定类型别名,这样使用到com.cz.model.Student类时直接使用Student代替即可。

创建SqlSessionFactoryUtil工具类

该工具类主要是加载mybatis配置文件并通过相应的builder生成session工厂,再从工厂产生sql session对象,这里使用到了单例设计模式(懒汉式):

package com.cz.utill;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlSessionFactoryUtil {

    private static SqlSessionFactory sqlSessionFactory;

    private SqlSessionFactoryUtil() {}

    private static SqlSessionFactory getSqlSessionFactory() {
        if (sqlSessionFactory == null) {
            // 读取mybatis配置
            InputStream inputStream = null;
            try {
                inputStream = Resources.getResourceAsStream("mybatis-config.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sqlSessionFactory;
    }
    
    public static SqlSession openSession(){
        return getSqlSessionFactory().openSession();
    }
}

创建实体映射类

实体类Student.java,这里只有三个属性:

package com.cz.model;

public class Student {
    
    private Integer id;
    private String name;
    private int age;
    
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    public Student() {
        super();
    }
    
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
}

编写Dao接口

mybatis支持传统的类似hibernate的Dao层封装数据库操作,也支持面向mapper.xml映射文件的动态sql类型,如果使用传统的Dao数据库编程模型的话,需要在相应的Dao类中注入sql session工厂对象(一般通过构造注入),这里使用后一种方式即mapper配置:

package com.cz.mappers;

import java.util.List;

import com.cz.model.Student;

public interface StudentDao {
    /**
     * 新增
     * @param student
     * @return
     */
    public int add(Student student);
    /**
     * 修改
     * @param student
     * @return
     */
    public int update(Student student);
    /**
     * 删除
     * @param student
     * @return
     */
    public int delete(Integer id); 
    /**
     * 根据id查找 
     * @param id
     * @return
     */
    public Student findById(Integer id);
    /**
     * 查找 
     * @param id
     * @return
     */
    public List<Student> find();
}

mapper.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.cz.mappers.StudentDao">
    
    <resultMap type="Student" id="StudentResult">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
    </resultMap>
    
    <!-- 插入 -->
    <insert id="add" parameterType="Student">
        insert into t_student values(null,#{name},#{age})
    </insert>
    
    <update id="update" parameterType="Student">
        update t_student set name = #{name},age = #{age} where id = #{id}
    </update>
    
    <delete id="delete" parameterType="Integer">
        delete from t_student where id = #{id}
    </delete>
    
    <select id="findById" resultMap="StudentResult" parameterType="Integer">
        select * from t_student where id = #{id}
    </select>
    
    <select id="find" resultMap="StudentResult">
        select * from t_student
    </select>
</mapper>

dao接口跟mapper文件的对应关系如下:

添加log4j日志记录

添加jar包:log4j-1.2.17.jar

编写测试类StudentServiceTest.java:

package com.cz.service;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;

import com.cz.mappers.StudentDao;
import com.cz.model.Student;
import com.cz.utill.SqlSessionFactoryUtil;

public class StudentServiceTest {
    
    public static Logger logger = Logger.getLogger(StudentServiceTest.class);
    
    public static void main(String[] args) {
        
        SqlSession sqlSession = SqlSessionFactoryUtil.openSession();
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);        //返回student dao接口
        int result = studentDao.add(new Student("张三", 20));
        sqlSession.commit();
        if (result > 0) {
            logger.info("测试成功");
        }
    }
    
}

使用junit单元测试

添加junit-4.4.jar,单元测试代码:

package com.cz.test;

import java.util.Iterator;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.cz.mappers.StudentDao;
import com.cz.model.Student;
import com.cz.utill.SqlSessionFactoryUtil;

public class StudentTest {

    public static Logger logger = Logger.getLogger(StudentTest.class);
    SqlSession sqlSession = null;
    StudentDao studentDao = null; // 返回student dao接口

    @Before
    public void setUp() throws Exception {
        sqlSession = SqlSessionFactoryUtil.openSession();
        studentDao = sqlSession.getMapper(StudentDao.class);
        logger.info("开始执行了");
    }

    @After
    public void tearDown() throws Exception {
        sqlSession.close();
        logger.info("执行结束了");
    }

    @Test
    public void testAdd() throws Exception {
        Student student = new Student("admin", 22);
        int result = studentDao.add(student);
        sqlSession.commit();
        if (result > 0) {
            logger.info("添加成功了");
        }
    }

    @Test
    public void testUpdate() throws Exception {
        Student student = new Student(24, "xxxxxxx", 21);
        int result = studentDao.update(student);
        sqlSession.commit();
        if (result > 0) {
            logger.info("修改成功了");
        }
    }

    @Test
    public void testDelete() throws Exception {
        int result = studentDao.delete(26);
        sqlSession.commit();
        if (result > 0) {
            logger.info("删除成功了");
        }
    }
    
    @Test
    public void testFindById() throws Exception {
        Student student = studentDao.findById(25);
        System.out.println(student.toString());
        sqlSession.commit();
    }

    @Test
    public void testFind() throws Exception {
        List<Student> students = studentDao.find();
        // Iterator<Student> iterator = students.iterator();
        // while (iterator.hasNext()) {
        // System.out.println(iterator.next());
        // }
        // for(Student s:students){
        // System.out.println(s.toString());
        // }
        Student student = null;
        for (int i = 0; i < students.size(); i++) {
            student = students.get(i);
            System.out.println(student.toString());
        }
        sqlSession.commit();
    }
}

测试结果:

本文转载自:http://www.cnblogs.com/vipzhou/p/5629216.html

共有 人打赏支持
c
粉丝 1
博文 108
码字总数 0
作品 0
西安
程序员
MyBatis学习笔记---入门

MyBatis学习笔记 一、数据库与数据表的创建 1.创建数据库 2.创建数据表

错过的小猴子
06/27
0
0
MyBatis框架教程「入门起步」

今天我们就踏上学习Mybatis框架的旅程,在SSM框架中Mybatis框架是dao层的一个解决方案。相当于传统Servlet+JavaBean开发模式中JDBC的作用。具体关于MVC架构的知识可以移步「从零学习Spring ...

技术小能手
07/30
0
0
MyBatis学习笔记系列教程

【MyBatis学习笔记】系列之预备篇一:ant的下载与安装 【MyBatis学习笔记】系列之预备篇二:ant入门示例 【MyBatis学习笔记】系列之一:MyBatis入门示例 【MyBatis学习笔记】系列之二:MyBat...

HenrySun
2016/10/15
19
0
如何在MyBatis-3.2.7中使用Log4j2 rc2——MyBatis学习笔记之十九

前天我上传了我的MyBatis系列课程(http://edu.51cto.com/course/course_id-1110.html)的第六讲,主要内容是如何使用Log4j2(具体版本为v2.0-rc1)为MyBatis 3.2.7配置日志。实际上目前最新...

NashMaster2011
2014/07/09
0
0
MyBatis 源码分析——介绍

笔者第一次接触跟MyBatis框架是在2009年未的时候。不过那个时候的他并不叫MyBatis,而是叫IBatis。2010年的时候改为现在的名字——MyBatis。这几年过去了,对于笔者来讲有一点陌生了。而且那...

Java小铺
08/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

[MicroPython]STM32F407开发板驱动OLED液晶屏

1.实验目的 1.学习在PC机系统中扩展简单I/O 接口的方法。 2.进一步学习编制数据输出程序的设计方法。 3.学习 F407 Micropython开发板控制OLED显示字符。 2.所需元器件 F407 Micropython开发板...

bodasisiter
34分钟前
0
0
php require和include 相对路径一个有趣的坑

以前总是被教育,不要使用相对路径,这样性能比较差,但是相对路径的问题不仅仅是性能哦,看下面这里例子 这是项目结构 .├── main.php├── t│ ├── t1.php│ └── t2.php└─...

anoty
34分钟前
17
0
x64技术之SSDT_Hook

测试环境: 虚拟机: Windows 7 64bit 过PG工具 驱动加载工具 PCHunter64 系统自带的计算器和任务管理器等 实现思路: 实际思路与win32的思路一样.都是替换SSDT表里边的函数地址.不过微软被搞怕...

simpower
36分钟前
0
0
TreeMap源码分析,看了都说好

一、简介 TreeMap最早出现在JDK 1.2中,是 Java 集合框架中比较重要一个的实现。TreeMap 底层基于红黑树实现,可保证在log(n)时间复杂度内完成 containsKey、get、put 和 remove 操作,效率很...

Java小铺
46分钟前
0
0
协变、逆变

概念 假设 A、B表示类型 ≤ 表示继承关系 f<⋅>表示类型转换 若A ≤ B,则 A是B的子类,B是A的超类 协变、逆变 什么是型变?型变(type variance)允许对类型进行子类型转换。 为了下面讲解先...

obaniu
52分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部