• 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]

    对照一下数据库表:

  • 相关阅读:
    ActivityLifecycleCallbacks 如何控制activity的生命周期
    ViewPage + Fragment 防止Fragment 重复加载问题
    RecyclerView 必知必会(转)
    如何简单的实现一个tab页title的动画效果
    onInterceptTouchEvent和onTouchEvent调用时序(转)
    Android Studio 2.3版本 Run项目不能自动启动APP的问题 (转)
    js-jQuery性能优化(一)
    js-权威指南学习笔记20
    js-权威指南学习笔记19.2
    js-权威指南学习笔记19
  • 原文地址:https://www.cnblogs.com/jonsnow/p/6736255.html
Copyright © 2020-2023  润新知