mybatis学习

#实体类

package com.neu.entity;

public class Dept {
	private Integer deptno;
	private String dname;
	private String loc;
	public Dept() {
		super();
		// TODO 自动生成的构造函数存根
	}
	public Dept(Integer deptno, String dname, String loc) {
		super();
		this.deptno = deptno;
		this.dname = dname;
		this.loc = loc;
	}
	public Integer getDeptno() {
		return deptno;
	}
	public void setDeptno(Integer deptno) {
		this.deptno = deptno;
	}
	public String getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	public String getLoc() {
		return loc;
	}
	public void setLoc(String loc) {
		this.loc = loc;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((deptno == null) ? 0 : deptno.hashCode());
		result = prime * result + ((dname == null) ? 0 : dname.hashCode());
		result = prime * result + ((loc == null) ? 0 : loc.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Dept other = (Dept) obj;
		if (deptno == null) {
			if (other.deptno != null)
				return false;
		} else if (!deptno.equals(other.deptno))
			return false;
		if (dname == null) {
			if (other.dname != null)
				return false;
		} else if (!dname.equals(other.dname))
			return false;
		if (loc == null) {
			if (other.loc != null)
				return false;
		} else if (!loc.equals(other.loc))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
	}
}

#DeptMapper.java

package com.neu.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.neu.entity.Dept;

public interface DeptMapper {
	//全部查
	List<Dept> getAll();
	//根据deptno查
	Dept getId(int deptno);
	//增
	int Insert(Dept dept);
	//删
	int Delect(int deptno);
	//改
	int Update(Dept dept);
	//传递一个不确定的表单列名的情况和模糊查询的情况
	List<Dept> getOrder(String ord);
	//传递一个模糊查询的参数的情况
	List<Dept> getByName(String dname);
	//传递多个参数的方法,第一种 给传递的参数加标签,DeptMapper.xml中使用参数标签名  如:#{dname}、#{loc}
	List<Dept> find(@Param("dname") String dname,@Param("loc") String loc);
	//传递多个参数的方法,第二种 不给传递的参数加标签,DeptMapper.xml中使用参数索引号 如:#{0}、#{1}
	//List<Dept> find(String dname,String loc);
	//用map作为参数,传递不定个数参数的方法,DeptMapper.xml中使用参数map的键(key) 如:#{dname}、#{loc}
	List<Dept> find2(Map<String, String>params);
	//动态的sql
	List<Dept> findByExample(Dept dept);
	//动态的更新数据(可能全部更新,可能部分更新)
	int updateByExample(Dept dept);
	//动态的插入数据(可能全部更新,可能部分更新)
	int insertByExample(Dept dept);
	//批量删除(集合形式)
	int batchDelete(List<Integer> deptnos);
	//批量删除(数组形式)
	int batchDelete2(int[] deptnos);
	//批量添加
	int batchInsert(List<Dept> depts);
}

DeptMapper.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.neu.mapper.DeptMapper">

	<!-- 全部查 -->
	<select id="getAll" resultType="com.neu.entity.Dept">
		select * from dept
	</select>
	
	<!-- 根据deptno查 -->
	<select id="getId" resultType="com.neu.entity.Dept">
		select * from dept where deptno = #{deptno}
	</select>
	
