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

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

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

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);
		}
	}
	
	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中的方法

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

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

 

4.1Mybatis映射xml

4.1.2 准备工作

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





    在此进行SQL语句的编写
	

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

重点1:动态SQL语句多条件查询
  1. 在按照需求在UserMapper.xml中书写SQL语句【可供参考】

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

 

 

4.1.3 多表查询映射
  • 相关字段详解

resultType = "响应返回的类型"
parameterType = "传入的类型"
resultMap = "根据id调用resultMap中的方法"  


	
  
映射方法,相对于一个子查询,在一个查询里面套 一个子查询

 collection标签返回多个用户,列,当调用的方法返回的是一个集合时使用该标签  【多对一】
 association标签返回单个用户或列,当调用的方法返回的是一个对象时使用	 【一对多】

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

图集总结

 

 

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

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

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