> 文档中心 > MyBatis之xml开发and注解开发--实现增删改查功能

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

目录

一:注解开发

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

2.2 通用Mapper(对于单表而言)

3.1Mybatis注解sql语句

二、Mybatis映射xml

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

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

4.1.3 多表查询映射

图集总结


一:注解开发

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 local = new ThreadLocal();/**获取新会话*/public static SqlSession openSession(){SqlSession session = null;session = local.get();if(session==null){session = factory.openSession();//创建一个MapperHelperMapperHelper 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 getMapper(Class clazz){return openSession().getMapper(clazz);}}

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

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

       

2.2.2步骤

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

-----2. 创建mapper接口继承mapper类 【Mapper】

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

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

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

 2.2.3 通用Mapper中的方法

  1. 查询方法

方法名

描述

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值的字段

  1. 删除方法

方法名

描述

int delete(T t)

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

int deletePrimaryKey(Object key)

根据主键字段进行删除

int deleteByExample(Object example)

根据Example条件删除数据

3.1Mybatis注解sql语句

//查询所有    @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  == 用来映射返回结果是单个的,一个用户的字段 【多对一】

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

二、Mybatis映射xml

4.1.2 准备工作

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

    在此进行SQL语句的编写<!--select * from user -->

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

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

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

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

4.1.3 多表查询映射

  • 相关字段详解

resultType = "响应返回的类型"parameterType = "传入的类型"resultMap = "根据id调用resultMap中的方法"    映射方法,相对于一个子查询,在一个查询里面套 一个子查询 collection标签返回多个用户,列,当调用的方法返回的是一个集合时使用该标签  【多对一】 association标签返回单个用户或列,当调用的方法返回的是一个对象时使用 【一对多】

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

图集总结