Mybatis学习

Mybatis

一、依赖jar包:log4g,mybatis,数据库连接包

二、配置文件






  
  
  
  
  	
  	
  	
  	
  
  
  
    
      
      
      
        
        
        
        
      
    
  
  
  
  
  	
  

除了Configuration之外还要配置log4g.properties

log4j.rootLogger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=INFO

在实体类的xml文件中秩序配置好相应的sql语句,就可直接在方法中调用

例如:





	
	

注意:这里的resultType由于配置了别名,所以可以直接填写类名。同时使用resultType还需要一个前提条件,那就是实体类的属性名必须和数据库对应字段保持一致。

实体类xml中配置sql语句需要注意使用语句对应的标签。select语句使用select标签,update语句使用update标签等等。

配置语句时,如果sql语句中需要用到参数,需要配置parameterType,这里的类型要和方法中传来的类型一致,之后可以在语句中使用#{}EL表达式获取值

例如:

select多条件查询:

在使用之前的sql查询中,进行多条件查询一般需要进行参数的判断以及语句的拼接,在mybatis中,只需要使用where标签和if标签就可以自动实现sql的语句拼接。

if语句中的test判断:如果test中的值为真,则拼接if中的语句,为假则不拼接。

 

update语句中的自动拼接参数:

当不确定update语句中的参数个数时,可以使用标签和标签一起来实现参数的拼接


	update user 
	
	
		
			username = #{username},
		
		
			password = #{password},
		
	
	where
	id = #{id}

当拼接结束后,set标签会自动取出最后的逗号,使语句正确。

逻辑删除:

一般在开发中,数据库中的数据在删除时采用逻辑删除,逻辑删除就是给数据添加一个删除状态值,查询时要根据删除状态的默认值进行查询。这样执行删除时修改删除状态值就可以完成删除,数据不会被删除,在用户角度来说数据已经被删除。



	update user 
	set 
	deleteId = 1
	where 
	id = #{id}

 

模糊查询:

mybatis中在使用模糊查询时,如果是用#{}获取参数,不能直接在sql语句上拼接%(_),需要在传参时在参数中拼接完%(_)后在传入到sql语句中。或者使用${}来进行字符串的拼接,这时,可以直接在sql语句上拼接%,但是不能忘记单引号

例如:



除了这两种方法,还可以使用标签进行拼接

使用foreach标签对传入的集合参数进行遍历拼接

 

上面说了使用resultType的方式来将查询结果封装到对象中,但是这种方式在使用上有局限性,就是必须保证对象属性名和字段名一致,这时,我们可以使用resultMap来进行实体类和表字段的映射,从而解决这种问题


	
	

 

mybatis中的多关系映射

一对一(方式一):


	
	
	
		
		
	

	

在resultMap使用association标签表示该对象中的对象属性,javaType中填写的是这个属性的类型,在这个标签中使用子标签配置属性对象的映射关系。

 

一对一(方式二):


	
	
	

	

	

	
	

	

 这种方式配置的一对一是一种嵌套查询,在查询出一个student实例后,由于中配合了select,会自动去查询select中的方法,调用这个方法的时候还会传入参数,参数就是的column的值。

 

一对多:

实现一对多映射需要在类上设置好对应的对象集合属性,然后在映射文件的resultMap中通过collection标签进行配置。

配置的方式有两种:

一种是通过链表查询直接将两张表的数据查询出来,然后将副表的字段在collection标签内进行映射,此时需要设置使用哪个类的对象来接收对应结果集字段,设置不再使用association中使用的javaType,而是使用ofType。

另一种方式是通过collection标签设置select属性和column属性,在对本条记录进行映射时,会以column属性的值为参数进行子查询,并将子查询的结果集映射成我们的实体类对象。组装成集合后再赋值到对应的睡醒上,完成一条记录的映射后循环进行下一条记录的组装。

方式一:


	
	
	
		
		
	

方式二:


	
	
	 

	

	

	
	

	

 

多对多查询:

多对多关系要使用一个中间表来维护量表的外键,查询时使用三表查询


	
	
	
		
		
	

		

 

你可能感兴趣的:(Mybatis学习)