4.0 MyBatis_映射文件curd

MyBatis实战
本文介绍了一个基于MyBatis的简单项目实例,包括数据库建表、Java实体类定义、XML映射文件编写、接口定义及测试类实现等内容。通过具体代码展示了如何进行数据的增删改查操作。

第一步:在mysql数据库中建表

第二步:使用eclipse创建项目

1.目录结构

 

2.代码

Employee.java

package com.mybatis.bean;

public class Employee {
	private Integer id;
	private String lastName;
	private String email;
	private String gender;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	
	public Employee(Integer id, String lastName, String email, String gender) {
		super();
		this.id = id;
		this.lastName = lastName;
		this.email = email;
		this.gender = gender;
	}
	
	
	public Employee() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]";
	}

	

}


映射文件EmployeeMapper.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:名称空间,指定接口的全类名
		id: 唯一标识符
		resultType:返回的对象类型  
	  如果数据库的某些字段与对象的属性不相同,可以把数据库的这些字段取别名(如数据库字段 last_name与对象属性lastName不一致)
 --> 
 <mapper namespace="com.mybatis.dao.EmployeeMapper">
  <!-- getEmpbyID 通过id返回Employee对象,是接口EmployeeMapper下的方法 -->
  <select id="getEmpbyID" resultType="com.mybatis.bean.Employee">
    select id,last_name lastName,email,gender from tbl_employee where id = #{id}
  </select>
  
  <update id="updateEmp" >
  	update tbl_employee set
    last_name = #{lastName},
    email = #{email},
    gender = #{gender}
  where id = #{id}
  </update>
  
  <!-- public void addEmp(Employee employee);
		parameterType:参数类型,可以省略 
	-->
  <!-- 
  	mysql获取自增主键的值:
		mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGenreateKeys();
		useGeneratedKeys="true",使用自增主键获取主键值策略
		keyProperty:指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性
  -->

  <insert id="addEmp" databaseId="mysql1" parameterType="com.mybatis.bean.Employee" useGeneratedKeys="true" keyProperty="id">
  	insert into tbl_employee(last_name,email,gender) values (#{lastName},#{email},#{gender})
  </insert>
  
 	<!-- oracle不支持自增,oracle使用序列来模拟自增;
		每次插入的数据的主键是从序列中拿到的值:如何获取到这个值 
    -->
   <!--
  	keyProperty:查出的主键值封装给javaBean(Employee)的哪个属性
	order="BEFORE":当前sql(查序列号的sql)在插入sql之前运行
       		AFTER:当前sql在插入sql之后运行
	rusultType:查出的数据返回值类型
	BEFORE(before)运行顺序:
		先运行selectKey查询id的sql,查出id值封装给javaBean的id属性
		在运行插入的sql,就可以取出id属性对应的值
	 -->
	
	<insert id="addEmp" databaseId="oracle1">	
		<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
  			<!-- 编写查询主键的sql语句 -->
  			<!-- BEFORE -->
  			select tbl_employee_sql.nextval from dual
  		</selectKey>
  		insert into tbl_employee(id,last_name,email,gender) values (#{tbl_employee_sql.nextval}#{lastName},#{email},#{gender})
  	</insert>
  	
 
  	<!-- 
	AFTER(after)运行顺序:
		先运行插入的sql,(从序列中自动获取新值作为id);
		再运行selectKey查询id的sql;
		先
  	 -->
  <insert id="addEmp" databaseId="oracle1">
  	<selectKey keyProperty="id" order="AFTER" resultType="Integer">
  		<!-- 编写查询主键的sql语句 -->
  		<!-- AFTER -->
  		select tbl_employee_sql.currentval from dual
  	</selectKey>
  	insert into tbl_employee(id,last_name,email,gender) values (#{tbl_employee_sql.currentval},#{lastName},#{email},#{gender})
  </insert>
  
  <delete id="deleteID" >
  	delete from tbl_employee where id=#{id}
  </delete>
</mapper>

 

接口EmployeeMapper.java

package com.mybatis.dao;

import com.mybatis.bean.Employee;

public interface EmployeeMapper {
	
	public Employee getEmpbyID(Integer id);
	
	public void updateEmp(Employee employee);
	
	public void addEmp(Employee employee);

	public int deleteID(Integer id);


}


全局配置文件mybatis-config.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>

	
	<!-- 在控制台打印sql语句 -->
	<settings>  
        <setting name="logImpl" value="STDOUT_LOGGING"/>  
    </settings> 
    
  <environments default="mysql222">
    <environment id="mysql222">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="shapolang"/>
      </dataSource>
    </environment>
    
     <environment id="oracle222">
    	<transactionManager type="JDBC"></transactionManager>
    	<dataSource type="POOLED">
			<property name="driver" value="${oracle.driver}"></property>
			<property name="url" value="${oracle.url}"></property>
			<property name="username" value="${oracle.username" ></property>
			<property name="password" value="${oracle.password}"></property>
    	</dataSource>
    </environment>
 </environments>
   
  <!-- MyBatis 可以根据不同的数据库厂商执行不同的语句 -->
  <databaseIdProvider type="DB_VENDOR">
  	<property name="MySQL" value="mysql1"/>
  	<property name="Oracle" value="oracle1"/>
  	<property name="SQL Server" value="sqlserver1"/>
  </databaseIdProvider>
  
  <!-- 写好的sql映射文件一定要注册到全局配置文件中 -->
  <mappers>
    <mapper resource="com/mybatis/bean/EmployeeMapper.xml"/>
  </mappers>
</configuration>


测试类testMybatis.java

package test;

import java.io.IOException;
import java.io.InputStream;
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.mybatis.bean.Employee;
import com.mybatis.dao.EmployeeMapper;

public class testMybatis{	
	
	private SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory SqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
		return SqlSessionFactory;
	}


	@Test
	public void test1() throws IOException {
		//1.获取SqlSessionFactory对象
		SqlSessionFactory ssf= getSqlSessionFactory();
		
		//2.获取SqlSession对象
		SqlSession ss=ssf.openSession();
		
		//3.获取接口的实现类对象
		//会为接口自动创建一个代理对象,代理对象去执行增删改查方法
		try {
			  EmployeeMapper mapper = ss.getMapper(EmployeeMapper.class);
			  Employee emp2 = mapper.getEmpbyID(2);
			  System.out.println(emp2);
			  System.out.println(mapper.getClass());//返回的是一个代理对象
			} finally {
			  ss.close();
			}
		
	}
	
	/*
	 * 测试增删改
	 *	1.mybatis允许增删改直接定义以下类型返回值
	 *		Interger、Long、Boolean、void
	 *	2.我们需要手动提交数据
	 *		sqlSessionFactory.openSession();--->手动提交
	 *		sqlSessionFactory.openSession(true);--->自动提交
	 */
	@Test
	public void test2() throws IOException {
		SqlSessionFactory ssf=getSqlSessionFactory();
		SqlSession ss=ssf.openSession();
	
		try{
			EmployeeMapper mapper=ss.getMapper(EmployeeMapper.class);
			//测试添加
			Employee emp1=new Employee(null,"jeery","88@qq.com","1");	
			mapper.addEmp(emp1);
		//	System.out.println(emp1.getId());
			
			//测试更新
		//	Employee emp1=new Employee(1,"tom","88@qq.com","1");
		//	mapper.updateEmp(emp1);
			
			//测试删除
		//	mapper.deleteID(6);
			
			//手动提交操作
			ss.commit();
		}finally {
			ss.close();	
		}	
		
	}
	
	//测试oracle从从序列中拿到的主键值
	@Test
	public void test3() throws IOException {
		SqlSessionFactory ssf=getSqlSessionFactory();
		SqlSession ss=ssf.openSession();
		
		try{
			EmployeeMapper mapper=ss.getMapper(EmployeeMapper.class);
	
			Employee emp2=new Employee(null,"jack","88@qq.com","0");
			mapper.addEmp(emp2);
		
			ss.commit();	
		}finally {
		ss.close();
		}
	}
}

 

测试test3()打印结果:

==>  Preparing: insert into tbl_employee(last_name,email,gender) values (?,?,?) 
==> Parameters: jack(String), 88@qq.com(String), 0(String)
<==    Updates: 1

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值