Mybatis知识汇总

一、pom配置


      junit
      junit
      4.12
      test
    
    
	
	    mysql
	    mysql-connector-java
	    8.0.12
	
    
	
	    log4j
	    log4j
	    1.2.17
	
	
	
	    org.mybatis
	    mybatis
	    3.4.6
	

log4j.properties配置

log4j.rootLogger=info,appender1,appender2
log4j.appender.appender1=org.apache.log4j.ConsoleAppender 
log4j.appender.appender2=org.apache.log4j.FileAppender 
log4j.appender.appender2.File=D:/logFile.txt
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout  

jdbc.properties配置

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/david?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=root

nybatis-config.properties




	
	
	
		
		
		
		
	
  
    
      
      
        
        
        
        
      
    
  
  
  	
    
    
    
    
    
  

二、包结构

包名 类名
com.zed.utils 工具类,封装SqlSessionFactory;SqlSessionFactoryUtil.class
com.zed.service 业务类,测试操作类,testUser.class
com.zed.domain 实体类,列出字段,获得getter\setter方法,重写toString()方法
com.zed.mappers 映射类,包含映射文件和映射类;userMapper.class,userMapper.xml

三、业务操作

SqlSessionFactoryUtil.java

package com.zed.util;
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;
public class SqlSessionFactoryUtil {
	private static SqlSessionFactory sqlSessionFactory;
	public static SqlSessionFactory getSqlSessionFactory(){
		InputStream inputStream = null;
		try {
			inputStream = Resources.getResourceAsStream("mybatis-config.xml");
			if(sqlSessionFactory == null){
				sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sqlSessionFactory;
	}
	public static SqlSession openSession(){
		return  getSqlSessionFactory().openSession();
	}
}

User.java

package com.zed.domain;
import java.util.Arrays;
public class User {
	private int id;
	private String name;
	private int age;
	private String phone;
	private String email;
	private byte[] pic;
	private String remark;
	public int getId() {return id;}
	public void setId(int id) {this.id = id;}
	public String getName() {return name;}
	public void setName(String name) {this.name = name;}
	public int getAge() {return age;}
	public void setAge(int age) {this.age = age;}
	public String getPhone() {return phone;}
	public void setPhone(String phone) {this.phone = phone;}
	public String getEmail() {return email;}
	public void setEmail(String email) {this.email = email;}
	public byte[] getPic() {return pic;}
	public void setPic(byte[] pic) {this.pic = pic;}
	public String getRemark() {return remark;}
	public void setRemark(String remark) {this.remark = remark;}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + ", phone=" + phone + ", email=" + email + ", pic="
				+ Arrays.toString(pic) + ", remark=" + remark + "]";
	}
}

1、UserMapper.java配合UserMapper.xml

package com.zed.mappers;
import java.util.List;

import com.zed.domain.User;
public interface UserMapper {
	/**
	 * 添加用户
	 * @param user
	 * @return
	 */
	public int addUser(User user);
	/**
	 * 查询用户
	 * @return
	 */
	public List findUsers();
	/**
	 * 根据ID查询用户ID
	 * @param id
	 * @return
	 */
	public User findUserById(int id);
	/**
	 * 根据ID删除用户
	 * @param id
	 * @return
	 */
	public int deleteUserById(int id);
	/**
	 * 更新用户
	 * @param user
	 * @return
	 */
	public int updateUser(User user);
}



	
		
		
		
		
		
		
		
	
	
  	
    	insert into user values(null,#{name},#{age},#{phone},#{email})
  	
  	
  	
  	
  		delete from user where id=#{id}
  	
  	
  		update user set name=#{name},age=#{age},phone=#{phone},email=#{email}
  	

UserTest.java测试类

package com.zed.service;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.util.SqlSessionFactoryUtil;

public class UserTest1 {
	private static Logger logger=Logger.getLogger(UserTest1.class);
	private SqlSession sqlSession=null;
	private UserMapper userMapper=null;
	
	@Before
	public void setUp() throws Exception {
		// TODO Auto-generated method stub
		sqlSession=SqlSessionFactoryUtil.openSession();
		userMapper=sqlSession.getMapper(UserMapper.class);

	}
	@After
	public void tearDown() throws Exception {
		// TODO Auto-generated method stub
		sqlSession.close();
	}
	@Test
	public void testAdd(){
		// TODO Auto-generated method stub
		logger.info("添加用户");
		User user=new User("zedeach",34,"14356756784","[email protected]");
		int result=userMapper.addUser(user);
		sqlSession.commit();
		if(result>0){
			logger.info("添加成功");
		}
	}
	@Test
	public void testDeleteById(){
		logger.info("根据id删除用户");
		int result=userMapper.deleteUserById(6);
		sqlSession.commit();
		if(result==1){
			logger.info("删除成功");
		}
	}
	@Test
	public void testUpdate(){
		logger.info("修改用户");
		User user=new User(1,"zaner",26,"15865235842","[email protected]");
		int result=userMapper.updateUser(user);
		sqlSession.commit();
		if(result>0){
			logger.info("修改成功");
		}
	}
	@Test
	public void testFindAll(){
		logger.info("查找所有用户");
		List users=userMapper.findUsers();
		sqlSession.commit();
		if(!users.isEmpty()){
			for (User user : users) {
				System.out.println(user);
			}
			logger.info("查询用户成功");
		}
	}
	@Test
	public void testFindById(){
		logger.info("根据ID查询用户");
		User user=userMapper.findUserById(2);
		sqlSession.commit();
		logger.info(user.getId()+user.getName()+user.getAge()+user.getPhone()+user.getEmail());
		if(user!=null){
			logger.info("查询用户成功");
		}
	}
}

2、关联查询:一对一查询(用户对地址)

User.java

package com.zed.domain;
public class User {
	private int id;
	private String name;
	private int age;
	private String phone;
	private String email;
	private Address address;
	public int getId() {return id;}
	public void setId(int id) {this.id = id;}
	public String getName() {return name;}
	public void setName(String name) {this.name = name;}
	public int getAge() {return age;}
	public void setAge(int age) {this.age = age;}
	public String getPhone() {return phone;}
	public void setPhone(String phone) {this.phone = phone;}
	public String getEmail() {return email;}
	public void setEmail(String email) {this.email = email;}
	public Address getAddress() {return address;}
	public void setAddress(Address address) {this.address = address;}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age
				+ ", phone=" + phone + ", email=" + email + ", address="
				+ address + "]";
	}
}

Address.java

package com.zed.domain;
public class Address{
	private int id;
	private String name;
	public int getId() {return id;}
	public void setId(int id) {this.id = id;}
	public String getName() {return name;}
	public void setName(String name) {this.name = name;}
	@Override
	public String toString() {
		return "Address [id=" + id + ", name=" + name + "]";
	}
}

AddressMapper.java

package com.zed.mappers;
import com.zed.domain.Address;
import com.zed.domain.User;
public interface AddressMapper {
	/**
	 * 查詢用戶和相關地址
	 * @param id
	 * @return
	 */
	Address findById(int id);
}

AddressMapper.xml




	
		
		
	 
  	

UserMapper.java

package com.zed.mappers;
import com.zed.domain.User;
public interface UserMapper {
	/**
	 * 查詢用戶和相關地址
	 * @param id
	 * @return
	 */
	User selectUserAndAddress(int id);
}

UserMapper.xml




	

	

	

	
		
		
		
		
		
		
		
	
	
  	

测试类

package com.zed.service;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.util.SqlSessionFactoryUtil;
public class UserTest {
	private static Logger logger=Logger.getLogger(UserTest.class);
	private SqlSession sqlSession = null;
	private UserMapper userMapper = null;
	@Before
	public void setUp() throws Exception{
		// TODO Auto-generated method stub
		sqlSession=SqlSessionFactoryUtil.openSession();
		userMapper=sqlSession.getMapper(UserMapper.class);
	}
	@After
	public void tearDown() {
		// TODO Auto-generated method stub
		sqlSession.close();
	}
	
