mybatis-210718-01---映射文件_增删改查_获取(非)自增主键

mybatis-210718-01—映射文件_增删改查_获取(非)自增主键


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>

	<!-- 
		1. mybatis可以使用properties引入外部properties配置文件內容
			resource=""		引入类路径下的资源
			url=""			引入网络路径或者磁盘路径下的资源
	-->
	<properties resource="dbconfig.properties"></properties>
    
    <!-- ====================================================================================== -->
	
	<!--
		 2. settings包含很多重要的设置项
		 	setting用来设置每一个设置项
		 		name:设置项名
		 		value:设置项取值
	-->
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true"></setting>
	</settings>
	
    <!-- ====================================================================================== -->
	
	<!--
		3. typeAliases:别名处理器,可以为我们的java类型起别名 
		   别名不区分大小写
	-->
	<typeAliases>
		<!--
			方法1.
				type:指定要起的别名的类型全类名,默认别名就是类名小写,employee
				alias:指定新的别名
		-->
		<typeAlias type="com.bgy.mybatis.bean.Employee" alias="employee"/>
		
		<!--
			方法2.
				package:为某个包下的所有类批量起别名
				name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名【类名小写】)
		-->
		<package name="com.bgy.mybatis.bean"/>
		
		<!-- 
			方法3.
				批量起别名的情况下,如果类名重复,使用@Alias注解为某个类型执指定新的别名 
		-->
	</typeAliases>
    
    <!-- ====================================================================================== -->
	
	<!-- 
		4.
		environments:环境,mybatis可以配置多种环境;default指定使用某种环境
			environment:配置一个具体的环境信息;必须要一下两个标签;id代表当前环境的唯一标识
				transactionManager:事务管理器
					type:事务管理器的类型
						JDBC | MANAGED
						自定义事务管理器:实现TransactionFactory接口.type指定为全类名
				dataSource:数据源
					type:数据源类型
						UNPOOLED | POOLED | JNDI
						自定义数据源:实现DataSourceFactory接口,type是群类名
					
	-->
	<environments default="development">
	
		<environment id="test">
			<transactionManager type=""></transactionManager>
			<dataSource type=""></dataSource>
		</environment>
		
		<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>
    
     <!-- ====================================================================================== -->
    <!--
    	5.
		databaseIdProvider:支持多数据库厂商
			type="DB_VENDOR"
				作用就是得到数据库厂商的标识,mybatis就能根据数据库厂商标识来执行不同的sql
				MySQL | Oracle | SQL Server ....
	-->
	<databaseIdProvider type="DB_VENDOR">
		<!-- 为不同的数据厂商起别名 -->
		<property name="MySQL" value="mysql"/>
		<property name="Oracle" value="oracle"/>
		<property name="SQL Server" value="sqlserver"/>
	</databaseIdProvider>
    
    <!-- ====================================================================================== -->

	<!-- 
		6.
		将我们写好的sql映射文件(EmployeeMapper.xml)注册到全局配置文件(mybatis-config.xml)中	
	-->
	<mappers>
		<!--
			mapper:注册一个sql映射
				注册配置文件:
					resource:引用类路径下的sql映射文件
					url:引用网络路径或者磁盘路径下的sql映射文件
						file:///var/mappers/AuthorMapper.xml
				注册接口:
					class:引用(注册)接口
						方法1)有sql映射文件,映射文件名必须和接口名相同,并且放在与接口同一目录下
						方法2)没有sql映射文件,所有的sql都是利用注解写在接口上的
		-->
		<!-- <mapper url="file:///var/mappers/AuthorMapper.xml"/> -->
		
		<mapper resource="EmployeeMapper.xml" />
		
		<!-- 方法1)有sql映射文件,映射文件名必须和接口名相同,并且放在与接口同一目录下 -->
		<!-- <mapper class="com.bgy.dao.EmployeeMapper"/> -->
		
		<!-- 方法2)没有sql映射文件,所有的sql都是利用注解写在接口上的 -->
		<mapper class="com.bgy.mybatis.dao.EmployeeMapperAnnotation"/>
		
		<!-- 
			批量注册 
			映射文件名必须和接口名相同,并且放在与接口同一目录下
			把EmployeeMapper.xml文件和EmployeeMapper.java文件,都放在com.bgy.dao包下
		-->
		<!-- <package name="com.bgy.dao"/> -->
	</mappers>
</configuration>

EmployeeMapper.java

package com.bgy.mybatis.dao;

import com.bgy.mybatis.bean.Employee;

public interface EmployeeMapper {
	
