Mybatis学习笔记

1.1 Mybatis介绍

       MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

1.2Mybatis架构 

Mybatis学习笔记_第1张图片
1、mybatis的配置
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在sqlMapConfig.xml中加载。
2、通过mabatis环境等配置信息构造sqlSessionFactory即会话工厂,sqlSessionFactory只有一个。
3、由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行,sqlSession是由工厂生产的,每个mapper文件对应一个。
3、mybatis底层自定义了Excutor执行器接口操作数据库,Excutor接口有两个实现,一个是基本执行器,一个是缓存执行器。
5、MappedStatement也是mabatis一个底层封装,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个MappedStatement对象,sql的id即是Mappedstatement的id。
6、mappedStatement对sql执行输入参数进行定义,包括hashMap、基本类型、pojo,executor通过mapedStatement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedstatement设置参数。
7、mappedstatement对sql执行输出结果进行定义,包括hashmap、基本类型、破击、,executor通过mappedstatement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
mybatis下载地址为: https://github.com/mybatis/mybatis-3/releases

1.3简单mybatis程序

1、在classpath下创建sqlMapConfig.xml



   
	
		
		
			
		
			
				
				
				
				
			
		
	
    
2、创建po类
Mybatis学习笔记_第2张图片
3、创建User.xml文件




 
4、在sqlMapConfig中加载user.xml
  
      
    
5、根据id查询用户
在user.xml中添加sql语句
 
  
6、测试程序
public class myProjectTest {
	
	//会话工厂sqlMapConfig
	private SqlSessionFactory sqlSessionFactory;
	
	@Before
	public void testBefor() throws IOException{
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
	    sqlSessionFactory = new SqlSessionFactoryBuilder()
				.build(inputStream);
	}
	
	@Test
	public void test(){
		SqlSession sqlSessiion = sqlSessionFactory.openSession();
		User user = (User)sqlSessiion.selectOne("userTest.findUserById",1);
		System.out.println(user);
	  
	}
	
}
1.4 Mapper的动态代理开发
Mapper接口开发方法只需要程序员编写Mapper接口(相当于dao接口),由mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同dao接口实现的方法。
Mapper接口开发需要遵循以下规范
(1)Mapper.xml文件中的namespacemapper接口的类路径相同
(2)Mapper接口方法名和Mapper.xml中定义的每个statementid相同 
(3)Mapper接口方法的输入参数类型和mapper.xml中定义的每个sqlparameterType的类型相同
(4)Mapper接口方法的输出参数类型和mapper.xml中定义的每个sqlresultType的类型相同

1、User.xml




  
  

2、UserDao接口
public interface IUserDao {
	/**
	 * 根据ID查询用户
	 * @param id
	 * @return
	 */
	 public User findUserById(Integer id);
	 
}
3、测试程序
public class myProjectTest {
	
	//会话工厂sqlMapConfig
	private SqlSessionFactory sqlSessionFactory;
	
	@Before
	public void testBefor() throws IOException{
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
	    sqlSessionFactory = new SqlSessionFactoryBuilder()
				.build(inputStream);
	}
	
 
	
	@Test
	public void findUserByIdTest(){
		SqlSession sqlSessiion = sqlSessionFactory.openSession();
		IUserDao userDao = sqlSessiion.getMapper(IUserDao.class);
		User user = userDao.findUserById(4);
		System.out.println(user);
	}
	
	 
}

1.5增删改查的sql

1、根据用户名模糊查询用户信息
 
  
#{}和${}

#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

${}表示拼接sql串,通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value

2、添加用户

  
    select LAST_INSERT_ID()
    INSERT INTO t_user (id,name,age,money)
    VALUES
    (#{id},#{name},#{age},#{money})
  
注:测试程序要提交事务
mysql返回自增主键,如上,添加selectKey实现将主键返回

keyProperty:返回的主键存储在pojo中的哪个属性

orderselectKey的执行顺序,是相对与insert语句来说,由于mysql的自增原理执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为after

resultType:返回的主键是什么类型

LAST_INSERT_ID():mysql的函数,返回auto_increment自增列新记录id值。

mysql使用uuid实现主键



select uuid()

insert into user(id,username,birthday,sex,address) 
		 values(#{id},#{username},#{birthday},#{sex},#{address})

注意这里使用的order是“BEFORE

3、删除用户

  
    DELETE FROM t_user WHERE id=#{id}
  
4、更新用户
 
  
    UPDATE t_user 
    
        
	       name=#{name},
	    
	    
	       age=#{age},
	    
	    
	       money=#{money},
	    
    
     where id=#{id}
  
1.6 sqlMapConfig配置文件
配置顺序,mybatis将按照下面的顺序来加载属性
Mybatis学习笔记_第3张图片

1、properties(属性)
sqlMapConfig.xml可以引用java属性文件的配置信息
例如,在classpath下定义db.properties文件,

<properties resource="db.properties"/>

2、typeAliases(类型别名)
mybatis支持别名
Mybatis学习笔记_第4张图片

自定义别名:
在sqlMapConfig.xml中配置

       
       
       
       
       
    
3、mappers(映射器)

mapper的配置的方法
(1)、 使用相对于类路径的资源,例如 
(2)、使用mapper接口类路径,例如注意:此方法要求mapper接口名和mapper映射文件名称相同,且放在同一目录下
(3)、注册指定包下的所有mapper接口如com.zhfy.project.mapper
">注意:此种方法要求mapper接口名和mapper映射文件名称相同,且放在同一个目录中。

1.7 foreach标签

1、入参为Integer[]

 

2、入参为List[Integer]

1.8 ResultMap标签

有时候数据库中的字段和实体类中的字段名字并不相同,这时需要映射

		
		
		
	
	

1.9 SQL片段

  
      select * from user
  
然后在别的需要的地方引入 
如果在的mapper.xml中需要引入sql片段,则需要在引用时加上namespace < include   refid = " namespace . sql片段 ”/>

2.0 关联查询

1、一对一关联查询
例如;以订单为中心关联用户,订单的实体中有个用户的对象
           
	    	
	    	
	    	
	    	
	    	
	    		
	    	
	    
	    
	    
	    
2、一对多关联查询
例如;以用户为中心关联订单查询,用户的实体中有个订单的对象的集合
            
	     		
	     		
	     		
	     		
	     		
	     		
	     		
		     		
		     		
		     		
	     		
	     
	     




你可能感兴趣的:(mybatis)