• MyBatis3入门一(简单查询、插入)


    1. 环境

    mybatis-3.2版本,jdk1.6版本,Oracle数据库

    2. 功能

    实现基本的数据单条插入、单条查询功能。

    3. 准备工作

    3.1 下载mybatis-3.2,需要引用其中的若干包 

    mybatis-3.2.0.jar
        lib/asm-3.3.1.jar
        lib/cglib-2.2.2.jar
        lib/commons-logging-1.1.1.jar
        lib/javassist-3.17.1-GA.jar
        lib/log4j-1.2.17.jar
        lib/slf4j-api-1.7.2.jar
        lib/slf4j-log4j12-1.7.2.jar   

    3.2 项目的目录结构

    src\com\clzhang\sample\struts2\mapper           
      MemberUserMapper.java               mybatis的mapper处理类 src\com\clzhang\sample\struts2\mapper\entity
      MemberUserBean.java                mybatis的entity类 src\com\clzhang\sample\struts2\test
      MyBatisTest.java                  测试类,最终应该是在service的package中调用mapper中的方法。 resources\config
      mybatis
    -config.xml mybatis的配置文件
    resources\com\clzhang\sample\struts2\mapper
      MemberUserMapper.xml mybatis的mapper配置文件

    3.3 假定数据库已经创建,表结构也已经创建,并且有测试数据

    这里数据库为Oracle,表名:MEMBER_USER,数据结构如下(假设已经存在测试数据):

    CREATE TABLE MEMBER_USER (
    ID NUMBER NOT NULL PRIMARY KEY,
    NAME VARCHAR2(30),
    PERSONMOBILE VARCHAR2(20),
    ADDRESS VARCHAR2(255),
    AGE NUMBER);

    4. 具体步骤

    4.1 创建entity类

    package com.clzhang.sample.struts2.mapper.entity;
    
    public class MemberUserBean {
        private int id;
        private String name;
        private String personMobile;
        private String address;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPersonMobile() {
            return personMobile;
        }
    
        public void setPersonMobile(String personMobile) {
            this.personMobile = personMobile;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
    }

    4.2 创建mapper类

    package com.clzhang.sample.struts2.mapper;
    
    import com.clzhang.sample.struts2.mapper.entity.MemberUserBean;
    
    public interface MemberUserMapper {
        public void insertUser(MemberUserBean user);    
        public MemberUserBean getUser(int id); 
    }

    4.3 创建mybatis-config.xml的配置文件,位置于resources/config目录

    <?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> 
        <settings> 
            <setting name="cacheEnabled" value="false" /> 
            <setting name="useGeneratedKeys" value="true" /> 
            <setting name="defaultExecutorType" value="REUSE" /> 
        </settings> 
        <typeAliases> 
           <typeAlias alias="MemberUser" type="com.clzhang.sample.struts2.mapper.entity.MemberUserBean"/> 
        </typeAliases> 
        <environments default="development"> 
           <environment id="development"> 
               <transactionManager type="JDBC"/> 
               <dataSource type="POOLED"> 
                  <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> 
                  <property name="url" value="jdbc:oracle:thin:@192.168.2.136:1521:jingdu"/> 
                  <property name="username" value="jingdu"/> 
                  <property name="password" value="jingdu"/> 
               </dataSource> 
           </environment> 
        </environments> 
        <mappers> 
            <mapper resource="com/clzhang/sample/struts2/mapper/MemberUserMapper.xml" /> 
        </mappers> 
    </configuration>

    4.4 创建MemberUserMapper.xml配置文件,位置于:resources\com\clzhang\sample\struts2\mapper\

    <?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.clzhang.sample.struts2.mapper.MemberUserMapper">
    
      <cache />
    
      <select id="getUser" resultType="MemberUser" parameterType="int">
        select
          ID,
          NAME,
          PERSONMOBILE,
          PERSONREMARK,
          ADDRESS
        FROM MEMBER_USER
        WHERE ID = #{id}
      </select>
    
      <insert id="insertUser" parameterType="MemberUser">
        INSERT INTO MEMBER_USER (ID, NAME, PERSONMOBILE, ADDRESS)
        VALUES(#{id}, #{name}, #{personMobile}, #{address})
      </insert>
    
    </mapper>

     4.5 创建测试类 

    package com.clzhang.sample.struts2.test;
    
    import java.io.IOException;
    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;
    
    import org.junit.Test;
    
    import com.clzhang.sample.struts2.mapper.MemberUserMapper;
    import com.clzhang.sample.struts2.mapper.entity.MemberUserBean;
    
    /**
     * mybatis的测试类,真正的应用,应该在service包中调用。
     * @author Administrator
     *
     */
    public class MyBatisTest {
        private static final String MYBATIS_CONFIG_FILENAME = "config/mybatis-config.xml";
        private static SqlSessionFactory sqlSessionFactory;
        
        static {
            Reader reader = null;
            try {
                reader = Resources.getResourceAsReader(MYBATIS_CONFIG_FILENAME);
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
            // 一旦你创建了 SqlSessionFactory 后,SqlSessionFactoryBuilder这个类就不需要存在了。
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        }
        
        /**
         * SqlSessionFactory 应该在你的应用执行期间都存在。没有理由来处理或重新创建它。
         * @return
         */
        public static SqlSessionFactory getSqlSessionFactory() {
            return sqlSessionFactory;
        }
    
    //    @Test
        public void testAdd() {
            // SqlSession 的实例不能被共享,也是线程不安全的。因此最佳的范围是请求或方法范围。
            SqlSession sqlSession = getSqlSessionFactory().openSession();
            try {
                // 从技术上来说,当被请求时,任意映射器实例的最宽范围和 SqlSession 是相同的。最佳范围是方法范围。
                MemberUserMapper mapper = sqlSession
                        .getMapper(MemberUserMapper.class);
                
                MemberUserBean memberUser = new MemberUserBean();
                memberUser.setId(1003);
                memberUser.setName("张三");
                memberUser.setPersonMobile("18387887878");
                memberUser.setAddress("北京丰台某公司");
                
                mapper.insertUser(memberUser);
                sqlSession.commit();
            } finally {
                sqlSession.close();
            }
        }
    
        @Test
        public void getUser() {
            SqlSession sqlSession = getSqlSessionFactory().openSession();
            try {
                MemberUserMapper mapper = sqlSession
                        .getMapper(MemberUserMapper.class);
                MemberUserBean memberUser = mapper.getUser(725);
                
                System.out.println("name:" + memberUser.getName() + "\tmobile:"
                        + memberUser.getPersonMobile() + "\taddress:" + memberUser.getAddress());
            } finally {
                sqlSession.close();
            }
        }
    
    }

    测试输出:

    name:吴经理 mobile:13695769533 address:浙江省乐清市北白象金炉工业区

  • 相关阅读:
    tensorflow 1
    BAT变量中的百分号学习
    mysqldump: unknown option '--no-beep'
    mysql数据库文件默认保存目录(windows)
    mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法
    淘宝开源Web服务器Tengine安装教程
    Solr开发文档
    spring线程池配置
    Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号
    Redis应用场景
  • 原文地址:https://www.cnblogs.com/nayitian/p/2949686.html
Copyright © 2020-2023  润新知