MyBatis使用

定义:

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。

使用方法:

1.导入jar包mybatis和oracle数据库连接包

2.配置mybatis.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=""></properties>
  
  <!-- 定义一个别名,名字一般为java项目中包的名称  -->
  <typeAliases>
      <package name=""/>
  </typeAliases>
  
  <!-- mybatis的环境 -->
  <environments default="">
      <environment id="">
          <!-- mybatis支持的事务 -->
          <!-- JDBC:数据源自己的事务管理 
               MANAGE(托管): 不支持tomcat,一般用在大型商业服务器,如:weblogic,jboss -->
          
          <transactionManager type=""></transactionManager>
          
          <!-- 数据连接类型:POOLED,UNPOOLED,JNDI使用应用服务器的数据源连接 -->
          <!-- POOLED:连接池 -->
          <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>
  <!--类的映射xml-->
  <mappers>
      <mapper resource=""/>
  </mappers>
</configuration>

3.载入mybatis.xml配置

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

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 ssf;
    private static SqlSession ss;
    public static SqlSession getSqlSession() {
        InputStream in = null;
        //Reader reader = null;也可用此行和下方被注释的代码来载入xml
        try {
            in = Resources.getResourceAsStream("mybatis.xml");
            //reader = Resources.getResourceAsReader("mybatis.xml");
            ssf = new SqlSessionFactoryBuilder().build(in);
            ss = ssf.openSession();
            in.close();
        } catch (IOException e) {
            
            e.printStackTrace();
        }
        return ss;
    }    
}

实例:使用MyBatis完成数据库表的增删改查

1.导入jar包,连接oracle数据库,配置mabatis.xml文件,载入mabatis.xml配置

db.properties:连接oracle所需的各项属性

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=db
password=123

mybatis.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="db.properties"></properties>
  
  <!-- 定义一个别名  -->
  <typeAliases>
      <package name="maya.model"/>
  </typeAliases>
  
  <!-- mybatis的环境 -->
  <environments default="development">
      <environment id="development">
          <!-- mybatis支持的事务 -->
          <!-- JDBC:数据源自己的事务管理 
               MANAGE(托管): 不支持tomcat,一般用在大型商业服务器,如:weblogic,jboss -->
          
          <transactionManager type="JDBC"></transactionManager>
          
          <!-- 数据连接类型:POOLED,UNPOOLED,JNDI使用应用服务器的数据源连接 -->
          <!-- POOLED:连接池 -->
          <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="maya/dao/TUsersMapper.xml"/>
  </mappers>
</configuration>

导入mybatis.xml配置

package maya.util;

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

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 ssf;
    private static SqlSession ss;
    public static SqlSession getSqlSession() {
        InputStream in = null;
        //Reader reader = null;也可用此行和下方被注释的代码来载入xml配置
        try {
            in = Resources.getResourceAsStream("mybatis.xml");
            //reader = Resources.getResourceAsReader("mybatis.xml");
            ssf = new SqlSessionFactoryBuilder().build(in);
            ss = ssf.openSession();
            in.close();
        } catch (IOException e) {            
            e.printStackTrace();
        }
        return ss;
    }    
}

2.建立实体类,可用hibernate逆向生成

package maya.model;

public class TUsers {
    private int id;
    private String users;
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsers() {
        return users;
    }
    public void setUsers(String users) {
        this.users = users;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "TUsers [id="+id+",users="+users+", password="+password+"]";
    }
}

3.实体类的映射配置和JUnit测试用例

实体类映射配置(TUsersMapper.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="maya.dao.TUsersMapper">
     <resultMap type="tUsers" id="users"></resultMap>
     <!-- 查询所有 -->
     <select id="list" resultType="maya.model.TUsers">
         select * from t_users
     </select>
     
     <!-- 新增 -->
     <insert id="addUser" parameterType="tUsers">
         insert into t_users values(sq_mybatis.nextval,#{users},#{password})
     </insert>
     <!-- 修改 -->
     <update id="updateUser" parameterType="tUsers">
         update t_users t set t.users=#{users},
         t.password=#{password} where t.id=#{id} 
     </update>
     <!-- 删除 -->
     <delete id="deleteUser" parameterType="Integer" >
         delete t_users t where t.id=#{id}
     </delete>
     <!-- 条件查询 -->
     <select id="selectByMap" parameterType="tUsers" resultMap="users">
         select * from t_users t where t.users like #{p1} and t.password like #{p2}
     </select>
     
 </mapper>
  

JUnit测试用例(JTest.java)

package maya.util;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import maya.model.TUsers;

public class JTest {
    
    private SqlSession ss;

    
    public void test() {
        List<TUsers> list = ss.selectList("maya.dao.TUsersMapper.list");
        for (TUsers u : list) {
            System.out.println(u);
        }
    }
    
    public void add() {
        TUsers tu = new TUsers();
        tu.setId(6);
        tu.setUsers("刘禅");
        tu.setPassword("123");
        int n = ss.insert("maya.dao.TUsersMapper.addUser",tu);
        
        System.out.println(n);
    }
    
    public void update() {
        TUsers tu = new TUsers();
        tu.setId(5);
        tu.setUsers("刘后主");
        tu.setPassword("321");
        int n = ss.update("maya.dao.TUsersMapper.updateUser",tu);
        System.out.println(n);
    }
    
    public void delete() {
        int n = ss.delete("maya.dao.TUsersMapper.deleteUser",6);
        System.out.println(n);
    }
    @Test
    public void selectUsersByMap() {
        Map<String, Object> map = new HashMap<String, Object>();
     //查找姓刘的,密码有2的用户
        map.put("p1", "刘%");
        map.put("p2", "%2%");
     //方法指向maya.dao.TUsersMapper.xml中maya.dao.TUsersMapper的映射,id为selectByMap的方法,并把参数map传过去
        List<TUsers> list = ss.selectList("maya.dao.TUsersMapper.selectByMap",map);
        for (TUsers tu : list) {
            System.out.println(tu);
        }            
    }        
    
    
    @Before//在test之前执行
    public  void setUpBeforeClass() throws Exception {
        ss = MyBatisUtil.getSqlSession();
    }

    @After//在test之后执行
    public  void tearDownAfterClass() throws Exception {
        ss.commit();
    }
}

执行结果:

TUsers [id=5,users=刘后主, password=321]
TUsers [id=2,users=刘备, password=123]

对照一下数据库表:

原文地址:https://www.cnblogs.com/jonsnow/p/6736255.html