	@Test
	public void testFindUserWithDepart(){
		logger.info("查詢用户带班级");
		User user=userMapper.selectUserAndDepart(3);
		sqlSession.commit();
		System.out.println(user);
	}
}

3、关联查询:一对多,多对一查询(用户对部门)

Depart.java

package com.zed.domain;
import java.util.List;
public class Depart {
	private int id;
	private String name;
	private List users;
	public int getId() {return id;}
	public void setId(int id) {this.id = id;}
	public String getName() {return name;}
	public void setName(String name) {this.name = name;}
	public List getUsers() {return users;}
	public void setUsers(List users) {this.users = users;}
	@Override
	public String toString() {
		return "Depart [id=" + id + ", name=" + name + ", users=" + users + "]";
	}
}

User.java

package com.zed.domain;

public class User {
	private int id;
	private String name;
	private int age;
	private String phone;
	private String email;
	public int getId() {return id;}
	public void setId(int id) {this.id = id;}
	public String getName() {return name;}
	public void setName(String name) {this.name = name;}
	public int getAge() {return age;}
	public void setAge(int age) {this.age = age;}
	public String getPhone() {return phone;}
	public void setPhone(String phone) {this.phone = phone;}
	public String getEmail() {return email;}
	public void setEmail(String email) {this.email = email;}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age
				+ ", phone=" + phone + ", email=" + email + "]";
	}
}

