MyBatis笔记:增删改功能

MyBatis实现增删改

通过mybatis实现增删改功能,依然是通过接口绑定sql映射文件

如有疑问参考之前的文章:https://blog.csdn.net/qq_36949176/article/category/8464528

Employee类

package com.yorkmass.mybatis.bean;

import org.apache.ibatis.type.Alias;

@Alias("emp")
public class Employee {
	private Integer id;
	private String lastName;
	private String email;
	private String gender;
	public Employee(){
		super();
	}
	
	public Employee(Integer id, String lastName, String email, String gender) {
		super();
		this.id = id;
		this.lastName = lastName;
		this.email = email;
		this.gender = 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;
	}
	@Override
	public String toString() {
		return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]";
	}
	
}

接口文件

package com.yorkmass.mybatis.dao;

import com.yorkmass.mybatis.bean.Employee;

public interface EmployeeMapper {

		public Employee getEmpById(Integer id);
		public void addEmp(Employee employee);
		//定义返回值类型
		//public Long addEmp(Employee employee);
		public boolean updateEmp(Employee employee);
//		public void updateEmp(Employee employee);
		public void deleteEmpById(Integer id);
}

sql映射文件

<?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="com.yorkmass.mybatis.dao.EmployeeMapper">
<!-- 
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值

public Employee getEmpById(Integer id);
 -->
 <!-- 如果有两个同样的方法,不带数据库标识的会被舍弃,默认加载不带标识和带标识的,如果两个不同方法,一个带标识,一个不带标识,则都加载 -->
<select id="getEmpById" resultType="emp" >
select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="emp" databaseId="mysql">
select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="emp" databaseId="oracle">
select * from tbl_employee where id = #{id}
</select>
<!-- public void addEmp(Employee employee);-->
<!-- parameterType:可以省略, -->
<insert id="addEmp" parameterType="com.yorkmass.mybatis.bean.Employee">
insert into tbl_employee(last_name,email,gender)
value(#{lastName},#{email},#{gender})
</insert>
<!-- public void updateEmp(Employee employee);-->
<update id="updateEmp">
update tbl_employee
	set last_Name=#{lastName},email=#{email},gender=#{gender}
	where id=#{id}
</update>	
<!-- public void deleteEmpById(Integer id);-->	
<delete id="deleteEmpById">
 delete from tbl_employee where id=#{id}
</delete>
	
</mapper>

测试文件

其中test03方法包含增删改

package com.yorkmass.mybatis.test;

import java.io.IOException;
import java.io.InputStream;

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.yorkmass.mybatis.bean.Employee;
import com.yorkmass.mybatis.dao.EmployeeMapper;
import com.yorkmass.mybatis.dao.EmployeeMapperAnnotation;

public class MyBatisTest {
	
	public SqlSessionFactory getSqlSessionFactory() throws IOException{
		String resource="mybatis-config.xml";
		InputStream inputStream=Resources.getResourceAsStream(resource);
		return new SqlSessionFactoryBuilder().build(inputStream);
	}
	/**
	 * 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象
	 * 			有数据源一些运行环境信息
	 * 2、sql映射文件;配置了每一个sql,以及sql的封装规则等。
	 * 3、将sql映射文件注册在全局配置文件中
	 * 4、写代码:
	 * 		1)、根据全局配置文件得到sqlSessionFatory;
	 * 		2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
	 * 			一个sqlSession就是代表和数据库的一次会话,用完关闭
	 * 		3)、使用sql的唯一标识来告诉MyBatis执行哪个sql,sql都是保存在映射文件中的
	 * @throws IOException
	 */
//	@Test
//	public void test() throws IOException {
//		String resource = "mybatis-config.xml";
//		InputStream inputStream = Resources.getResourceAsStream(resource);
//		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//		//获取sqlSession实例,能直接执行已经映射的sql语句
//		//sql的唯一标识:statement Unique identifier matching the statement to use.
//		//执行sql要用的参数:parameter A parameter object to pass to the statement.
//		SqlSession openSession = sqlSessionFactory.openSession();
//		try {
//		Employee employee=openSession.selectOne("com.yorkmass.mybatis.EmployeeMapper.selectEmp", 1);
//		System.out.println(employee);
//		} finally {
//		openSession.close();
//		}
//	}
		
	@Test
	public void test01() throws IOException{
		//1、获取sqlSessionFactory对象
		SqlSessionFactory sqlSessionFactory= getSqlSessionFactory();
		
		//2、获取sqlSession对象
		SqlSession openSession =sqlSessionFactory.openSession();
		
		try{
		//3、获取接口的实现类对象
		//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
		EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class);
		
		Employee employee=mapper.getEmpById(2);
		System.out.println(mapper.getClass());
		
		System.out.println(employee);
		}finally {
			openSession.close();
		}
	}
	@Test
	public void test02() throws IOException{
		SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
		SqlSession openSession=sqlSessionFactory.openSession();
		try {
			EmployeeMapperAnnotation mapper=openSession.getMapper(EmployeeMapperAnnotation.class);
			Employee empById=mapper.getEmpById(1);
			System.out.println(empById);
		}finally{
			openSession.close();
		}
	}
	/**
	 * 测试增删改
	 * 1、mybatis允许增删改直接定义以下类型的返回值(你如果想返回true or false之类的)
	 *   		Integer、Long(把影响多少行封装成Integer\Long)、Boolean(影响0行以上true,0行false)
	 * 2、我们需要手动提交数据openSession.commit();
	 * @throws IOException
	 */
	@Test
	public void test03() throws IOException{
		SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
		//获取到的SqlSession不会自动提交数据,还一个带参数的openSession会自动提交数据
		SqlSession openSession=sqlSessionFactory.openSession();
		try{
			EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class);
			//测试添加
//			Employee employee=new Employee(null,"jerry","15032506306@163.com","1");
//			mapper.addEmp(employee);
			//测试修改、更新
			Employee employee=new Employee(1,"yy","17679169423@163.com","1");
			boolean updateEmp=mapper.updateEmp(employee);
			System.out.println(updateEmp);
			//测试删除
//			mapper.deleteEmpById(2);
			//2.手动提交数据
			openSession.commit();
			
		}finally {
			openSession.close();
		}
	}
}

