MyBatis学习(一)

                                                                    

一、概述

   1.1介绍

  MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

   1.2原理

如下图:

二、入门程序

2.1需要的jar包



2.2案例

实体类
package com.mybatis.pojo;

import java.util.Date;

public class User {

	private int id;
	private String username;
	private String sex;
	private Date birthday;
	private String address;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", sex=" + sex
				+ ", birthday=" + birthday + ", address=" + address + "]";
	}

}
实体类的映射文件user.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">
<!-- 
	namespace:1、分类化管理sql语句  2、用来通过代理开发dao
 -->
<mapper namespace="test">

	<!-- 根据id查询用户信息 -->
	<!-- 
		id:唯一标识,通过namespace和该值唯一确定一条sql语句
		parameterType:传递的参数类型(输入映射的类型)
		resultType:输出的结果类型(输出映射的类型)
		#{}:代表占位符  如果我们传递的参数类型是java的基本类型, {}内的名称是任意的。
	 -->
	<select id="queryUserById" parameterType="int" resultType="com.mybatis.pojo.User">
		select * from user where id = #{id}
	</select>
	
	<!--根据用户名称查询用户信息  -->
	<!--  
	resultType:只代表单条记录的结果类型
	${}:代表连接符,它会将参数不做任何处理的拼接到sql语句中,如果传递的参数是java的基本类型,${}内的名称必须是value。
	-->
	<select id="queryUserByUserName" parameterType="String" resultType="com.mybatis.pojo.User">
		select * from user where username like '%${value}%' 
	
	</select>
	<!--添加用户信息  -->
	<!--
	#{}:代表占位符  如果我们传递的参数类型是见Pojo类型, {}内的名称是pojo的属性名称。
	  -->
	<insert id="insertUser"  parameterType="com.mybatis.pojo.User">
		insert into user(username,sex,birthday,address)
		values(#{username},#{sex},#{birthday},#{address})
	</insert>
	<!--更新用户信息  -->
	<update id="updateUser" parameterType="com.mybatis.pojo.User">
	update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#{address}
	where id=#{id}
	</update>
	
	<!--删除用户信息  -->
	<delete id="deleteUserById"  parameterType="int">
	 delete from user where id = #{id}
	</delete>
</mapper>

mybatis的全局配置文件SqlMapConfig.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"/>
	
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 用来加载映射文件 -->
	<mappers>
		<mapper resource="com/mybatis/pojo/User.xml"/>		
	</mappers>
</configuration>
数据库配置文件:db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
测试类
package com.mybatis.demo;


import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

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.mybatis.pojo.User;

public class TestDemo {
	@Test
	public void testQueryUserById() throws IOException{
		//加载全局配置文件
		String resource="SqlMapConfig.xml";
		InputStream inputStream=Resources.getResourceAsStream(resource);
		//获取会话工厂
		SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
		SqlSessionFactory sf=sfb.build(inputStream);
		//获取会话
		SqlSession sqlSession = sf.openSession();
		/**
		 * 根据id查询用户
		 * selectOne(String arg0, Object arg1)
		 * arg0表示要执行的sql,通过namespace.id来确定
		 * arg1表示要传递的参数
		 */
		User user = sqlSession.selectOne("test.queryUserById", 1);
		System.out.println(user);

	}
	
	@Test
	public void testQueryUserByUserName() throws IOException{
		//加载全局配置文件
		String resource="SqlMapConfig.xml";
		InputStream inputStream=Resources.getResourceAsStream(resource);
		//获取会话工厂
		SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
		SqlSessionFactory sf=sfb.build(inputStream);
		//获取会话
		SqlSession sqlSession = sf.openSession();
		/**
		 * 根据用户名称查询用户
		 * selectOne(String arg0, Object arg1)
		 * arg0表示要执行的sql,通过namespace.id来确定
		 * arg1表示要传递的参数
		 */
		List<User> userList = sqlSession.selectList("test.queryUserByUserName", "张");
		System.out.println(userList);

	}
	
	/**
	 * 新增用户信息
	 * @throws IOException
	 */
	@Test
	public void testInsertUser() throws IOException{
		//加载全局配置文件
		String resource="SqlMapConfig.xml";
		InputStream inputStream=Resources.getResourceAsStream(resource);
		//获取会话工厂
		SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
		SqlSessionFactory sf=sfb.build(inputStream);
		//获取会话
		SqlSession sqlSession = sf.openSession();
		User user=new User();
		user.setUsername("tom");
		user.setBirthday(new Date());
		user.setAddress("北京");
		user.setSex("1");
		sqlSession.insert("test.insertUser", user);
		//提交事务
		sqlSession.commit();
		sqlSession.close();
	}
	/**
	 * 根据id更新用户信息
	 * @throws IOException
	 */
	@Test
	public void testUpdateUser() throws IOException{
		//加载全局配置文件
		String resource="SqlMapConfig.xml";
		InputStream inputStream=Resources.getResourceAsStream(resource);
		//获取会话工厂
		SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
		SqlSessionFactory sf=sfb.build(inputStream);
		//获取会话
		SqlSession sqlSession = sf.openSession();
		User user=new User();
		user.setId(1);
		user.setUsername("tom");
		user.setBirthday(new Date());
		user.setAddress("上海");
		user.setSex("0");
		sqlSession.insert("test.updateUser", user);
		//提交事务
		sqlSession.commit();
		sqlSession.close();
	}
	
	/**
	 * 根据id删除用户信息
	 * @throws IOException
	 */
	@Test
	public void testDeleteUser() throws IOException{
		//加载全局配置文件
		String resource="SqlMapConfig.xml";
		InputStream inputStream=Resources.getResourceAsStream(resource);
		//获取会话工厂
		SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
		SqlSessionFactory sf=sfb.build(inputStream);
		//获取会话
		SqlSession sqlSession = sf.openSession();
		sqlSession.delete("test.deleteUserById",30);
		//提交事务
		sqlSession.commit();
		sqlSession.close();
	}
	
}

了解更多关注下方二维码




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值