DepartMapper.java

package com.zed.mappers;
import com.zed.domain.Depart;
public interface DepartMapper {
	Depart findDepartById(int id);
}

UserMapper.java

package com.zed.mappers;
import java.util.List;
import com.zed.domain.User;
public interface UserMapper {
	List findUsersWithDepartId(int depart_id);
}

DepartMapper.xml




	
		
		
		
	
  	

UserMapper.xml




	
		
		
		
		
		
	
  	

DepartTest

package com.zed.service;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.zed.domain.Depart;
import com.zed.mappers.DepartMapper;
import com.zed.mappers.UserMapper;
import com.zed.util.SqlSessionFactoryUtil;

public class DepartTest {
	private static Logger logger=Logger.getLogger(DepartTest.class);
	private SqlSession sqlSession;
	private DepartMapper departMapper;
	@Before
	public void setUp() {
		// TODO Auto-generated method stub
		sqlSession=new SqlSessionFactoryUtil().openSession();
		departMapper=sqlSession.getMapper(DepartMapper.class);
	}
	
	@After
	public void tearDown() {
		// TODO Auto-generated method stub
		sqlSession.close();
	}
	
	@Test
	public void testFindUserByDepartId(){
		logger.info("通过查询部门查询用户");
		Depart depart=departMapper.findDepartById(1);
		sqlSession.commit();
		System.out.println(depart);
	}
}

4、动态SQL查询

1、if条件

2、choose、when和otherwise条件

3、where条件、自动加上where、如果where子句以and或者or开头,则自动删除第一个and或者or

4、trim条件、功能和where元素类似,提供了前缀 、后缀功能,更加灵活

5、foreach条件

6、set条件、自动加上set,自动剔除最后一个逗号","

User.java

UserMapper.java

package com.zed.mappers;
import java.util.List;
import java.util.Map;
import com.zed.domain.User;
public interface UserMapper {
	List searchUserByIf(Map map);
	List searchUserByChoose(Map map);
	List searchUserByWhere(Map map);
	List searchUserByTrim(Map map);
	List searchUserByForeach(Map map);
	int updateUser(User user);
}

UserMapper.xml




	
		
		
		
		
		
	
  	
  	
    
    
    
    
    
    	update user
    	
    		
    			name =#{name},
    		
    		
    			age =#{age},
    		
    		
    			phone =#{phone},
    		
    		
    			email =#{email},
    		
    	
    	where id = #{id}
    

UserTest.java

package com.zed.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class UserTest {
	private static Logger logger=Logger.getLogger(UserTest.class);
	private SqlSession sqlSession;
	private UserMapper userMapper;
	@Before
	public  void setUp() {
		// TODO Auto-generated method stub
		sqlSession=SqlSessionFactoryUtil.openSession();
		userMapper=sqlSession.getMapper(UserMapper.class);
	}
	@After
	public void tearDown() {
		// TODO Auto-generated method stub
		sqlSession.close();
	}
	@Test
	public void testUserByIf(){
		logger.info("使用if动态查询用户");
		Map  map=new HashMap();
		/*map.put("name", "%张%");*/
		map.put("age", 40);
		List userList=userMapper.searchUserByIf(map);
		for(User users:userList){
			System.out.println(users);
		}
		sqlSession.commit();
	}
	
	@Test
	public void testUserByChoose(){
		logger.info("使用choose动态查询用户");
		Map  map=new HashMap();
		map.put("condation", "id");
		map.put("id", 1);
		//choose
/*		List condations=new ArrayList();
		condations.add(1);
		condations.add(2);*/
		List userList=userMapper.searchUserByChoose(map);
		for(User users:userList){
			System.out.println(users);
		}
		sqlSession.commit();
	}
	@Test
	public void testUserByWhere(){
		logger.info("使用where动态查询用户");
		Map  map=new HashMap();
		map.put("id",2);
		List userList=userMapper.searchUserByWhere(map);
		for(User users:userList){
			System.out.println(users);
		}
		sqlSession.commit();
	}
	@Test
	public void testUserByTrim(){
		logger.info("使用trim动态查询用户");
		Map  map=new HashMap();
		map.put("id",3);
		List userList=userMapper.searchUserByTrim(map);
		for(User users:userList){
			System.out.println(users);
		}
		sqlSession.commit();
	}
	@Test
	public void testUserByForeach(){
		logger.info("使用Foreach动态查询用户");
		Map  map=new HashMap();
		List list=new ArrayList();
		list.add(1);
		list.add(2);
		list.add(3);
		map.put("ids",list);
		List userList=userMapper.searchUserByTrim(map);
		for(User users:userList){
			System.out.println(users);
		}
		sqlSession.commit();
	}
	@Test
	public void testUserByUpdateSet(){
		logger.info("使用set动态更新用户");
		User user = new User();
		user.setId(2);
		user.setName("猪八戒");
		user.setAge(22);
		int count=userMapper.updateUser(user);
		if(count==1){
			System.out.println("更新成功");
		}
		sqlSession.commit();
	}
}