运行结果(目前):

DEBUG 01-25 17:07:23,905 ==>  Preparing: select * from tbl_employee where id = ?   (BaseJdbcLogger.java:145) 
DEBUG 01-25 17:07:23,939 ==> Parameters: 2(Integer)  (BaseJdbcLogger.java:145) 
DEBUG 01-25 17:07:23,950 <==      Total: 0  (BaseJdbcLogger.java:145) 
class com.sun.proxy.$Proxy7
null
DEBUG 01-25 17:07:23,981 ==>  Preparing: select * from tbl_employee where id=?   (BaseJdbcLogger.java:145) 
DEBUG 01-25 17:07:23,981 ==> Parameters: 1(Integer)  (BaseJdbcLogger.java:145) 
DEBUG 01-25 17:07:23,984 <==      Total: 1  (BaseJdbcLogger.java:145) 
Employee [id=1, lastName=yy, email=17679169423@163.com, gender=1]
DEBUG 01-25 17:07:24,021 ==>  Preparing: update tbl_employee set last_Name=?,email=?,gender=? where id=?   (BaseJdbcLogger.java:145) 
DEBUG 01-25 17:07:24,022 ==> Parameters: yy(String), 17679169423@163.com(String), 1(String), 1(Integer)  (BaseJdbcLogger.java:145) 
DEBUG 01-25 17:07:24,022 <==    Updates: 1  (BaseJdbcLogger.java:145) 
true

 

posted @ 2019-01-25 17:08  yorkmass  阅读(226)  评论(0)    收藏  举报