mybatis-java代码调用部分

 只需要加入 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
----------- 赠人玫瑰,手有余香     如果本文对您有所帮助,动动手指扫一扫哟   么么哒 -----------


未经作者 https://www.cnblogs.com/xin1006/ 梦相随1006 同意,不得擅自转载本文,否则后果自负
原文地址:https://www.cnblogs.com/xin1006/p/3314703.html