	public Employee getEmpById(Integer id);
	
	public void addEmp(Employee employee);
	
	public boolean updateEmp(Employee employee);
	
	public void deleteEmpById(Integer id);
}

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">
<mapper namespace="com.bgy.mybatis.dao.EmployeeMapper">
  <select id="getEmpById" resultType="com.bgy.mybatis.bean.Employee">
    select 
    	id,last_name,gender,email
    from
    	tbl_employee 
    where 
    	id = #{id}
  </select>
  
  	<!-- 
  		public void addEmp(Employee employee);
  		parameterType:参数类型     可以省略 
  	-->
  	<!-- 
  		获取自增主键值:
	  		mysql支持自增主键
	  		mybatis也是利用statement.getGeneratedKeys();
	  		useGeneratedKeys="true"  使用自增主键获取主键值策略
	  		keyProperty:指定对应的主键属性,也就是mybatis获取到主键以后,将这个值封装给JavaBean的那个属性。
  	 -->
  	<insert id="addEmp" parameterType="com.bgy.mybatis.bean.Employee" 
  		useGeneratedKeys="true" keyProperty="id" databaseId="mysql">
  		
  		insert into
  			tbl_employee(last_name,email,gender)
  		values (#{lastName},#{email},#{gender})
  	</insert>
  	
  	<!--
  		Oracle 不支持自增,Oracle使用序列来模拟自增
  		每次插入的数据的主键是从序列中拿到的值,如何获取这个值 
  	-->
  	<insert id="addEmp" databaseId="oracle">
  		<!-- 
  			keyProperty:查出的主键值封装给JavaBean的那个属性
  			order="BEFORE":当前sql在插入sql之前运行
  			order="AFTER":当前sql在插入sql之后运行
  			resultType:查出的数据的返回值类型
  		-->
  		<!--
  			BEFORE执行顺序:
  				先运行selectKey查询id的sql,查出的id值封装给JavaBean的id属性。
  				再运行插入的sql,就可以去除id属性对应的值。
  			AFTER执行顺序:
  				先运行插入的sql(从序列中取出新值作为id)
  				再运行selectKey查询id的sql
  		-->
  		<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
  			<!-- 编辑查询主键的sql语句 -->
  			select employees_seq.nextval from dual
  		</selectKey>
  		
  		insert into
  			employees(employee_id,last_name,email)
  		values (#{id},#{lastName},#{email})
  	</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>

Employee.java

package com.bgy.mybatis.bean;

import org.apache.ibatis.type.Alias;

/*
 	批量起别名的情况下,使用@Alias注解为某个类型执指定新的别名,叫emp
 	如果bean包下有子包,子包也叫Employee,那就要使用注解起别名了
 */
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 + "]";
	}
}

MybatisTest.java

package com.bgy.mybatis.test;

import static org.junit.jupiter.api.Assertions.*;

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.jupiter.api.Test;

import com.bgy.mybatis.bean.Employee;
import com.bgy.mybatis.dao.EmployeeMapper;
import com.bgy.mybatis.dao.EmployeeMapperAnnotation;

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

	@Test
	public void test01() throws IOException {
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		
		SqlSession openSession = sqlSessionFactory.openSession();
		
		try {
			EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
			Employee employee = mapper.getEmpById(1);
			
			System.out.println("test01");
			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 employee = mapper.getEmpById(1);
			
			System.out.println("test02");
			System.out.println(employee);
		} finally {
			openSession.close();
		}
	}
	
	/**
	 *  测试增删改
	 * 1. mybatis允许增删改直接定义一下类型返回值
	 * 		Integer,Long,Boolean 
	 * 2. 需要手动提交数据
	 * 		sqlSessionFactory.openSession(); ------>需要手动提交
	 * 		sqlSessionFactory.openSession(true); ------>自动提交
	 * @throws IOException
	 */
	@Test
	public void test03() throws IOException{
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		
		// 1. 获取到的SqlSession不会自动提交数据
		SqlSession openSession = sqlSessionFactory.openSession();
		
		try {
			
			EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
			
			// 增加
			Employee employee = new Employee(null,"测试获取自增主键",null,null);
			mapper.addEmp(employee);
			System.out.println(employee.getId());
			
			// 修改
//			Employee employee = new Employee(1,"zhangsan","zhangsan@qq.com","1");
//			boolean flag = mapper.updateEmp(employee);
//			System.out.println(flag);
			
			// 删除
//			mapper.deleteEmpById(2);
			
			// 2. 手动提交事务
			openSession.commit();
		} finally {
			openSession.close();
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值