MyBatis之xml开发and注解开发--实现增删改查功能

简介: MyBatis之xml开发and注解开发--实现增删改查功能

一:注解开发


1.1 通用Mapper和注解可混用,写在同一个接口中


对于一些简单的普通的增删改查,接口可继承通用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);
    }
  }
  /**使用ThreadLocal,管理某个线程的SqlSession*/
  private static ThreadLocal<SqlSession> local = new ThreadLocal<SqlSession>();
  /**获取新会话*/
  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();
    }
  }
  /**获取Mapper 
   * 注:若session已被关闭,必须重新调用getMapper获取新的Dao对象
   * */
  public static <T> T getMapper(Class<T> clazz){
    return openSession().getMapper(clazz);
  }
}

图片展示工具类所在idea的位置【可自行定义】

9c1f7937d0fc4eada1ad273ff0eee0ca.png

 步骤:定义接口---》继承Mapper<类名>  --- 》 测试类调用接口中的方法

     

2.2.2步骤

------1. 创建JavaBean并对其进行注释说明表名和主键

ffe5587aa9564a6188794beee68c8124.png

-----2. 创建mapper接口继承mapper类 【Mapper<写与之相关的JavaBean类名>】

       注:接口继承了Mapper,可对单表进行简单查询

               同时接口中还可进行注解开发,在接口上书写注解 sql语句进行复杂查询

68c19ae4b5c346cca515229161d61814.png

------3.编写测试类,直接调用mapper类中的方法进行增删改查 【可供参考】


2.2.3 通用Mapper中的方法


查询方法

方法名


描述


T selectOne(T t)


根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号


List select(T t)


根据实体中的属性值进行查询,查询条件使用等号


List selectAll()


查询全部结果


int selectCount(T t)


根据实体中的属性查询总数,查询条件,使用等号


T selectByPrimaryKey(Object key)


根据主键字段进行查询


boolean existsWhithPrimaryKey(Object key)


根据主键字段查询记录是否存在


List selectByExample(Object example)


根据Example条件进行查询


T selectOneByExample(Object example)


根据Example条件进行查询,只能有一个返回值


int selectCountByExample(Object example)


根据Example条件进行查询记录数


  1. 插入方法


方法名

描述

int insert(T t)

保存一个实体,null的属性也会保存,不会使用数据库默认值

int intsertSelective(T t)

保存一个实体,null的属性不会保存,使用数据库默认值


  1. 更新方法

方法名

描述

int updateByPrimaryKey(T t)

根据主键更新实体全部字段,null值会被更新

int updateByPrimaryKeySelective(T t)

根据主键更新实体中不为null值的字段


删除方法

方法名


描述


int delete(T t)


根据实体属性作为条件进行删除,查询条件使用等号


int deletePrimaryKey(Object key)


根据主键字段进行删除


int deleteByExample(Object example)


根据Example条件删除数据


3.1Mybatis注解sql语句

//查询所有
    @Select("select * from student")   //sql语句
    List<Student> 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<Student> 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  == 用来映射返回结果是单个的,一个用户的字段 【多对一】

--- 图集详解 【可供参考】

image.png

二、Mybatis映射xml

4.1.2 准备工作

---------1.导入已经写好的UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 
  namespace必须为对应dao接口的全类名
 -->
<mapper namespace="com.czxy.demo1.dao.UserDao">
    在此进行SQL语句的编写
  <!--<select id="selectAll" resultType="com.czxy.demo1.domain.User">
    select * from user
  </select> -->
</mapper>

-------2. Mysql核心配置文件进行设置扫描

83482d8592444ac88d9e754c4b4b89ba.png

重点1:动态SQL语句多条件查询

  1. 在按照需求在UserMapper.xml中书写SQL语句【可供参考】

d4c6854aefc24303a49de6cbf8fefcab.png

重点2:动态SQL语句In查询

bccdce6cf5ff413e935b26aa2a41ce3e.png

4.1.3 多表查询映射

  • 相关字段详解
1.resultType = "响应返回的类型"
parameterType = "传入的类型"
resultMap = "根据id调用resultMap中的方法"  
<resultMap id = "id">
  <result property = "javaBean中的一个属性" column = "数据库中的列"/>
</resultMap>  
映射方法,相对于一个子查询,在一个查询里面套 一个子查询
<collection/> collection标签返回多个用户,列,当调用的方法返回的是一个集合时使用该标签  【多对一】
<association/> association标签返回单个用户或列,当调用的方法返回的是一个对象时使用   【一对多】

----  图集详解【可供参考】

9386d088e38c4f9d89ced4dbfa60ebf2.png

图集总结

5970ea732bfc43ccb4693400fc5d3f27.png

相关文章
|
9天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
19天前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
59 5
|
19天前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
40 3
|
26天前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
109 3
|
25天前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
43 1
|
2月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
1月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
51 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
118 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
56 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
342 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
下一篇
无影云桌面