`
Donald_Draper
  • 浏览: 980900 次
社区版块
存档分类
最新评论

mybatis 使用教程

阅读更多
  Myeclispe下mybatis generator的使用:http://donald-draper.iteye.com/blog/2309387
  MyBatis缓存介绍:http://www.cnblogs.com/xdp-gacl/p/4270403.html
  MyBatis 缓存机制深度解剖 / 自定义二级缓存:http://www.iteye.com/topic/1112327
深入浅出MyBatis-Configuration :http://blog.csdn.net/hupanfeng/article/details/9080545/
SqlSessionFactory初始化:http://donald-draper.iteye.com/admin/blogs/2331917
Mybatis加载解析Mapper(xml)文件第一讲:http://donald-draper.iteye.com/blog/2333125
Mybatis加载解析Mapper(xml)文件第二讲:http://donald-draper.iteye.com/admin/blogs/2333191
创建User表:
 
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  `age` int(11) default NULL,
  `registerTime` timestamp NULL default NULL on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建testMybatis工程,根据Myeclispe下mybatis generator的使用这篇文章,自动生成,
实体类,Mapper接口与xml文件,我的generatorConfig.xml文件如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration >
	<classPathEntry  location="E:\lib\mysql-connector-5.1.8.jar" />
	  <context id="contextMybatis" >
		    <jdbcConnection driverClass="com.mysql.jdbc.Driver" 
		    	connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8" 
		    	userId="root" 
		    	password="123456" />
		    <javaModelGenerator targetPackage="test.entity" targetProject="TestMybatis" />
		    <sqlMapGenerator targetPackage="test.Mapper" targetProject="TestMybatis" />
		    <javaClientGenerator targetPackage="test.Dao" targetProject="TestMybatis" type="XMLMAPPER" />
		    <table tableName="user"  
	            domainObjectName="User" enableInsert="true"  
	            enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true"  
	            enableDeleteByPrimaryKey="true" enableSelectByExample="false"  
	            enableDeleteByExample="false" enableCountByExample="false"  
	            enableUpdateByExample="false">  
        	</table>  
  	 </context>
</generatorConfiguration>

生成的实体类:
package test.entity;

import java.util.Date;

public class User {
	private Integer id;
	private String name;
	private Integer age;
	private Date registertime;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Date getRegistertime() {
		return registertime;
	}
	public void setRegistertime(Date registertime) {
		this.registertime = registertime;
	}
}

生成的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="test.Dao.UserMapper">
	<resultMap id="BaseResultMap" type="test.entity.User">
		<id column="id" property="id" jdbcType="INTEGER" />
		<result column="name" property="name" jdbcType="VARCHAR" />
		<result column="age" property="age" jdbcType="INTEGER" />
		<result column="registerTime" property="registertime" jdbcType="TIMESTAMP" />
	</resultMap>
	<sql id="Base_Column_List">
		id, name, age, registerTime
	</sql>
	<select id="selectByPrimaryKey" resultMap="BaseResultMap"
		parameterType="java.lang.Integer">
		select
		<include refid="Base_Column_List" />
		from user
		where id = #{id,jdbcType=INTEGER}
	</select>
	<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
		delete from user
		where id = #{id,jdbcType=INTEGER}
	</delete>
	<insert id="insert" parameterType="test.entity.User" keyProperty="id">
		insert into user (id, name, age,
		registerTime)
		values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR},
		#{age,jdbcType=INTEGER},
		#{registertime,jdbcType=TIMESTAMP})
	</insert>
	<insert id="insertSelective" parameterType="test.entity.User">
		insert into user
		<trim prefix="(" suffix=")" suffixOverrides=",">
			<if test="id != null">
				id,
			</if>
			<if test="name != null">
				name,
			</if>
			<if test="age != null">
				age,
			</if>
			<if test="registertime != null">
				registerTime,
			</if>
		</trim>
		<trim prefix="values (" suffix=")" suffixOverrides=",">
			<if test="id != null">
				#{id,jdbcType=INTEGER},
			</if>
			<if test="name != null">
				#{name,jdbcType=VARCHAR},
			</if>
			<if test="age != null">
				#{age,jdbcType=INTEGER},
			</if>
			<if test="registertime != null">
				#{registertime,jdbcType=TIMESTAMP},
			</if>
		</trim>
	</insert>
	<update id="updateByPrimaryKeySelective" parameterType="test.entity.User">
		update user
		<set>
			<if test="name != null">
				name = #{name,jdbcType=VARCHAR},
			</if>
			<if test="age != null">
				age = #{age,jdbcType=INTEGER},
			</if>
			<if test="registertime != null">
				registerTime = #{registertime,jdbcType=TIMESTAMP},
			</if>
		</set>
		where id = #{id,jdbcType=INTEGER}
	</update>
	<update id="updateByPrimaryKey" parameterType="test.entity.User">
		update user
		set name = #{name,jdbcType=VARCHAR},
		age = #{age,jdbcType=INTEGER},
		registerTime = #{registertime,jdbcType=TIMESTAMP}
		where id = #{id,jdbcType=INTEGER}
	</update>
</mapper>

生成的Mapper接口:
package test.Dao;

import test.entity.User;

public interface UserMapper {

    int deleteByPrimaryKey(Integer id);

    int insert(User record);

    int insertSelective(User record);

    User selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);
}

新建mybatisConfig.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>
	<settings> 
        <setting name="cacheEnabled" value="true" /><!-- 全局映射器启用缓存 -->   
        <setting name="useGeneratedKeys" value="true" /> 
        <setting name="defaultExecutorType" value="REUSE" /> 
    </settings>
    <typeAliases>
        <typeAlias alias="User" type="test.entity.User"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
        	<transactionManager type="JDBC"/>
            <dataSource type="POOLED">
	            <property name="driver" value="com.mysql.jdbc.Driver"/>
	            <property name="url" value="jdbc:mysql://localhost:3306/test" />
	            <property name="username" value="root"/>
	            <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="test/Mapper/UserMapper.xml"/>
    </mappers>
</configuration>

Session测试主类:
package test.main;

import java.io.Reader;
import java.util.Date;

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 test.entity.User;
import test.util.JsonUtil;

public class testSqlSession {
	private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;
    static{
        try{
            reader    = Resources.getResourceAsReader("mybatisConfig.xml");
        /*    System.out.println("========path:"+Thread.currentThread().getContextClassLoader().getResource("mybatisConfig.xml"));
            Thread.currentThread().getContextClassLoader();
			System.out.println("========systemPath:"+ClassLoader.getSystemResource("mybatisConfig.xml"));*/
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static SqlSessionFactory getSession(){
        return sqlSessionFactory;
    }
    
    public static void main(String[] args) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
        	User u1 = new User();
        	u1.setAge(12);
        	u1.setName("donald");
	        session.insert("test.Dao.UserMapper.insert", u1);
	        User u2 = session.selectOne("test.Dao.UserMapper.selectByPrimaryKey", u1.getId());
	        System.out.println("======u1:"+JsonUtil.toJson(u2));
	        User u3 = new User();
	        u3.setAge(30);
	        u3.setName("jamel");
	        session.insert("test.Dao.UserMapper.insert", u3);
	        User u4 = session.selectOne("test.Dao.UserMapper.selectByPrimaryKey", u3.getId());
	        System.out.println("======u3:"+JsonUtil.toJson(u4));
//	        session.flushStatements();
                //提交插入的数据
	        session.commit();
	        u3.setName("rain");
		//update过后,清除一二级缓存
	        session.update("test.Dao.UserMapper.updateByPrimaryKeySelective", u3);
	        session.commit();
	        User u5 = session.selectOne("test.Dao.UserMapper.selectByPrimaryKey", u3.getId());
	        System.out.println("======cache-u3-name:"+u5.getName());
        } 
        catch(Exception e){
        	e.printStackTrace();
        }
        finally {
        	session.close();
        }
    }
}

控制台输出:
======u1:{"id":1,"registertime":null,"name":"donald","age":12}
======u3:{"id":2,"registertime":null,"name":"jamel","age":30}
======cache-u3-name:rain

接口测试主类:
package test.main;

import java.io.Reader;
import java.util.Date;

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 test.Dao.UserMapper;
import test.entity.User;
import test.util.JsonUtil;

public class testMapperInterface {
	private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;
    static{
        try{
            reader    = Resources.getResourceAsReader("mybatisConfig.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static SqlSessionFactory getSession(){
        return sqlSessionFactory;
    }
	public static void main(String[] args) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
        	User u1 = new User();
        	u1.setAge(20);
        	u1.setName("jamel");
        	UserMapper userOperation=session.getMapper(UserMapper.class);
        	userOperation.insert(u1);
        	session.flushStatements();
	        session.commit();
	        User u2 = userOperation.selectByPrimaryKey(u1.getId());
	        System.out.println("======u1:"+JsonUtil.toJson(u2));
        	
        } 
        catch(Exception e){
        	e.printStackTrace();
        }
        finally {
            session.close();
        }
    }
}

控制台输出:
======u1:{"id":1,"registertime":null,"name":"jamel","age":20}
我的工程目录:


  • 大小: 25.2 KB
分享到:
评论

相关推荐

    mybatis使用教程

    本教程针对MyBatis的使用进行详尽的介绍,适合初学者入门学习。文档《mybatis使用教程.docx》可能包含以下内容: 1. **安装与配置**:首先,你需要了解如何在项目中引入MyBatis的依赖,这通常通过Maven或Gradle来...

    mybatis 使用教程

    ### MyBatis 使用教程知识点概览 #### 一、MyBatis简介与优势 - **定义**:MyBatis是一个优秀的持久层框架,它支持普通的SQL查询、存储过程以及高级映射功能。通过使用简单的XML或注解进行配置和原始映射,它可以将...

    Mybatis系列教程Mybatis插件共8页.pdf.z

    【标题】"Mybatis系列教程Mybatis插件共8页.pdf.z" 提供的信息表明,这是一个关于Mybatis框架的教程,特别关注Mybatis插件的使用。Mybatis是一款流行的Java持久层框架,它允许开发者直接编写SQL语句,提供灵活的数据...

    尚硅谷Mybatis视频教程1-10

    9.《尚硅谷_MyBatis_全局配置文件_typeAliases_别名.avi》讲解了类型别名的使用,通过定义别名可以简化类名引用,提高代码可读性。 7.《尚硅谷_MyBatis_全局配置文件_properties_引入外部配置文件.avi》介绍了如何...

    尚硅谷Mybatis视频教程11-20

    《尚硅谷Mybatis视频教程11-20》是一系列深入讲解Mybatis框架的视频教程,涵盖了Mybatis的多个核心概念和技术。Mybatis是Java开发中的一个持久层框架,它简化了数据库操作,使得开发者能够更加专注于SQL和业务逻辑。...

    尚硅谷 4月份MyBatis视频教程(国内首套:源码级讲授的MyBatis视频)最新更新

    尚硅谷发布的这套MyBatis视频教程,是国内首套源码级讲授的MyBatis教程,非常适合希望深入了解MyBatis内部原理及实现机制的学习者。通过本篇总结,我们不仅了解了MyBatis的基本概念、核心功能,还探讨了一些实战中的...

    MyBatis3 教程 中文完整版

    MyBatis3是一款深受开发者喜爱的轻量级Java持久层框架,它...这个中文完整版教程将深入讲解这些知识点,并通过实例帮助读者更好地理解和掌握MyBatis3的使用,无论是初学者还是有一定经验的开发者,都能从中受益匪浅。

    尚硅谷Mybatis视频教程21-30

    《尚硅谷Mybatis视频教程21-30》是一系列深入讲解Mybatis核心技术和实践应用的视频课程。在这些视频中,讲师详细解析了Mybatis的多个关键特性,旨在帮助学习者掌握Mybatis的精髓,提升数据库操作能力。以下是根据...

    MyBatis3 教程 中文版

    MyBatis3 是一款流行的Java持久层框架,它简化了...通过学习本教程,读者将掌握如何使用MyBatis3进行数据操作,包括配置、SQL映射、动态SQL、结果映射、事务管理和缓存等关键知识点,从而提升开发效率和代码质量。

    mybatis教程

    很详细的mybatis教程,介绍了mybatis的类结构以及详细的使用配置

    MyBatis学习代码

    MyBatis学习代码: mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in ...mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载

    Springmvc+Mybatis精品教程 专用sql.rar

    Springmvc+Mybatis精品教程 专用sql。找了半天没找到。 所以上传下 配套教程地址:https://www.bilibili.com/video/BV1sb411x7VQ?p=4

    mybatis中文教程

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 一、MyBatis基本概念与安装 MyBatis的核心组件包括SqlSessionFactory、...

    MyBatis3.2.2 教程资料

    最新MyBatis教学视频,视频包含:MyBatis配置文件编写,MyBatis动态SQL,MyBatis缓存机制,MyBatis-Spring整合,MyBatis逆向工程,MyBatis高级内容

    Mybatis系列教程Mybatis复杂映射开发共6页.p

    【标题】"Mybatis系列教程Mybatis复杂映射开发共6页" 提供了一个关键信息,即本教程专注于Mybatis的复杂映射开发,这通常指的是在Mybatis框架中处理多对一、一对多、多对多等复杂数据关系的能力。Mybatis作为一个...

    mybatis实例教程代码

    2019年最新mybatis的学习教程加代码测试实例。由浅入深分别演示:1、最初基本实现原理代码;2、generator使用及代码实例;3、一对一,一对多及多对多关系代码配置应用实例;4、与spring结合应用实例。 每个实例均附...

    Mybatis系列教程Mybatis注解开发共9页.pdf

    【标题】"Mybatis系列教程Mybatis注解开发共9页.pdf" 提供的是一个关于Mybatis框架注解开发的教程,重点在于讲解如何在Mybatis中使用注解进行数据库操作。Mybatis是一个轻量级的Java持久层框架,它允许开发者通过...

    mybatis中文版教程

    ### MyBatis中文版教程与Spring整合:详细解析 #### 整合动机与背景 MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Spring框架则是企业级Java应用程序的首选,它提供了强大的依赖注入、...

Global site tag (gtag.js) - Google Analytics