1.简介SQL映射
MyBatis框架是一个基于ORM(onject Relational Mapping , 关系/关系映射)的优秀的持久化框架。但是MyBatis框架不是一个完整的ORM实现,而是一种半自动化的ORM实现。MyBatis框架的主要特点是SQL映射机制。MyBatis框架使用XML或注解将Java中的接口和 POJO(Plain Ordinary Java Object , 普通的Java对象)与SQL语句结合在一起,使用灵活、简单易学,而且性能也很优秀是现在比较流行的框架之一。
那么 什么是SQL映射呢?
SQL 映射是 MyBatis 框架最具有特色的部分,功能强大且使用简单。
MyBatis 框架的主要思想是将SQL语句从程序代码中分离出来,对JDBC访问数据库的代码进行封装,从程序中消除了所有SQL参数设置及处理结果集的 JDBC 代码 ,从而大幅度减少数据访问层的编码量。并且SQL语句与代码的解耦,可以最大限度的实现对SQL语句的灵活管理,方便SQL调用以保证性能。
SQL映射文件
SQL映射文件中的几个顶级元素介绍:
mapper | SQL映射文件的根元素。只有一个属性namespace,用于区分不同的mapper,必须全局唯一。 |
---|---|
cache | 为给定命名空间配置缓存。 |
cache-ref | 引用其他命名空间中的缓存配置。 |
resultMap | 用来描述查询结果集中的字段和Java实体类属性的对应关系。 |
sql | 定义可重用的SQL语句块,可以在其他语句映射中引用,提高编写和维护SQL语句的效率。 |
insert | 映射insert语句。 |
update | 映射update语句。 |
delete | 映射delete语句。 |
select | 映射select语句。 |
MyBatis框架内建的部分名与Java数据类型的映射关系
别名 | 映射类型 |
---|---|
boolean | Boolean |
byte | Byte |
long | Long |
shor | Shor |
int或integer | Integer |
double | Double |
float | Float |
string | String |
bigdecimal或decimal | BigDecimal |
date | Date |
hashmap | Hashmap |
list | list |
arraylist | ArrayList |
MyBatis 的多条件查询
①.将查询条件爱你封装成一格Java对象作为参数
int SelectSysUserList(SysUser sysuser(SysUser作为一个实体类));
②.将查询条件封装成Map对象作为参数
List<SysUser> getUserList(Map<String,Object> userMap)
③.使用@Param注解实现多参数入参
int sysUserListName(@Param("Name")String name);
小结 myBatis一共有三种 方法实现多条件的查询
2. MyBatis 框架的结果映射
① 首先创建实体类
public class SysUser implements Serializable {
private Integer id ; // id
private String account ; //账号
private String password ; //密码
private String realName ; //真实姓名
private String birthday ; //出生日期
private int sex ; // 性别
private String address ; //地址
private String phone ; //电话
private Integer roleId ; //角色id
private Integer createdUserId ; //创建人id
private String createdTime ; //创建时间
private Integer updatedUserId ; //更新人id
private Date updatedTime ; // 更新人时间
}
//省略 Getter和 Setter 方法
② 添加方法
然后在 mapper 接口中添加方法 使用 SysUser 类作为参数 使用 realName 作为查询条件
/**
* 根据用户的真实姓名模糊匹配查询用户信息
* @param realName
* @return
*/
public List<SysUser> getUsersByRealName(String realName);
③ 添加SQL映射
在映射文件.xml 文件中添加sql语句映射
<!-- 根据用户的真实姓名模糊匹配查询用户信息 -->
<select id="getUsersByRealName" resultType="SysUser" parameterType="string">
select * from t_sys_user where realName like CONCAT('%',#{param},'%')
</select>
<!-- id: 映射规则的唯一标识,可以被select元素的resultMap属性引用 -->
<!-- parameterType: 映射的结果类型 这里指封装成SysUser实例 -->
<!-- resultMap包括以下两个元素 -->
<!-- id :指定和数据表主键字段对应的标识属性,设置此项可以提升MyBatis框架的性能,特别是应用缓存和嵌套结果映射的时候 -->
<!-- result:指定结果集字段和实体类属性的映射关系 -->
④ 测试定义的接口
/**
* 测试使用SysUser类型提供查询条件
*/
@Test
public void getUserListByPojo() throws Exception{
SysUser user = new SysUser();
user.setRealName("李");
List<SysUser> userList = sqlSession.getMapper(SysUserMapper.class).getUserListByPojo(user);
if (userList !=null && userList.size()>0){
for (SysUser sysUser: userList){
logger.debug(" 查询到的用户列表:id="+ sysUser.getId()+",realName="+sysUser.getRealName()+",password="+sysUser.getPassword());
}
}
}
2024-06-21 23:20:43 [DEBUG] PooledDataSource forcefully closed/removed all connections.
2024-06-21 23:20:43 [DEBUG] PooledDataSource forcefully closed/removed all connections.
2024-06-21 23:20:43 [DEBUG] PooledDataSource forcefully closed/removed all connections.
2024-06-21 23:20:43 [DEBUG] PooledDataSource forcefully closed/removed all connections.
2024-06-21 23:20:43 [DEBUG] Opening JDBC Connection
2024-06-21 23:20:44 [DEBUG] Created connection 1148254374.
2024-06-21 23:20:44 [DEBUG] Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4470f8a6]
2024-06-21 23:20:44 [DEBUG] ==> Preparing: select * from t_sys_user where realName like CONCAT('%',?,'%')
2024-06-21 23:20:44 [DEBUG] ==> Parameters: 李(String)
2024-06-21 23:20:44 [DEBUG] <== Total: 2
2024-06-21 23:20:44 [DEBUG] 查询到的用户列表:id=12,realName=李江涛,password=0000000
2024-06-21 23:20:44 [DEBUG] 查询到的用户列表:id=73,realName=李彩云,password=123321
2024-06-21 23:20:44 [DEBUG] Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4470f8a6]
2024-06-21 23:20:44 [DEBUG] Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4470f8a6]
2024-06-21 23:20:44 [DEBUG] Returned connection 1148254374 to pool.
这样就可以使用mybatis做一个简单的查询了!!