5、物理分页与逻辑分页查询

UserMapper.java

package com.zed.mappers;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import com.zed.domain.User;
public interface UserMapper {
	/**
	 * 逻辑查询,缓存在内存进行分页,不推荐
	 * @param rowBounds
	 * @return
	 */
	List findByPage(RowBounds rowBounds);
	/**
	 * 通过Map真正实现分页
	 * @param map
	 * @return
	 */
	List findByPageMap(Map map);
}

UserMapper.xml



	
	
		
		
		
		
		
		
		
	
	
	

UserPageTest

package com.zed.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class UserTest {
	private static Logger logger=Logger.getLogger(UserTest.class);
	private UserMapper userMapper;
	private SqlSession sqlSession;
	
	@Before
	public void setUp() {
		// TODO Auto-generated method stub
		sqlSession=SqlSessionFactoryUtil.openSession();
		userMapper=sqlSession.getMapper(UserMapper.class);
	}
	@After
	public void teadDown() {
		// TODO Auto-generated method stub
		sqlSession.close();
	}
	@Test
	public void testUserByPage(){
		logger.info("逻辑分页查询用户,不推荐使用");
		//	offset 相当于每页大小;limit:每页数据	
		int offset=0,limit=6;
		RowBounds rowBounds=new RowBounds(offset,limit);
		List users=userMapper.findByPage(rowBounds);
		for(User user:users){
			System.out.println(user);
		}
	}
	@Test
	public void testUserByPageMap(){
		logger.info("真正实现物理分页查询用户,不推荐使用");
		Map map=new HashMap();
		//start开始查询条数位置,size:查询条数		
		map.put("start", 0);
		map.put("size", 6);
		List users=userMapper.findByPageMap(map);
		for(User user:users){
			System.out.println(user);
		}
	}
}

6、开启缓存cache

 

Mybatis默认情况下,Mybatis启用一级缓存,即同一个SqlSession接口对象调用了相同的select语句,则直接会从缓存中返回结果,而不是在查询一次数据库,开发者可以自己配置二级缓存,二级缓存是全局的,默认情况下,select的使用缓存的,insert update delete是不适用缓存的

UserMapper.java

package com.zed.mappers;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import com.zed.domain.User;
public interface UserMapper {
	/**
	 * 逻辑查询,缓存在内存进行分页,不推荐
	 * @param rowBounds
	 * @return
	 */
	List findByPage(RowBounds rowBounds);
	/**
	 * 通过Map真正实现分页
	 * @param map
	 * @return
	 */
	List findByPageMap(Map map);
}

UserMapper.xml



	
	
     
	
		
		
		
		
		
		
		
	
	
	
	

UserTest.java

package com.zed.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class UserTest {
	private static Logger logger=Logger.getLogger(UserTest.class);
	private UserMapper userMapper;
	private SqlSession sqlSession;
	
	@Before
	public void setUp() {
		// TODO Auto-generated method stub
		sqlSession=SqlSessionFactoryUtil.openSession();
		userMapper=sqlSession.getMapper(UserMapper.class);
	}
	@After
	public void teadDown() {
		// TODO Auto-generated method stub
		sqlSession.close();
	}
	@Test
	public void testUserByPage(){
		logger.info("逻辑分页查询用户,不推荐使用");
		//	offset 相当于每页大小;limit:每页数据	
		int offset=0,limit=6;
		RowBounds rowBounds=new RowBounds(offset,limit);
		List users=userMapper.findByPage(rowBounds);
		for(User user:users){
			System.out.println(user);
		}
	}
	@Test
	public void testUserByPageMap(){
		logger.info("真正实现物理分页查询用户,不推荐使用");
		Map map=new HashMap();
		//start开始查询条数位置,size:查询条数		
		map.put("start", 0);
		map.put("size", 6);
		List users=userMapper.findByPageMap(map);
		for(User user:users){
			System.out.println(user);
		}
	}
}

7、注解查询

UserMapper.java

