学习MyBatis必知必会(6)~Mapper基础的拓展


一、typeAlias 类型别名【自定义别名、系统自带别名】

1、类型别名:为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写


2、配置自定义别名:

(1)方式一:为具体某个类配置别名

//在全局配置文件中添加别名的配置:
  	
   
   
   		
   
    

//在Mapper文件中使用:


★(2)方式二:为具体包配置别名【一般包名就写到domain包即可】,然后包下的类 直接类首字母小写 即可使用:

//在全局配置文件中添加别名的配置:
  
  
   
   		 
   		
   		
   
 

//在Mapper文件中使用:

  • myBatis中别名是不区分大小写的

(3)方式三:使用注解的方式,贴标签到domain类上 @Alias("**")


3、系统自带的别名【基本类型+包装类型,还有map类型】---作用:需要返回值时,设置返回类型 resultType

---就是基本类型加个下划线,包装类型的别名就是基本类型啦。例如int的别名是_int, Integer的别名是int

■ 举例: 查询的返回类型是整型,使用别名int:

 


	/* 测试查询总数 */
	@Test
	public void testGetCounts() throws IOException {
        SqlSession session = MyBatisUtil.getSession();
		//4、进行数据库操作(CRUD)
		int count = session.selectOne("com.shan.hello.UserMapper.getCounts");
		System.out.println(count);
		//5、关闭资源
		session.close();
	}

■ 举例: 查询的返回类型是部分列,使用别名map:

 

          

	/* 测试查询部分列 */
	@Test
	public void testGetPartCrows() throws IOException {
        SqlSession session = MyBatisUtil.getSession();
		//4、进行数据库操作(CRUD)
		Map user = session.selectOne("com.shan.hello.UserMapper.getPartCrows", 2L);
		System.out.println(user);
		//5、关闭资源
		session.close();
	}



二、properties 属性配置 [动态引入]

1、动态替换:属性在外部进行配置,然后进行动态替换:

(1)建立一个外部的.properties 文件 【key=value形式】:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatisdemo
username=root
password=admin

(2)引入和动态替换,通过properties的resource引入,然后动态替换是使用${}:

 
  	  
  	
  	
	  	
	  	
	  		
	  		
	  		
	  		
	  			
	  			
	  			
	  			
	  		
	  	
  
 



三、resultMap [解决表的列名和对象的属性名不匹配的问题]

✿ 默认情况下,通过设置返回类型resultType 是要求表的列名和对象的属性名要一致,否则会出错。

1、方式一:使用别名:

 

★ 2、方式二:使用resultMap:

  • resultMap 和 resultType不能同时使用
  
  	  
  	  	
  	  	
  	  	
  	  
  	  	  



四、Mapper接口和原理 [好比是DAO层]

1、回顾之前执行sql的方式是:使用namespace.id 的方式找到sql元素,并执行sql语句。

■ 该方式存在几个问题:

	public void testGet() throws IOException {
		// 创建SqlSession会话对象,好比连接对象Connection
		SqlSession session = MyBatisUtil.getSession();
		// 进行数据库操作(CRUD)
		User user = session.selectOne("com.shan.hello.UserMapper.get", 2L);//第一个参数是字符串无法编译时检查,第二个参数是Object类型也无法编译时检查
		System.out.println(user);
		// 关闭资源
		session.close();
	}

(1)第一个参数:因为传入的是String类型的参数,可能会写错,写错检查也是等到运行时才发现

(2)第二个参数:Object类型,不需要被检查,万物皆对象

(3)每个操作【增删改查】的代码模板是相同的,可以抽取


--------解决:使用Mapper 接口,类似DAO接口,在Mapper接口中去定义每一个操作方法。

★ DAO诞生的背景:以前我们是把数据库的操作代码编写到客户端里:
跟业务代码混杂在一起;②而且每次操作数据库时都需要重复书写代码

2、Mapper组件:Mapper接口+Mapper文件

(1)Mapper 文件和Mapper 接口应该放到同一包下

(2)Mapper文件中的namespace 对应 Mapper接口的全限定名称

(3)Mapper文件中的操作元素的**id **对应 Mapper接口的方法名称

/* Mapper 接口*/
public interface UserMapper {
	void save(User user);
	void delete(Long id);
	void update(User user, Long id);
	void get(Long id);
	List getListAll();
}


  
  
  	    
	  
	  	insert into t_user (name, salary) values (#{name}, #{salary});
	  	  
	  
	  
	  
	  	delete from t_user where id = #{id};
	  
	  
	  
	  
	  	update t_user set name = #{name}, salary = #{salary} where id = #{aid}; 
	  
	  
  	  
	  
	  
	  
	  

/* 测试,调用Mapper接口操作数据库 */
@Test
public void testGetList() throws IOException{
	SqlSession session = MyBatisUtil.getSession();
	UserMapper userMapper = session.getMapper(UserMapper.class);

	List users = userMapper.getListAll();
	System.out.println(users);	
}



五、参数处理【使用注解@Param实现处理多个参数】

---myBatis默认情况下只能处理一个参数,解决查询多个参数的方法:

1、方法一:封装成一个对象 【可以,但是麻烦,需要定义很多的javaBean对象】

2、方法二:封装成Map对象 (Map的key好比时javaBean对象的属性名,Map的value好比时javaBean的属性值)【也有点麻烦,因为每次都需要创建一个Map对象】

/* ClientMapper 接口 */
public interface ClientMapper {
	//将多个参数封装成一个Map对象
	Client login2(Map map);
}



   

        
/* 测试 */       
@Test
public void testLogin2() throws IOException {
	Map paramMap = new HashMap() {
		{
				//设置map的元素的键值对的值
				this.put("username", "shan");
				this.put("password", "1");
		}
	};
	SqlSession session = MyBatisUtil.getSession();
	ClientMapper clientMapper = session.getMapper(ClientMapper.class);	
	Client client = clientMapper.login2(paramMap);
	System.out.println(client);
	session.close();
}        

★ 3、方法三:使用Param注解,底层原理就是方式二,myBatis帮我们使用map来封装。

/* ClientMapper 接口 */
public interface ClientMapper {
	//使用params注解封装多个参数
	Client login3(@Param("username")String username, @Param("password")String password);
}



   

        
/* 测试 */       
@Test
public void testLogin2() throws IOException {
	SqlSession session = MyBatisUtil.getSession();
	ClientMapper clientMapper = session.getMapper(ClientMapper.class);	
	Client client = clientMapper.login3("shan", "1");
	System.out.println(client);
	session.close();
} 



六、myBatis插件 [eclipse的插件MyBatipse]

  • 作用:编写映射文件时有代码提示

1、eclipse 安装 插件MyBatispse

■ 方式一(在线安装):看插件官网提供的方式【有的插件会提供拖动安装,重启eclipse即可】

● 通用:Help -> Eclipse Marketplace -> 搜 MyBatipse,然后进行安装即可

学习MyBatis必知必会(6)~Mapper基础的拓展_第1张图片

■ 验证是否安装成功,在eclipse的window->Preferences-> 搜 MyBatipse,有看到即成功


你可能感兴趣的:(学习MyBatis必知必会(6)~Mapper基础的拓展)