对于一些简单的普通的增删改查,接口可继承通用Mapper进行实现
对于一些复杂的增删改查功能可在接口方法上写明注解sql 开发实现
2.2 通用Mapper(对于单表而言)
2.2.1 准备说明
-
仅仅适用于单表而言的增删改查
-
所创建的接口只需继承mapper接口,以及在javaBean类中注释说明表名和主键
资源:MyBatisUtils工具类 --- > 获得Mapper的会话工厂并进行会话,提交事务回滚事务等操作
package com.czxy.ums.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
import tk.mybatis.mapper.entity.Config;
import tk.mybatis.mapper.mapperhelper.MapperHelper;
import java.io.InputStream;
public class MyBatisUtils {
//会话工厂
private static SqlSessionFactory factory;
static{
try{
//1、获取资源流
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2、获取会话工厂
factory = new SqlSessionFactoryBuilder().build(is);
}catch(Exception e){
throw new RuntimeException(e);
}
}
private static ThreadLocal local = new ThreadLocal();
public static SqlSession openSession(){
SqlSession session = null;
session = local.get();
if(session==null){
session = factory.openSession();
//创建一个MapperHelper
MapperHelper mapperHelper = new MapperHelper();
//特殊配置
Config config = new Config();
// 3.3.1版本增加
config.setEnableMethodAnnotation(true);
config.setNotEmpty(true);
//设置配置
mapperHelper.setConfig(config);
// 注册通用Mapper接口 - 可以自动注册继承的接口
mapperHelper.registerMapper(Mapper.class);
mapperHelper.registerMapper(MySqlMapper.class);
//配置完成后,执行下面的操作
mapperHelper.processConfiguration(session.getConfiguration());
local.set(session);
}
return session;
}
public static void close(){
SqlSession session = local.get();
if(session!=null){
session.close();
//不删除会导致线程再次使用到一个关闭的SqlSession会话
local.remove();
}
}
public static void commitAndClose(){
SqlSession session = local.get();
if(session!=null){
session.commit();
close();
}
}
public static void rollbackAndClose(){
SqlSession session = local.get();
if(session!=null){
session.rollback();
close();
}
}
public static T getMapper(Class clazz){
return openSession().getMapper(clazz);
}
}
图片展示工具类所在idea的位置【可自行定义】
步骤:定义接口---》继承Mapper<类名> --- 》 测试类调用接口中的方法
2.2.2步骤
------1. 创建JavaBean并对其进行注释说明表名和主键
-----2. 创建mapper接口继承mapper类 【Mapper<写与之相关的JavaBean类名>】
注:接口继承了Mapper,可对单表进行简单查询
同时接口中还可进行注解开发,在接口上书写注解 sql语句进行复杂查询
------3.编写测试类,直接调用mapper类中的方法进行增删改查 【可供参考】
2.2.3 通用Mapper中的方法
- 查询方法
| 方法名 | 描述 |
| T selectOne(T t) | 根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号 |
| List | 根据实体中的属性值进行查询,查询条件使用等号 |
| List | 查询全部结果 |
| int selectCount(T t) | 根据实体中的属性查询总数,查询条件,使用等号 |
| T selectByPrimaryKey(Object key) | 根据主键字段进行查询 |
| boolean existsWhithPrimaryKey(Object key) | 根据主键字段查询记录是否存在 |
| List | 根据Example条件进行查询 |
| T selectoneByExample(Object example) | 根据Example条件进行查询,只能有一个返回值 |
| int selectCountByExample(Object example) | 根据Example条件进行查询记录数 |
- 插入方法
| 方法名 | 描述 |
| int insert(T t) | 保存一个实体,null的属性也会保存,不会使用数据库默认值 |
| int intsertSelective(T t) | 保存一个实体,null的属性不会保存,使用数据库默认值 |
- 更新方法
| 方法名 | 描述 |
| int updateByPrimaryKey(T t) | 根据主键更新实体全部字段,null值会被更新 |
| int updateByPrimaryKeySelective(T t) | 根据主键更新实体中不为null值的字段 |
- 删除方法
| 方法名 | 描述 |
| int delete(T t) | 根据实体属性作为条件进行删除,查询条件使用等号 |
| int deletePrimaryKey(Object key) | 根据主键字段进行删除 |
| int deleteByExample(Object example) | 根据Example条件删除数据 |
//查询所有
@Select("select * from student") //sql语句
List list (); //接口方法
//查询指定用户
@Select("select * from student where sid=#{sid}")
Student selectById(@Param("sid") String id);
//添加
@Insert("insert into student(loginname,studentname,password,gender,major,birth,telephone,hobby,photo,remark) values(#{loginname},#{studentname},#{password},#{gender},#{major},#{birth},#{telephone},#{hobby},#{photo},#{remark})")
Integer add(Student student);
//删除
@Delete("delete from student where sid=#{sid}")
Integer delete(@Param("sid") String sid);
//修改
@Update("update student set loginname=#{loginname},studentname=#{studentname},password=#{password},gender=#{gender},major=#{major},birth=#{birth},telephone=#{telephone},hobby=#{hobby},photo=#{photo},remark=#{remark} where sid = #{sid}")
Integer update(Student student);
//模糊查询
@Select("select * from student where studentname like #{studentname}")
List likeAll(String sid);
3.1.1注意事项:
-
1.在查询指定条件以及删除时要给予条件 id=#{id}
-
2.在添加时,添加用户时, 表名后面的()中的字段必须要和数据库保持一致,values中的()尽量, 与表名后面的()字段保持一致;
-
3.在修改时 set后面的字段 等号(=) 的左边字段必须和数据库保持一致,右边#{}中字段尽量保持一致
3.1.2 多表映射
----- 基本字段详解
@Results(id = "设置映射id",value = {
@Result(property = "javaBean中的属性",column = "数据库中的列"),
@Result(property = "javaBean中的集合",column = "数据库中的列",many = @Many(select = "要映射的方法全路径名"))
})
many == 用来映射返回结果是集合,多个用户的字段, 【一对多】
@Results(id = "可设置自己的id,也可调用已经映射好的id进行引用",value = {
@Result(property = "javaBean中的属性",column = "数据库中的列"),
@Result(property = "JavaBean中的对象",column = "数据库中的列",one = @One(select = "要映射返回的方法全路径名"))
})
one == 用来映射返回结果是单个的,一个用户的字段 【多对一】
--- 图集详解 【可供参考】
4.1Mybatis映射xml
4.1.2 准备工作
---------1.导入已经写好的UserMapper.xml
在此进行SQL语句的编写
-------2. Mysql核心配置文件进行设置扫描
重点1:动态SQL语句多条件查询- 在按照需求在UserMapper.xml中书写SQL语句【可供参考】
4.1.3 多表查询映射
-
相关字段详解
resultType = "响应返回的类型" parameterType = "传入的类型" resultMap = "根据id调用resultMap中的方法"映射方法,相对于一个子查询,在一个查询里面套 一个子查询 collection标签返回多个用户,列,当调用的方法返回的是一个集合时使用该标签 【多对一】 association标签返回单个用户或列,当调用的方法返回的是一个对象时使用 【一对多】
---- 图集详解【可供参考】
图集总结



