栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis操作详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis操作详解

Mybatis操作详解 一、Mybatis的Maven工程操作 1.1、导入依赖
    
        mysql
        mysql-connector-java
        5.1.6
    

    
        org.mybatis
        mybatis
        3.5.2
    

    
        log4j
        log4j
        1.2.12
    
1.2、创建Mybatis全局配置文件
  • 全局配置文件位置

  • 全局配置文件



  
  
  
  
  
    
      
      
        
        
        
        
      
    
  
  
  
    
  

 

  • 其它相关配置标签

    

  


    
    
    

@Alias("emp") //别名注释,写在类上给类起别名
1.3、创建接口(interface)
public interface UserDao{
    public User queryById(int u_id);
    
    public int addUser(int u_id,String u_username,String u_sex);
    
    public int delUser(int u_id);
    
    public int updateUser(int u_id,String u_sex,String u_username);
}
1.4、映射文件—实现:增删改查
  • 必须有对应的接口的文件,映射文件用于实现接口并完成关系映射




	
	
	select * from t_user where u_name=#{param1} and u_sex=#{param2}

2)自定义名称

接口信息:

//若是形参多,不易辨认,可以通过@Param("name")来映射,这样封装map时的key可以自己设定

public User query(@Param("name") String name,@Param("sex") String sex); //接口方法

映射文件:

 
	select * from t_user where u_sex=#{sex}

方法调用:

//创建user
User user = new User();
user.setSex("男");
//业务处理
List list = userdao.queryMan(user);
2.1.3、传入Map(万能)

如果多个参数正好是数据模型pojo,我们可以设置模型参数,直接传入pojo

传入数据类型设置:parameterType=“map”,也可以不写,直接使用#{key}调用value

接口信息:

public User querytree(Map map);  //接口方法

映射文件:

 
    select * from t_user where u_sex=#{u_sex}

2.2.2、返回一个Map

优势:查询多字段,返回一个Map,并且可以指定某属性作为key

接口信息:

//指定某字段作为key
@MapKey("u_id")
public Map queryWoman(String sex);

映射文件:

 
     select * from t_user where u_sex='男' and u_name=#{name}

三、关联查询 3.1、关联查询添加返回数据类型
public class CourseInfo {
    private Integer id;
    private String date;
    
    //Course的引用数据类型
    private Course course;
    
    //Staff的引用数据类型
    private Staff teacher;
}

public class Course {
    private Integer coId;
    private String coName;
    private String coType;
    private Integer coMaxstu;
    private String coPrice;
    private String coOncetime;
    private String coImage;
    private String coDescribe;
    private String coBeizhu;
    private Integer coFlag;
}

public class Staff {
    private Integer staffId;
    private String staffName;
    private String staffGender;
    private String staffTel;
    private String staffJob;
    private String staffPower;
    private String stadium;
    private String isLogin;
    private String staffState;
}
3.1.1、直接映射

    
    

    
    
    
    
    
    
    
    
    
    
    

    
    
    
    
    
    
    
    
    
    
    
    

3.1.2、< association >标签映射

    
    
    
        
        
        
        
        
        
        
        
        
        
    
    
        
        
        
        
        
        
        
        
        
    

3.1.3、< collection >关联查询集合封装


    
    
    
    

3.1.4、关联查询

        SELECT * FROM arrange_course
        WHERe arrange_course.co_id IN (SELECt co_id FROM course WHERe co_type = '团课')
        AND arrange_course.ti_id IS NOT NULL AND arrange_course.DATE IS NOT NULL
    
    
    
select * from user where type='团课'
    
    
    and id=#{id}
    
    
    and username=#{username}
    

4.2、< where >标签

**作用:< if >标签的最常用应用场景为条件查询,而最开头为where,后面是and,拼接相对不容易。< where >会自行判断,并删除第一个 and 或者 or **

  • 解决方式一

select * from user
    
    
        
        	and id=#{id}
        
        
        	or username=#{username}
        
    

4.3、< trim >标签

作用:用于解决拼接整体后的前后缀问题:

< trim >的四个属性:

  • prefix:给拼接后的字符串加一个前缀
  • prefixOverrides:给拼接后的字符串去掉一个前缀
  • suffix:给拼接后的字符串添加一个后缀
  • suffixOverrides:给拼接后的字符串去掉一个后缀

条件查询的解决方案三:


    
    	id=#{id} and
    
    
    	username=#{username} and
    

4.4、< choose >分支语句标签

作用:前端页面是一个输入框,输入框可以输入姓名、ID、或者其它信息,输入一条信息,但是存在多种可能,这时候的处理就需要分支语句

