转自:http://ccchhhlll1988-163-com.iteye.com/blog/1415621

基本目的:利用Mybatis完成对一个表简单的select、insert、update、delete操作。达到熟悉MyBatis基本用法的目的。 
用到的jar:MyBatis.jar,数据库驱动.jar(如mysql-connector.jar)

MyBatis的配置文件MyBatisConfig.xml。可以进行数据源和事务管理器的配置,以及其他影响MyBatis执行的变量

MyBatisConfig.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="config.properties"></properties>
 <!-- end properties -->
 <!-- 定义vo --> 
    <typeAliases>
        <typeAlias alias="User" type="com.mybatis.test.vo.User" />
    </typeAliases>
 <!-- end define -->
 <environments default="development">
  <environment id="development">
   <transactionManager type="JDBC" />
   <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>
 </environments>
 <mappers>
  <mapper resource="com/mybatis/test/maps/UserMapper.xml" />
 </mappers>
</configuration>

MyBatis的映射文件UserMapper.xml。文档中评价这个文件时奇迹发生的地方:

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">
<mapper namespace="com.mybatis.test.dao.UserDAO">
 <select id="selectUser" parameterType="int" resultType="User">
  select *
  from user where id = #{id}
 </select>
 <select id="selectAllUser" resultType="User">
  select id, username from
  user
 </select>
 <insert id="insertUser" parameterType="User">
  insert into user(username)
  values ( #{username})
 </insert>
 <update id="updateUser" parameterType="User">
  update user set
  username=#{username}, password=#{password} where id = #{id}
 </update>
 <delete id="deleteUser" parameterType="User">
  delete from user where
  username=#{username} and password=#{password}
 </delete>
</mapper>

UserMapper接口文件,该文件与UserMapper.xml有着某些地方一一对应的关系,注意哦。

代码:

package com.mybatis.test.dao;
import java.util.List;
import com.mybatis.test.vo.User;
public interface UserDAO {
    public User selectUser(int id);
    public List<User> selectAllUser();
    public int insertUser(User user);
    public void updateUser(User user);
    public void deleteUser(User user);
}

MyBatis文件,其中定义了产生SqlSessionFactory的工厂单例类。

代码:

package com.mybatis.test.util;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
 * @author chl 工厂单例模式,生成SqlSessionFactory实例。
 *
 */
public class MyBatis {
    private MyBatis() {
    };
    private static SqlSessionFactory ssf = null;
    public static SqlSessionFactory getSessionFactory() throws IOException {
        if (null == ssf) {
            String resource = "mybatisConfig.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            ssf = new SqlSessionFactoryBuilder().build(reader);
        }// if
        return ssf;
    }
}

User文件,定义了User javabean实体类。

package com.mybatis.test.vo;


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;
    }


@Override
    public String toString() {
        return "id is:" + id + " name is: " + username;
    }
}


userAction类,方法体中获取SqlSessionFactory实例,获得SqlSession,获取SqlMapper,然后调用映射的方法。

package com.mybatis.test.util;

import java.io.IOException;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.mybatis.test.dao.UserDAO;
import com.mybatis.test.vo.User;

/**
 * @author chl 对user的操作。 其中将SqlSession放于方法级范围。
 */
public class UserAction {


public void insert(User user) {
        SqlSessionFactory ssf = null;
        SqlSession session = null;
        try {
            ssf = MyBatis.getSessionFactory();
            session = ssf.openSession(true);// 设定事务自动提交(方式一)
            UserDAO userDAO = session.getMapper(UserDAO.class);


userDAO.insertUser(user);
            selectAll();
            System.out.println("==================================");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != session) {
                session.close();
                session = null;
            }
        }


}


public void update(User user) {
        SqlSessionFactory ssf = null;
        SqlSession session = null;
        try {
            ssf = MyBatis.getSessionFactory();
            session = ssf.openSession();
            UserDAO userDAO = session.getMapper(UserDAO.class);


userDAO.updateUser(user);


session.commit();// 设定事务自动提交(二)
            selectAll();
            System.out.println("==================================");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != session) {
                session.close();
                session = null;
            }
        }
    }


public void selectAll() {
        SqlSessionFactory ssf = null;
        SqlSession session = null;
        try {
            ssf = MyBatis.getSessionFactory();
            session = ssf.openSession();
            UserDAO userDAO = session.getMapper(UserDAO.class);


List<User> users = userDAO.selectAllUser();
            for (User u : users) {
                System.out.println(u.getUsername() + "    " + u.getId());
            }


System.out.println("session is null? " + (session == null));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != session) {
                session.close();
                session = null;
            }
        }
    }


