小言_互联网的博客

MyBatis Demo

339人阅读  评论(0)


背景

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;
		}
	}
}

问题记录

  1. insert的时候明明没有问题,可是insert不进去
    session.commit()忘记写了
    好吧,一直不写web,这个都不知道。
  2. 通过打断点发现,平常的insert是不经过executeBatch方法的
    session = sessionFactory.openSession(ExecutorType.BATCH);
    这里原来是
    session = sessionFactory.openSession();
    添加ExecutorType.BATCH即可。
  3. 个人理解
    那个接口貌似没有什么用(Usersmapper)
    session.insert(“ankermaker.top.mappers.Usersmapper.addUser”); 指定即可。

转载:https://blog.csdn.net/dataiyangu/article/details/100659636
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场