只需要加入 mybatis-2.2.jar  和数据库驱动包即可

java代码实现的步骤

package com.yangwei.shop.test;

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;

import com.yangwei.shop.entity.User;
import com.yangwei.shop.util.MyBatisUtil;

public class TestMybatis {

    /**
     * @param args
     */
    public static void main(String[] args) {

        try {
            //1,创建主配置文件输入流(mybatis-config.xml)
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //2,创建SQLSessionFactory
            SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
            //3,创建SqlSession
            SqlSession session = factory.openSession();
            //4,调用mapper文件插入数据(mapper文件必须加入到mybatis-config.xml中)
            User user = new User();
            user.setUsername("zhangsan");
            user.setPasswd("123456");
            user.setNickname("shengqishi");
            user.setType(2);
            //参数1: mapper的namespace+具体方法的id
            session.insert("com.yangwei.shop.entity.User.add",user);
            session.commit();
            session.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

Mybatis工具类

package com.yangwei.shop.util;

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 MyBatisUtil {
    private static SqlSessionFactory factory;
    static {
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession createSession() {
        return factory.openSession();
    }

    public static void closeSession(SqlSession session) {
        if(session!=null) session.close();
    }
}

有了工具类之后,操作变的简单

public static void testAdd(){
        SqlSession session=null;

        try {
            User user = new User();
            user.setUsername("zhangsan");
            user.setPasswd("123456");
            user.setNickname("shengqishi");
            user.setType(2);

            session = MyBatisUtil.createSession();
            //此时,mapper文件的namespace与类的全路径需一致
            session.insert(User.class.getName()+".add", user);

            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }finally{
            MyBatisUtil.closeSession(session);
        }
    }

    public static void testLoad(){
        SqlSession session=null;

        try {
            session = MyBatisUtil.createSession();
            //此时,mapper文件的namespace与类的全路径需一致
            User u=session.selectOne(User.class.getName()+".load", 1);
            System.out.println(u.getNickname());
        } finally{
            MyBatisUtil.closeSession(session);
        }
    }

我们发现,前面的session.insert(),session.selectOne()等等,第一个参数是一个很麻烦的字符串,为了改善这个,有了基于mapper的方式

步骤1,需要写为每一个写mapper接口,例如:package com.yangwei.shop.mapper;

import com.yangwei.shop.entity.User;
import java.util.List;
public interface UserMapper {

    //这个接口中的方法,对应于mapper.xml中的标签
    public void add(User user);
    public void update(User user);
    public void delete(int id);
    public User load(int id);
    public List<User> list();
}步骤二: mapper.xml的namespace必须是这个接口的全路径,如

<mapper namespace="com.yangwei.shop.mapper.UserMapper">

步骤三:java代码调用的时候,按照如下写法:

UserMapper mapper = session.getMapper(UserMapper.class);mapper.add(user);

两种方式都要知道,建议使用第一种,虽然是字符串...

下面两种方式 : "获取所有User的调用"

public static void testList(){
        SqlSession session=null;

        try {
            session = MyBatisUtil.createSession();
            //注意这样使用的时候,mapper.xml的namespace必须是实体类全路径
            List<User> users=session.selectList(User.class.getName()+".list", null);
            System.out.println(users.size());

        } finally{
            MyBatisUtil.closeSession(session);
        }
    }
    public static void testListByMapper(){
        SqlSession session=null;

        try {
            session = MyBatisUtil.createSession();
            //注意这样使用的时候,mapper.xml的namespace必须是Mapper接口全路径
            List<User> users=session.getMapper(UserMapper.class).list();
            System.out.println(users.size());

        } finally{
            MyBatisUtil.closeSession(session);
        }
    }

最后最简洁的方式,不使用mapper.xml这样的配置文件,采用注解的形式

package com.yangwei.shop.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.yangwei.shop.entity.User;
//这个接口中的方法,对应于mapper.xml中的标签
public interface UserMapper {

    @Insert("insert into t_user(username,password,nickname,type) values(#{username},#{password},#{nickname},#{type})")
    public void add(User user);
    @Update("update t_user set password=#{password},nickname=#{nickname},type=#{type} where id=#{id}")
    public void update(User user);
    @Delete("delete from t_user where id=#{id}")
    public void delete(int id);
    @Select("select * from t_user where id=#{id}")
    public User load(int id);
    @Select("select * from t_user")
    public List<User> list();
}

此时在主配置文件mybatis-config.xml中引入的是这个接口,使用class属性<mapper class="com.yangwei.shop.mapper.UserMapper" />
最佳实践(孔老师建议):1,创建相应的MybatisUtil工具类,完成对session的获取;2,不使用annotation完成对sql映射;3,建议使用基于sql访问而不要使用基于Mapper

mybatis-java代码调用部分的更多相关文章

  1. Java代码调用服务器上的Shell脚本

    Java代码调用服务器上的Shell脚本 这里主要是因为我们报表平台有用到用户手工录入的数据作为结果数据且需要纳入saiku去展示 如我们所知,saiku不会自动刷新,所以需要在数据更新接口中调用服务 ...

  2. Java代码调用Oracle的存储过程,存储函数和包

    Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名  月薪 职位 create or ...

  3. java代码调用数据库存储过程

    由于前边有写java代码调用数据库,感觉应该把java调用存储过程也写一下,所以笔者补充该篇! package testSpring; import java.sql.CallableStatemen ...

  4. Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件

    本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import ...

  5. 存储过程之七—java代码调用

    一.简介 jdbc调用存储过程与调用一般的sql语句有些差别.jdbc调用一般的sql语句的时候,返回的是结果集,或是sql语句后是否执行成功的标记量.而存储过程返回的可以是结果集,输出参数.返回状态 ...

  6. Jmeter自定义编写Java代码调用socket通信

    一.前言 最近需要测试一款手机游戏的性能,找不到啥录制脚本的工具,然后,另外想办法.性能测试实际上就是对服务器的承载能力的测试,和各种类型的手机客户端没有啥多大关系,手机再好,服务器负载不了,也不能够 ...

  7. 用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql

    1:创建shell脚本 touch sqoop_options.sh chmod 777 sqoop_options.sh 编辑文件  特地将执行map的个数设置为变量  测试 可以java代码传参数 ...

  8. java代码调用oracle存储过程

    一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); ...

  9. java代码调用使用cxf搭建的webService服务传递对象

    前边成功创建好一个cxf的webServcie服务,并带了一个无参数的方法.现在进一步尝试了使用带参数的方法,分别测了用String为参数和用自定义的对象为参数. 其中,使用String为参数时和不带 ...

  10. 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译

     1  编写以下案例(下面的三个按钮都调用了底层的C语言): 项目案例的代码结构如下: 2 编写DataProvider的代码: package com.example.ndkpassdata; ...

随机推荐

  1. 【HotSpot】jps命令行详解

    jps (JVM Process Status) jdk提供的一个查看当前Java进程的小工具. 命令输入格式:jps [选项 ] [ 主机号 ] [options]选项 : -q:仅输出VM标识符, ...

  2. 【Eclipse】更改部署位置

    在使用eclipse启动tomcat时,偶尔会遇到应用没被部署的现象,导致访问时出现404 问题原因:应用部署在了eclipse自带的webapps中. 我们通常不喜欢eclipse自带的tomcat ...

  3. SpringBoot切面控制业务逻辑

    业务逻辑:写一个公共拦截类,过滤传进Controller的参数 为了调用接口安全起见,每个需要调用的接口有一个参数accessToken,用于安全验证 注:先进入过滤器Filter,再进入aop,最后 ...

  4. WEB版一次选择多个文件进行批量上传(WebUploader)的解决方案

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  5. 【渗透笔记】利用逻辑漏洞批量拿GOV EDU

    前言: 这个Oday是以前就有的,不过都没有人出过详细的使用教程,昨天帮群里某学院拿了他们的学校之后突然想起来这个Oday,而且实用性还很强,所以我就想分享到这里来了 关键字:inurl:sitese ...

  6. 一篇文章读懂Java类加载器

    Java类加载器算是一个老生常谈的问题,大多Java工程师也都对其中的知识点倒背如流,最近在看源码的时候发现有一些细节的地方理解还是比较模糊,正好写一篇文章梳理一下. 关于Java类加载器的知识,网上 ...

  7. python进阶学习(四)

    在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...

  8. split添加limit参数

    String str = "I love you"; /**这里被分割为I 和love you**/ String[] spiltStr = str.spit(" &qu ...

  9. selenium 对chrome浏览器操作

    参照http://www.testwo.com/blog/6931博客内容 1.下载ChromeDriver驱动包(下载地址: http://chromedriver.storage.googleap ...

  10. 读取Execl表 导入数据库

    不知不觉博客园园林都两年多了,我是今年毕业的应届生,最近公司项目需要改动,很多的数据需要导入,很多的实体类需要些.考虑到这些问题自己写了两个winform版的小工具,一个是读取Execl数据导入数据库 ...