	<!---->
	<insert id="Insert">
		insert into dept values (#{deptno},#{dname},#{loc});
	</insert>
	
	<!---->
	<update id="Update">
		update dept set dname = #{dname},loc = #{loc} where deptno = #{deptno}
	</update>
	
	<!---->
	<delete id="Delect">
	delete from dept where deptno = #{deptno}
	</delete>
	
	
	<select id="getOrder" resultType="com.neu.entity.Dept">
		<!-- ${value} 因为传递的是一个列名 所以需要拼字符串 不能用#{} 需要用${}里面需要放value是固定的,value代表传递的字符串,而且只能是一个参数的时候使用-->
		select * from dept order by ${value}
		
	</select>
	
	<select id="getByName" resultType="com.neu.entity.Dept">
		<!-- ${value} 因为传递的是一个模糊数据,需要拼字符串 不能用#{} 需要用${}里面需要放value是固定的,value代表传递的字符串,而且只能是一个参数的时候使用-->
		
		select * from dept where dname like '%${value}%'
	</select>
	
	<select id="find" resultType="com.neu.entity.Dept">
	<!-- #{dname} #{loc}这里的dname、loc是参数标签的名-->
		select * from dept where dname =#{dname}  and loc =#{loc} 
		<!-- #{0} #{1}这里的01是参数的索引号,索引号是从0开始的 -->
		select * from dept where dname =#{0}  and loc =#{1}
	</select>
	
	<select id="find2" resultType="com.neu.entity.Dept">
	<!-- #{dname} #{loc}这里的dname、loc是map集合中的key-->
		select * from dept where dname =#{dname}  and loc =#{loc} 
	</select>
	
	<!-- 动态的拼sql语句 -->
	<select id="findByExample" resultType="com.neu.entity.Dept">
		select * from dept 
		<!-- prefix="where"是前缀,表示如果trim中有执行的语句就在之前加上where -->
		<!-- prefixOverrides="and "是前缀覆盖,表示如果trim中有执行的语句就将第一个执行的语句中的and 用前缀where覆盖掉 -->
		<!-- <trim prefix="where" prefixOverrides="and "> -->
		
		<!-- <where>标签是对<trim prefix="where" prefixOverrides="and ">标签的一个封装,两者类似起到相同的作用 -->
		<where>
			<if test="deptno != null ">
				and deptno = #{deptno}
			</if>
			<if test="dname != '' and dname !=null ">
				and dname = #{dname}
			</if>
			<if test="loc != '' and loc !=null ">
				and loc = #{loc}
			</if>
		</where>
			
		<!-- </trim> -->	
	</select>
	<!-- 不定参数的更新 -->
	<update id="updateByExample">
		update dept
		<!-- suffixOverrides=","是后缀覆盖 表示如果trim中的语句执行那么最后的一个,被覆盖掉 -->
		<!-- <trim prefix="set" suffixOverrides=","> -->
		
		<!-- <set>标签是对<trim prefix="set" suffixOverrides=",">标签的一个封装,两者类似起到相同的作用 -->
		<set>
			<if test="dname != null and dname != ''">
				dname = #{dname},
			</if>
			<if test="loc != null and loc != ''">
				loc = #{loc},
			</if>
		</set>	
		<!-- </trim> -->
		where deptno = #{deptno}
	</update>
	<!-- 不定参数的插入 -->
	<insert id="insertByExample">
		insert into dept
		(
			<trim suffixOverrides=",">
				<if test="deptno !=null">
					deptno,
				</if>
				<if test="dname !=null and dname != ''">
					dname,
				</if>
				<if test="loc !=null and loc != ''">
					loc,
				</if>
			</trim>	
		) 
		values 
		(
			<trim suffixOverrides=",">
				<if test="deptno !=null">
					#{deptno},
				</if>
				<if test="dname !=null and dname != ''">
					#{dname},
				</if>
				<if test="loc !=null and loc != ''">
					#{loc},
				</if>
			</trim>
		)
	</insert>
	
	<!-- 批量添加(集合形式) -->
	<insert id="batchInsert">
		insert into dept values
		<foreach collection="list" item="dept" separator=",">
			(#{dept.deptno},#{dept.dname},#{dept.loc})
		</foreach>
	</insert>
	
	<!-- 批量删除(集合形式) -->
	<delete id="batchDelete">
		delete from dept where deptno in
		<!-- <foreach collection="list" item="deptno" open="(" close=")" separator=",">遍历输出 list集合成以(开头,)结尾,并且用,分割 -->
		<foreach collection="list" item="deptno" open="(" close=")" separator=",">
			#{deptno}
		</foreach>
	</delete>
	
	<!-- 批量删除(数组形式) -->
	<delete id="batchDelete2">
		delete from dept where deptno in
		<!-- <foreach collection="list" item="deptno" open="(" close=")" separator=",">遍历输出 list集合成以(开头,)结尾,并且用,分割 -->
		<foreach collection="array" item="deptno" open="(" close=")" separator=",">
			#{deptno}
		</foreach>
	</delete>
</mapper>

#对这些方法进行测试

package com.neu.mapper;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.After;
import org.junit.Before;
import org.junit.Test;

import com.neu.entity.Dept;

public class DeptMapperTest {
	private DeptMapper deptMapper;
	private SqlSession session;
	
	@Before
	public void before() throws IOException {
		//读取配置文件,连接数据库
		InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
		//创建一个SqlSessionFactory
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
		//得到与数据库进行连接的会话SqlSession
		session = factory.openSession();
		
		//得到DeptMapper接口的实现类
		deptMapper = session.getMapper(DeptMapper.class);
	}
	
	@After
	public void after() {
		//关闭
		session.close();
	}
	
	//全部查
	@Test
	public void testGetAll() throws IOException{
		
		
		List<Dept> list = deptMapper.getAll();
		
		System.out.println(list);
		
	}
	
	//根据条件查
	@Test
	public void testGetId() throws IOException{
		
		Dept dept = deptMapper.getId(10);
		
		System.out.println(dept);
		
	}
	
	//增
	@Test
	public void testInsert() {
		Dept dept = new Dept(91, "hr", "beijing");
		int n = deptMapper.Insert(dept);
		
		System.out.println(n);
		//提交事务
		session.commit();
	}
	
	//改
	@Test
	public void testUpdate() {
		Dept dept = new Dept(91, "java", "shenyang");
		int n = deptMapper.Update(dept);
		
		System.out.println(n);
		session.commit();
	}
	
	//删
	@Test
	public void testDelete() {
		int n = deptMapper.Delect(91);

		System.out.println(n);
		session.commit();
	}
	
	//传递的字符串,是一个不确定的列名
	@Test
	public void testGetOrder() throws IOException{
		
		
		List<Dept> list = deptMapper.getOrder("loc");
		
		System.out.println(list);
		
	}
	
	//传递的字符串,是模糊查询的内容
	@Test
	public void testGetByName() throws IOException{
		
		
		List<Dept> list = deptMapper.getByName("a");
		
		System.out.println(list);
		
	}
	
	//传递多个参数,在xml中使用给参数加标签名或使用参数索引号的方式
	@Test
	public void find() throws IOException{
		
		
		List<Dept> list = deptMapper.find("SALES", "CHICAGO");
		
		System.out.println(list);
		
	}
	
	//传递多个值,将参数名和参数的值以map集合的方式进行传递
	@Test
	public void find2() throws IOException{
		Map<String, String> map = new HashMap<>();
		map.put("dname", "ACCOUNTING");
		map.put("loc", "NEW YORK");
		
		List<Dept> list = deptMapper.find2(map);
		
		System.out.println(list);
		
	}
	
	//动态的拼sql语句
	@Test
	public void testFindByExample() {
		Dept dept = new Dept(10, "ACCOUNTING", null);
		List<Dept> list = deptMapper.findByExample(dept);
		System.out.println(list);
	}
	
	//不定参数个数的更新
	@Test
	public void updateByExample() {
		Dept dept = new Dept(91, "java", "shenyang");
		int n = deptMapper.updateByExample(dept);
		
		System.out.println(n);
		session.commit();
	}
	
	//不定参数个数的插入
	@Test
	public void insertByExample() {
		Dept dept = new Dept(92, "hr", "");
		int n = deptMapper.insertByExample(dept);
		
		System.out.println(n);
		//提交事务
		session.commit();
	}
	
	//批量的插入
	@Test
	public void testBatchInsert() {
		List<Dept> list = new ArrayList<>();
		
		Dept dept = new Dept(91, "java", "shenyang");
		list.add(dept);
		
		dept = new Dept(92, "hr", "beijing");
		list.add(dept);
		
		int n = deptMapper.batchInsert(list);
		System.out.println(n);
		//提交事务
		session.commit();
	}
	
	
	//批量删除(集合形式)
	@Test
	public void testBatchDelet() {
		List<Integer> list = new ArrayList<>();
		list.add(91);
		list.add(92);
		int n = deptMapper.batchDelete(list);
		System.out.println(n);
		//提交事务
		session.commit();
	}
	
	//批量删除(数组形式)
		@Test
		public void testBatchDelet2() {
			int[] deptnos= {91,92};
			int n = deptMapper.batchDelete2(deptnos);
			System.out.println(n);
			//提交事务
			session.commit();
		}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值