mybatis进阶

1.输入映射和输出映射

Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心

UserMapper.xml文件中的配置:select标签(parameterType,resultType,resultMap),if、sql、where、foreach标签

 

1>parameterType:传入参数类型

简单类型:Integer,String....使用#{}占位符,或者${}进行sql拼接。

pojo对象:User对象,Orders对象.....使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称

QueryVo包装对象(User为QueryVo的属性):

	
	

 

2>resultType:输出参数类型

简单类型:Integer,String...

pojo对象:User对象,Orders对象.....

 

3>resultMap:自动封装输出参数

	
	
	
		
	
	
	
	

 

2.动态SQL

if、sql、where、foreach标签

 

1>sql:相同sql的抽取(如:select * from user)

	
	
		select * from user
	
	

 

2>if:查询前先进行判断

	
	

 

3>where:去掉前and(不能去掉后and)

	
	

 

4>foreach:循环遍历(

当传入的是QueryVo时,foreach中的collection值直接写QueryVo中的属性名即可,

当传入的是Integer[]类型时,mybatis会将传入名改变为array,所以collection值填写array

当传入的是List类型时,mybatis会将传入名改变为list,所以collection值填写list

	
	
	
	

 

3.关联查询(划重点)

一对一:一个订单只能由一个用户创建,一对多:一个用户可以创建多个订单

 

一对一查询:使用resultMap中的association

1>在orders表中声明user

    //表达一对一
    private User user;get/set

2>OrdersMapper.xml映射文件中表达

	
	
		
		
		
		
			
			
		
	
	
	

 

一对多查询:使用resultMap中的association

1>在User中声明List

	//表达一对多关系
	private List ordList;get/set

2>UserMapper.xml映射文件中表达

	
	
		
		
		
		
			
			
		
	
	
	

 

4.mybatis与spring的整合(划重点)

1>整合思路

SqlSessionFactory对象应该放到spring容器中作为单例存在。

Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。

数据库的连接以及数据库连接池事务管理都交给spring容器来完成

 

2>所需jar包

spring的jar包、Mybatis的jar包、Spring+mybatis的整合包、mysql数据库驱动包、连接池包

 

3>applciationContext.xml配置文件




	
   

	
	
		
		
		
		
		
		
	

	
	
		
		
		
		
	
	
	
	
	
		
		
	



db.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

4>sqlMapConfig.xml





	
	
		
	
	
	
		
		
	
	

5>UserMapper.xml







	
	

6>UserMapper.java

public interface UserMapper {
    //根据id查询
    public User findById(Integer id);

7>测试

	@Test
	public void fun2(){
		ClassPathXmlApplicationContext apx = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
		UserMapper mapper = (UserMapper) apx.getBean("userMapper");
		User user = mapper.findById(1);
		System.out.println(user);
	}

 

6.逆向工程

简单点说,就是通过数据库中的单表,自动生成java代码。

Mybatis官方提供了逆向工程,可以针对单表自动生成mybatis代码(mapper.java\mapper.xml\po类)

mybatis进阶_第1张图片

 

2>生成文件

mybatis进阶_第2张图片

3>使用

	@Test
	public void fun1(){
		ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
		UserMapper userMapper = ac.getBean(UserMapper.class);
		
		UserExample userExample = new UserExample();
		userExample.createCriteria().andUsernameLike("%张%");
		
		List users = userMapper.selectByExample(userExample);
		for (User user : users) {
			System.out.println(user);
		}
	}

 

 

 

你可能感兴趣的:(ssm)