public void delete(User user) {
        SqlSessionFactory ssf = null;
        SqlSession session = null;


try {
            ssf = MyBatis.getSessionFactory();
            session = ssf.openSession(true);
            UserDAO userDAO = session.getMapper(UserDAO.class);
            userDAO.deleteUser(user);


selectAll();
            System.out.println("==================================");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != session) {
                session.close();
                session = null;
            }
        }
    }


public static void main(String[] args) {
        UserAction userAction = new UserAction();


User user = new User();
        user.setUsername("horizon");
        user.setPassword("123456");
        userAction.delete(user);
    }
}


config.properties代码:

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

这是参照转载的网站代码修正的,转载的事务处理有点问题,在此进行了修改.....

MyBatis学习练习的更多相关文章

  1. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  2. MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合(转载)

      孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(八)--Mybatis3.x与Spring4.x整合 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: m ...

  3. MyBatis学习总结(七)——Mybatis缓存(转载)

      孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的 ...

  4. (原创)mybatis学习二,spring和mybatis的融合

    mybatis学习一夯实基础 上文介绍了mybatis的相关知识,这一节主要来介绍mybaits和spring的融合 一,环境搭建 1,jar包下载,下载路径为jar包 2,将包导入到java工程中 ...

  5. (原创)mybatis学习一,夯实基础

    一,what?(是什么) MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可 ...

  6. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...

  7. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  8. 【Todo】Mybatis学习-偏理论

    之前写过好几篇Mybatis相关的文章: http://www.cnblogs.com/charlesblc/p/5906431.html  <SSM(SpringMVC+Spring+Myba ...

  9. MyBatis学习系列三——结合Spring

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...

  10. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

随机推荐

  1. Research on Unsupervised Word Alignment Based on Inversion Transduction Grammar

    1.提出了一种基于特征函数和反向转录文法(ITG)的无监督词对齐模型,使用对数线性模型对文法规则的概率建模,先验知识可以通过特征函数的形式加入到模型里面,而模型仍然可以进行无监督训练.2. 在模型的参 ...

  2. C使用FILE指针文件操作

    文件的基本概念 所谓“文件”是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名.实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等.文件 ...

  3. phpcms学习总结

    文件目录结构 根目录 | – api 接口文件目录 | – caches 缓存文件目录 | – configs 系统配置文件目录 | – caches_* 系统缓存目录 | – phpcms phpc ...

  4. Java多线程学习总结--线程概述及创建线程的方式(1)

    在Java开发中,多线程是很常用的,用得好的话,可以提高程序的性能. 首先先来看一下线程和进程的区别: 1,一个应用程序就是一个进程,一个进程中有一个或多个线程.一个进程至少要有一个主线程.线程可以看 ...

  5. 在IIS 中如何配置URL Rewrite,并且利用出站规则保持被重写的Cookie的域

    Url Rewrite配置 xx.aa.com/bb/test1.aspx 会重写到 bb.aa.com/test1.aspx 具体怎么配置入站 出站规则 结果:

  6. TintTo和TintBy

    //创建标签 ); //设置位置 helloLabel.setPosition(cc.p(,)); //添加到layer ); //改变颜色,不可reverse ,,); //移动并同时改变颜色 he ...

  7. HDu 1001 Sum Problem 分类: ACM 2015-06-19 23:38 12人阅读 评论(0) 收藏

    Sum Problem Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  8. 做 fzu oj 1106 题目学到的

    题目如下 这道题的意识就是给一个数问是否可以又阶乘之和构成,而难点主要是在于如果是7的话就是1!+3!,并不是单纯的从1的阶乘开始加,而是没顺序的,所以这题就得用到递归. (大概就是函数自己调用函数自 ...

  9. HDU4513吉哥系列故事――完美队形II(manacher算法)

    这个比最长回文子串就多了一个条件,就是回文字串(这里相当于人的高度)由两端向中间递增. 才刚刚看了看manacher,在用模板A了一道题后,还没有完全理解manacher,然后就准备把这道题也直接带模 ...

  10. WinForm控件使用文章收藏整理完成

    对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, 不断补充充实, 完善这方面. 基础 - 常用控件 C# WinForm开发系列 - CheckBox/Button/Lab ...