MyBatis Demo


文書ディレクトリ
  • バックグラウンド
  • プロジェクト構築
  • 問題記録
  • 背景
    JAvaagentはmysqlのexecteBatchのsqlキャプチャに対してmybatisにArrayと表示されるのは正しくありません.簡単なdemoで、ポイントを中断して本当の原因を確認する必要があります.
    プロジェクト構築
    pom.xml
       <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.2.5</version>
        </dependency>
    

    conf.xml(resources)
    <?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>
        <!--                  -->
        <typeAliases>
    
            <package name="ankermaker.top.entity"/><!--                        -->
    
        </typeAliases>
    
        <environments default="development"><!--default            -->
            <environment id="development">
                <transactionManager type="JDBC" />
                <!--           -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://10.0.3.42:3306/leesin" /><!--     :jdbc:mysql:///hytc -->
                    <property name="username" value="kevin" />
                    <property name="password" value="000000" />
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="com/yitianmybatis/Usersmapper.xml"/>
        </mappers>
    </configuration>
    

    com.yitianmybaties Usersmapper.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="ankermaker.top.mappers.Usersmapper"><!--          !!! -->
        <!--                   resultMap         !-->
        <resultMap type="users" id="userMap">
    <!--        <id column="u_id" property="id" jdbcType="INTEGER"/>-->
    <!--        <result column="u_name" property="name"/>-->
    <!--        <result column="u_sex" property="sex"/>-->
            <result column="name" property="name"/>
        </resultMap>
        <!---->
        <select id="getObjects" resultMap="userMap"> <!--          resultMap -->
            select * from yitian
        </select>
    
        <insert id="addUser" >
          insert into yitian(name) values ("bingbing")
        </insert>
    
    </mapper>
    

    ankermaker.top.entity Users
    package ankermaker.top.entity;
    
    public class Users {
    	protected String name;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    }
    

    ankermaker.top.mappers Usersmapper
    package ankermaker.top.mappers;
    
    import ankermaker.top.entity.Users;
    
    import java.util.List;
    
    
    public interface Usersmapper {
    
    	/**
    	 *          
    	 *
    	 * @return
    	 */
    	public List<Users> getObjects();//                 ;
    //	public void addUser(Users users);//                 ;
    	public void addUser();//                 ;
    
    
    }
    

    com.yitianmybaties AppText(テストクラス)
    package com.yitianmybatis;
    
    import ankermaker.top.entity.Users;
    import ankermaker.top.mappers.Usersmapper;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.ExecutorType;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    public class AppText {
    
    	private SqlSessionFactory sessionFactory;
    	private static SqlSession session;
    	private Usersmapper mapper;
    
    	@Before
    	public void setup() {
    		String resource = "conf.xml";
    		InputStream is = null;
    		try {
    			is = Resources.getResourceAsStream(resource);
    			sessionFactory = new SqlSessionFactoryBuilder().build(is);
    			session = sessionFactory.openSession(ExecutorType.BATCH);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    	@Test
    	public void getObjects() {
    		//     
    		//             ;
    		mapper = session.getMapper(Usersmapper.class);
    		List<Users> list = mapper.getObjects();
    		for (Users u : list) {
    //			System.out.println(u + "    ");
    		}
    		Users u = new Users();
    		u.setName("bingbing");
    		mapper.addUser();
    		session.insert("ankermaker.top.mappers.Usersmapper.addUser");
    		session.commit();
    	}
    	@After
    	public void result() {
    		if (sessionFactory != null) {
    			sessionFactory = null;
    		}
    		if (session != null) {
    			session = null;
    		}
    	}
    }
    

    問題レコード
  • insertの時は大丈夫なのにinsertは入らないcommit()書くのを忘れたでしょう、ずっとwebを書かないで、これはすべて知りません.
  • 遮断点により通常のinsertはexecuteBatchメソッドを経由しないsession=sessionFactoryであることが分かった.openSession(ExecutorType.BATCH); ここはもとはsession=sessionFactory.openSession(); ExecutorTypeを追加します.BATCHでいいです.
  • 人はそのインタフェースを理解して何の役にも立たないようだ.insert(“ankermaker.top.mappers.Usersmapper.addUser”); 指定すればいいです.