package com.zed.mappers;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.zed.doamin.User;
public interface UserMapper{
	@Insert("insert into user values(null,#{name},#{age},#{phone},#{email},#{pic},#{remark})")
	public int addUser(User user);
	@Update("update user set name=#{name},age=#{age},phone=#{phone},email=#{email},pic=#{pic},remark=#{remark} where id=#{id}")
	public int updateUser(User user);
	
	@Delete("delete from user where id=#{id}")
	public int deleteUser(int id);
	
	@Select("select * from user where id=#{id}")
	public Student getUserById(int id);
	
	@Select("select * from user")
	@Results(
			{
				@Result(id=true,column="id",property="id"),
				@Result(column="name",property="name"),
				@Result(column="age",property="age"),
                @Result(column="phone",property="phone"),
                @Result(column="email",property="email"),
                @Result(column="pic",property="pic"),
                @Result(column="remark",property="remark"),
			}
	)
	public List findUsers();
}

UserTest.java

package com.zed.service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;

public class UserTest {
	
	private static Logger logger=Logger.getLogger(UserTest.class);
	private SqlSession sqlSession;
	private UserMapper userMapper;
	
	@Before
	public void setUp() {
		// TODO Auto-generated method stub
		sqlSession=SqlSessionFactoryUtil.openSession();
		userMapper=sqlSession.getMapper(UserMapper.class);
	}
	@After
	public void tearDown() {
		// TODO Auto-generated method stub
		sqlSession.close();
	}
	@Test
	public void testAddUser() {
		logger.info("新增用户");
		User user=new User();
		user.setName("待删除用户");
		user.setAge(34);
		user.setPhone("16625489654");
		user.setEmail("[email protected]");
		File file=new File("D://pic1.jpg");
		byte[] pic=null;
		InputStream inputStream;
		try {
			inputStream=new FileInputStream(file);
			pic=new byte[inputStream.available()];
			inputStream.read(pic);
			inputStream.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		user.setPic(pic);
		user.setRemark("沉默加速度");
		int count=userMapper.insertUser(user);
		if(count==1) {
			System.out.println("新增用户成功");
		}
		sqlSession.commit();
	}
	@Test
	public void testUpdateUser() {
		logger.info("更新用户");
		User user=new User();
		user.setId(8);
		user.setName("雨辰");
		user.setAge(42);
		user.setPhone("16632562145");
		user.setEmail("[email protected]");
		File file =new File("D://pic2.jpg");
		byte[] pic=null;
		InputStream inputStream;
		try {
			inputStream=new FileInputStream(file);
			pic=new byte[inputStream.available()];
			inputStream.read(pic);
			inputStream.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		user.setPic(pic);
		user.setRemark("天地星辰诀");
		int count=userMapper.updateUser(user);
		if(count==1) {
			System.out.println("更新用户成功");
		}
		sqlSession.commit();
	}
	@Test
	public void testFindUserById() {
		User user=userMapper.getUserById(1);
		System.out.println(user);
		sqlSession.commit();
	}
	
	@Test
	public void testFindUsers() {
		Map map=new HashMap();
		map.put("id", 1);
//		map.put("name", "李宇春");
		List users=userMapper.findUsers(map);
		for(User user:users) {
			System.out.println(user);
		}
		sqlSession.commit();
	} 
	
	@Test
	public void testDeleteUser() {
		int count=userMapper.deleteUser(10);
		if(count==1) {
			System.out.println("删除用户成功");
		}
		sqlSession.commit();
	}
}

8、注解查询-动态查询

UserDynaSqlProvider.java

package com.zed.mappers;
import java.util.Map;
import org.apache.ibatis.jdbc.SQL;
import com.zed.domain.User;
public class UserDynaSqlProvider {
	/** 
	  @Title: 新增用户 
	  @Description: TODO
	  @param @param user
	  @param @return
	  @return String
	  @throws 
	*/
	public String insertUser(final User user){
		return new SQL(){
			{
				INSERT_INTO("user");
				if(user.getName()!=null){
					VALUES("name", "#{name}");
				}
				if(user.getAge()!=0){
					VALUES("age", "#{age}");
				}
				if(user.getPhone()!=null){
					VALUES("phone", "#{phone}");
				}
				if(user.getEmail()!=null){
					VALUES("email", "#{email}");
				}
				if(user.getPic()!=null){
					VALUES("pic", "#{pic}");
				}
				if(user.getRemark()!=null){
					VALUES("remark", "#{remark}");
				}
			}
		}.toString();
	}
	public String updateUser(final User user){
		return new SQL(){
			{
				UPDATE("user");
				if(user.getName()!=null){
					SET("name=#{name}");
				}
				if(user.getAge()!=0){
					SET("age=#{age}");
				}
				if(user.getPhone()!=null){
					SET("phone=#{phone}");
				}
				if(user.getEmail()!=null){
					SET("email=#{email}");
				}
				if(user.getPic()!=null){
					SET("pic=#{pic}");
				}
				if(user.getRemark()!=null){
					SET("remark=#{remark}");
				}
				WHERE("id=#{id}");
			}
		}.toString();
	}
	public String deleteUser(){
		return new SQL(){
			{
				DELETE_FROM("user");
				WHERE("id=#{id}");
			}
		}.toString();
	}
	public String getUserById(){
		return new SQL(){
			{
				SELECT("*");
				FROM("user");
				WHERE("id=#{id}");
			}
		}.toString();
	}
	public String findUsers(final Map map){
		return new SQL(){
			{
				SELECT("*");
				FROM("user");
				StringBuffer sb=new StringBuffer();
				if(map.get("id")!=null){
					sb.append(" and id ="+map.get("id"));
				}
				if(map.get("name")!=null){
					sb.append(" and name like '"+map.get("name")+"'");
				}
				if(map.get("age")!=null){
					sb.append(" and age="+map.get("age"));
				}
				if(map.get("phone")!=null){
					sb.append("and phone= '"+map.get("phone")+"'");
				}
				if(map.get("email")!=null){
					sb.append("and email='"+map.get("email")+"'");
				}
				if(map.get("pic")!=null){
					sb.append("and pic="+map.get("pic"));
				}
				if(map.get("remark")!=null){
					sb.append("and remark='"+map.get("remark")+"'");
				}
				if(!sb.toString().equals("")){
					WHERE(sb.toString().replaceFirst("and", ""));					
				}
			}
		}.toString();
	}
}

UserMapper.java

package com.zed.mappers;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;
import com.zed.domain.User;
public interface UserMapper {
	@InsertProvider(type=UserDynaSqlProvider.class,method="insertUser")
	int insertUser(User user);
	@UpdateProvider(type=UserDynaSqlProvider.class,method="updateUser")
	int updateUser(User user);
	@DeleteProvider(type=UserDynaSqlProvider.class,method="deleteUser")
	int deleteUser(int id);
	@SelectProvider(type=UserDynaSqlProvider.class,method="getUserById")
	User getUserById(int id);
	@SelectProvider(type=UserDynaSqlProvider.class,method="findUsers")
	List findUsers(Map map);
}

UserTest.java

package com.zed.service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;

public class UserTest {
	
	private static Logger logger=Logger.getLogger(UserTest.class);
	private SqlSession sqlSession;
	private UserMapper userMapper;
	
	@Before
	public void setUp() {
		// TODO Auto-generated method stub
		sqlSession=SqlSessionFactoryUtil.openSession();
		userMapper=sqlSession.getMapper(UserMapper.class);
	}
	@After
	public void tearDown() {
		// TODO Auto-generated method stub
		sqlSession.close();
	}
	@Test
	public void testAddUser() {
		logger.info("新增用户");
		User user=new User();
		user.setName("待删除用户");
		user.setAge(34);
		user.setPhone("16625489654");
		user.setEmail("[email protected]");
		File file=new File("D://pic1.jpg");
		byte[] pic=null;
		InputStream inputStream;
		try {
			inputStream=new FileInputStream(file);
			pic=new byte[inputStream.available()];
			inputStream.read(pic);
			inputStream.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		user.setPic(pic);
		user.setRemark("沉默加速度");
		int count=userMapper.insertUser(user);
		if(count==1) {
			System.out.println("新增用户成功");
		}
		sqlSession.commit();
	}
	@Test
	public void testUpdateUser() {
		logger.info("更新用户");
		User user=new User();
		user.setId(8);
		user.setName("雨辰");
		user.setAge(42);
		user.setPhone("16632562145");
		user.setEmail("[email protected]");
		File file =new File("D://pic2.jpg");
		byte[] pic=null;
		InputStream inputStream;
		try {
			inputStream=new FileInputStream(file);
			pic=new byte[inputStream.available()];
			inputStream.read(pic);
			inputStream.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		user.setPic(pic);
		user.setRemark("天地星辰诀");
		int count=userMapper.updateUser(user);
		if(count==1) {
			System.out.println("更新用户成功");
		}
		sqlSession.commit();
	}
	@Test
	public void testFindUserById() {
		User user=userMapper.getUserById(1);
		System.out.println(user);
		sqlSession.commit();
	}
	
	@Test
	public void testFindUsers() {
		Map map=new HashMap();
		map.put("id", 1);
//		map.put("name", "李宇春");
		List users=userMapper.findUsers(map);
		for(User user:users) {
			System.out.println(user);
		}
		sqlSession.commit();
	} 
	
	@Test
	public void testDeleteUser() {
		int count=userMapper.deleteUser(10);
		if(count==1) {
			System.out.println("删除用户成功");
		}
		sqlSession.commit();
	}
}

9、一对一、一对多、多对一注解开发

Depart.java

package com.zed.domain;
import java.util.List;
public class Depart {
	private int id;
	private String name;
	private List users;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List getUsers() {
		return users;
	}
	public void setUsers(List users) {
		this.users = users;
	}
	@Override
	public String toString() {
		return "Depart [id=" + id + ", name=" + name + ", users=" + users + "]";
	}
}

Region.java

package com.zed.domain;
public class Region {
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Region [id=" + id + ", name=" + name + "]";
	}
}

User.java

package com.zed.domain;

import java.util.Arrays;

public class User {
	private int id;
	private String name;
	private int age;
	private String phone;
	private String email;
	private byte[] pic;
	private String remark;
	private Region region;
	private Depart depart;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public byte[] getPic() {
		return pic;
	}
	public void setPic(byte[] pic) {
		this.pic = pic;
	}
	public String getRemark() {
		return remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	public Region getRegion() {
		return region;
	}
	public void setRegion(Region region) {
		this.region = region;
	}
	public Depart getDepart() {
		return depart;
	}
	public void setDepart(Depart depart) {
		this.depart = depart;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + ", phone=" + phone + ", email=" + email + ", pic="
				+ Arrays.toString(pic) + ", remark=" + remark + ", region=" + region + ", depart=" + depart + "]";
	}
}

DepartMapper.java

package com.zed.mappers;

import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import com.zed.domain.Depart;

public interface DepartMapper {
	
	@Select("select * from depart where id=#{id}")
	Depart findDepartById(int id);
	
	@Select("select * from depart where id=#{id}")
	@Results({
		@Result(id=true,column="id",property="id"),
		@Result(column="name",property="name"),
		@Result(column="id",property="users",many=@Many(select="com.zed.mappers.UserMapper.findUserByDepartId")),
	})
	Depart findUserAndDepartById(int id);

}

RegionMapper.java

package com.zed.mappers;

import org.apache.ibatis.annotations.Select;

import com.zed.domain.Region;

public interface RegionMapper {
	
	/**
	 * 通过ID查询region
	 * @param id
	 * @return
	 */
	@Select("select * from region where id=#{id}")
	Region findRegionById(int id);
}

UserMapper.java

package com.zed.mappers;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.zed.domain.User;
public interface UserMapper {
	/**
	 * @param user
	 * @return
	 */
	@Insert("insert into user values(null,#{name},#{age},#{phone},#{email},#{pic},#{remark},1,2)")
	int addUser(User user);
	
	/**
	 * @param id
	 * @return
	 */
	@Select("select * from user where id=#{id}")
	User findUserById(int id);
	/**
	 * @return
	 */
	@Select("select * from user")
	@Results({
		@Result(id=true,column="id",property="id"),
		@Result(column="name",property="name"),
		@Result(column="age",property="age"),
		@Result(column="phone",property="phone"),
		@Result(column="email",property="email"),
		@Result(column="pic",property="pic"),
		@Result(column="remark",property="remark")
	}) 
	List findUsers();
	
	/**
	 * @param user
	 * @return
	 */
	@Update("update user set name=#{name},age=#{age},phone=#{phone},email=#{email},pic=#{pic},remark=#{remark} where id=#{id}")
	int updateUser(User user);
	
	/**
	 * @param id
	 * @return
	 */
	@Delete("delete from user where id=#{id}")
	int deleteUserById(int id);
	
	/**
	 * 查询用户和地址--一对一
	 * @param id
	 * @return
	 */
	@Select("select * from user where id=#{id}")
	@Results({
		@Result(id=true,column="id",property="id"),
		@Result(column="name",property="name"),
		@Result(column="age",property="age"),
		@Result(column="phone",property="phone"),
		@Result(column="email",property="email"),
		@Result(column="pic",property="pic"),
		@Result(column="remark",property="remark"),
		@Result(column="region_id",property="region",one=@One(select="com.zed.mappers.RegionMapper.findRegionById")),
	})
	User findUserAndRegionByid(int id);
	/**
	 * 查询用户,地址,部门,一对一
	 * @param id
	 * @return
	 */
	@Select("select * from user where id = #{id}")
	@Results({
		@Result(id=true,column="id",property="id"),
		@Result(column="name",property="name"),
		@Result(column="age",property="age"),
		@Result(column="phone",property="phone"),
		@Result(column="email",property="email"),
		@Result(column="pic",property="pic"),
		@Result(column="remark",property="remark"),
		@Result(column="region_id",property="region",one=@One(select="com.zed.mappers.RegionMapper.findRegionById")),
		@Result(column="depart_id",property="depart",one=@One(select="com.zed.mappers.DepartMapper.findDepartById")),
	})
	User findUserAndRegionAndDepartById(int id);
	
	@Select("select * from user where depart_id=#{depart_id}")
	@Results({
		@Result(id=true,column="id",property="id"),
		@Result(column="name",property="name"),
		@Result(column="age",property="age"),
		@Result(column="phone",property="phone"),
		@Result(column="email",property="email"),
		@Result(column="pic",property="pic"),
		@Result(column="remark",property="remark"),
	})
	List findUserByDepartId(int depart_id);
}

UserTest.java

package com.zed.service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class UserTest {
	private static Logger logger=Logger.getLogger(UserTest.class);
	private UserMapper userMapper;
	private SqlSession sqlSession;
	@Before
	public void setUp() throws Exception {
		// TODO Auto-generated method stub
		sqlSession=SqlSessionFactoryUtil.openSession();
		userMapper=sqlSession.getMapper(UserMapper.class);
	}
	@After
	public void tearDown() throws Exception{
		// TODO Auto-generated method stub
		sqlSession.close();
	}
	@Test
	public void testAddUser() {
		logger.info("添加带头像用户");
		User user=new User();
		user.setName("测试者");
		user.setAge(5);
		user.setPhone("04717912521");
		user.setEmail("[email protected]");
		user.setRemark("一代天骄");
		File file=new File("D://pic.jpg");
		byte[] pic = null;
		InputStream inputStream;
		try {
			inputStream = new FileInputStream(file);
			pic=new byte[inputStream.available()];
			inputStream.read(pic);
			inputStream.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		user.setPic(pic);
		int count=userMapper.addUser(user);
		if(count==1) {
			System.out.println("添加用户成功");
		}
		sqlSession.commit();
	}
	@Test
	public void testfindUserById() {
		logger.info("查询带头像用户");
		User user=userMapper.findUserById(2);
		System.out.println(user);
		sqlSession.commit();
	}
	@Test
	public void testFindUsers() {
		logger.info("查询所有带头像用户");
		List users=userMapper.findUsers();
		for(User user:users) {
			System.out.println(user);
		}
		sqlSession.commit();
	}
	@Test
	public void testUpdateUser() {
		logger.info("更新用户");
		User user=new User();
		user.setId(5);
		user.setName("林青霞");
		user.setAge(36);
		user.setPhone("04717912521");
		user.setEmail("[email protected]");
		user.setRemark("香港四大美女之一");
		File file=new File("D://pic1.jpg");
		byte[] pic=null;
		InputStream inputStream;
		try {
			inputStream = new FileInputStream(file);
			pic=new byte[inputStream.available()];
			inputStream.read(pic);
			inputStream.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		user.setPic(pic);
		int count=userMapper.updateUser(user);
		if(count==1) {
			System.out.println("更新成功");
		}
		sqlSession.commit();
	}
	@Test
	public void testDeleteUserById() {
		int count=userMapper.deleteUserById(6);
		if(count==1) {
			System.out.println("删除成功");
		}
		sqlSession.commit();
	}
	@Test
	public void testFindUserAndRegionById() {
		logger.info("通过ID查询用户和地址");
		User user=userMapper.findUserAndRegionByid(1);
		System.out.println(user);
		sqlSession.commit();
	}
	@Test
	public void testFindUserAndRegionAndDepartById() {
		logger.info("通过ID查询用户、地址、部门");
		User user=userMapper.findUserAndRegionAndDepartById(1);
		System.out.println(user);
		sqlSession.commit();
	}
}

DepartTest.java

package com.zed.service;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.Depart;
import com.zed.mappers.DepartMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class DepartTest {
	
	private static Logger logger=Logger.getLogger(DepartTest.class);
	private DepartMapper departMapper;
	private SqlSession sqlSession;
	
	@Before
	public void setUp() throws Exception{
		// TODO Auto-generated method stub
		sqlSession=SqlSessionFactoryUtil.openSession();
		departMapper=sqlSession.getMapper(DepartMapper.class);
	}
	@After
	public void tearDown() throws Exception {
		// TODO Auto-generated method stub
		sqlSession.commit();
	}
	@Test
	public void testDepart() {
		logger.info("查询用户和部门--一对多");
		Depart depart=departMapper.findUserAndDepartById(1);
/*		for(User user:userList) {
			System.out.println(user);
		}*/
		System.out.println(depart);
		sqlSession.commit();
	}
}

 

你可能感兴趣的:(MYBATIS)