和< if >的区别:< choose >只能选择其中一条路走,< if >会都进行判断


    
        where course.co_id=#{course}
    
    
        where staff.staff_id=#{teacher}
    
    
        where 1=1
    

4.5、< set >标签

作用:修改属性时,去除后面的逗号。这里可以使用< trim >,或者直接用 mybatis-plus 更方便


    update user 
    
    	
        	u_id=#{u_id},
        
        
        	u_sex=#{u_sex},
        
     
    where username=#{u_username}; 

4.6、< foreach >标签

作用:遍历传入的集合

  • collection:指定要遍历的集合
  • item:将当前遍历出的元素赋值给指定变量,用#{变量名}能取出变量值即当前遍历值
  • separator:每个元素直接的分隔符
  • open:遍历后的结果拼接一个开头字符
  • close:遍历后的结果拼接一个结尾字符
  • index:索引
    • 遍历list的时候,index是索引,item是当前值
    • 遍历map的时候,index是key,这里引用key时必须使用${},因此这里不是占位符,item是map的值
 
4.6.1、mysql环境下的 foreach 批量插入 

应用场景:< foreach >标签也能用于数据批量插入

4.6.2、oracle环境下的 foreach 批量插入
 
五、注解开发 
5.1、增删改查注解 

1)注解

  • @Insert: 实现新增
  • @Delete:实现删除
  • @Update:实现更新
  • @Select:实现查询

2)格式与用法

  • 注解写在要实现的方法上
  • @Select(“写入查询语句”)
@Select("select * from course where co_id=#{id}")
    public Course queryByCourseId(Integer id);
5.2、结果集映射注解 5.2.1、基本数据类型

1)注解

  • @Results:表示结果集注解;id 表示映射集别名;value = { 映射集 }
  • @Result:表示属性映射;id 表示这是主键序号;column 表示字段名,property 表示属性名

2)实例

@Select("select * from arrange_course where arrange_course.ti_id IS NOT NULL AND arrange_course.DATE IS NOT NULL")
@Results(id="courseInfo",value={
    @Result(id = true,column = "arrange_id",property = "id"),
    @Result(column = "co_id",property = "courseId"),
    @Result(column = "staff_id",property = "teacherId")
})
public List getAllTuankeCourseInfo();
5.2.2、引用数据类型

使用注解必须使用分步查询,使用其它方法的查询结果赋值

1)注解

  • @one:表示查询的结果为单个对象

    • one:为Result的属性,用于给引用数据类型赋值,接收单个对象
    • column:此时的column表示传入的参数
  • @Many:表示查询的结果为多个对象,是ArrayList 集合

    • many:为Result的属性,用于给引用数据类型赋值,接收多个对象
    • column:此时的column表示传入的参数

2)使用

@Select("select * from arrange_course where arrange_course.ti_id IS NOT NULL AND arrange_course.DATE IS NOT NULL")
@Results(id="courseInfo",value={
    @Result(id = true,column = "arrange_id",property = "id"),
    @Result(column = "co_id",property = "courseId"),
    @Result(column = "staff_id",property = "teacherId"),
    @Result(property = "teacher",column = "staff_id",one=@One(select = "mapper.CourseInfoMapper.queryByStaffId")),
    @Result(property = "course",many=@Many(select = "mapper.CourseInfoMapper.queryAllCourse"))
})
public List getAllTuankeCourseInfo();

@Select("select * from staff where staff_id=#{id}")
public Staff queryByStaffId(Integer id);

3)@ResultMap:结果集映射可以被其它方法使用

@Select("......")
//使用注解和@Results的id
@ResultMap("courseInfo")
public List conditionQuerySijiaoCourseInfo(Map map);
5.2.3、延迟查询

在最后加 :fetchType = FetchType.LAZY

@Result(property="teacher",column="staff_id",one=@One(select = "CourseInfoMapper.queryByStaffId"),fetchType = FetchType.LAZY)
5.3、动态sql注解 5.3.1、动态SQL的纯注解方式
  • 在查询语句外加{ }
  • 前后加< script >< /script >
  • 其它部分可以完全按照xml格式进行书写
@Select({""
    })
    @ResultMap("courseInfo")
    public List conditionQueryTuankeCourseInfo(Map map);
5.3.2、使用java生成查询语句

@SelectProvider 可以调用 java生成的SQL语句,常用属性为:

  • type:表示返回的数据类型
  • method :表示调用的方法

使用实例

@SelectProvider(type = SubjectSqlProvider.class, method = "getSubjectTestProvider")

public Course getCourseById(@Param("id") int id);


public String selectUserById(Map para){
    return new SQL(){{
        SELECT("*");
        FROM("t_course");
        WHERe("id="+para.get("id"));
    }}.toString();
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/305699.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号