mybatis 内容回顾

mybatis 内容回顾

// 回顾一下mybatis 的学习内容 加深一些内容的印象

一、Mybatis的简介

什么是mybatis : mybatis的前身是ibatis, 是一款有apache开源组织开发的一款Java持久层框架产品。未来会替换JDBC的操作数据库,简化JDBC操作数据库的复杂性。

二 Mybatis的特点:

2.1 简单: 大大的简化了JDBC操作数据库的复杂性,使用Mybatis开发操作数据库的代码,基本上看不到任何JDBC的原生复杂的代码。 学习上手简单, 正因文学习成本低,所以很多人都在使用Mybatis。

2.2 灵活: Mybatis开发操作数据库,将sql语句书写在配置文件中, 便于对sql语句的调优和项目的维护。

三 相关文件的配置

单独整理 详见其他文章 dao层实现 由mybatis 配置文件完成

mybatis的核心API:

API名称作用
Resources用于读取和解析mybatis-config.xml全局配置文件。
SqlSessionFactory主要作用就是用于创建SqlSession的
SqlSession1. SqlSession类似于JDBC开发中Connection对象的作用,一个SqlSession中封装了一个Connection对象,所以mybtais开发的时候使用SqlSession对象控制事务。2由于mybatis是采用mapper文件作为代理DAO接口的实现,所以我们需要使用SqlSession去获取最终的DAO实现类对象,然后调用DAO的方法。

四 增删查改

PS: Mybatis框架的事务是自动回滚处理 ,所以在执行完写(增 删 改)操作后,必须手动提交事务。

mybatis中接口参数绑定机制
 查询的内容比较多 有关知识点略多也比较重要 
1. 接口方法一个参数 : mapper文件中#{}取值语法里面,写什么都可以。
   <select id="selectByBookId" resultMap="bookMap">
  select *
  from D_BOOK
  where BOOK_ID=#{bid}
  </select>
    //与之对应的dao接口 方法名和 配置文件中对应标签的id 对应保持一致 
        DBook selectByBookId(@Param(value="bid") Integer bid);
2.接口方法多个参数:
2.1 注解方式绑定:  专门用于条件查询。可读性高
PS: @Param注解的value属性可以省略。
   //查询
       <update id="updateState" >
        update D_USER set STATE=1
        where EMAIL=#{email}
    </update>
//删除
        <delete id="deleteOne">
        delete d_user 
        where id=#{id}
        </delete>
        
        //插入 如果不需要提前获取对应的id值 
        <insert id="insertUser">
        insert into d_user
        values (duser_seq.nextval,#{nickname},#{password},#{email},#{state})
    </insert>
            //如果需要提前获取对应的id值 就不能用序列自增 可以使用<selectKey>标签
            //在执行添加语句之前先生成一个序列号 并赋值到参数对象中对应主键属性上
            //keyProperty 指定当前查询返回值的主键值封装到实体类对应的哪个属性上
            //其他的 望文生义大概也能猜的到
  <insert id="addOrder" >
<selectKey resultType="int"  keyProperty="id" order="BEFORE">
    select ORDER_SEQ.nextval from dual
</selectKey>
    insert into D_ORDER
    values (#{id},#{goodPrice},sysdate,0,#{addrId},#{userId})
</insert>
        

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2b1jzrWQ-1599122431840)(file:///C:/Users/86150/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)]

封装的 Mybatis工具类
    public class MybatisUtil{
	
  static SqlSessionFactory factory=null;
        //静态代码块 在类加载时执行一次
	static {
		InputStream in =null;
		 try {
             //读取核心配置文件
			 in = Resources.getResourceAsStream("mybatis-config.xml");
			 factory =new SqlSessionFactoryBuilder().build(in);
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("初始化失败");
		}finally{
			try {
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
	  private static ThreadLocal<SqlSession>tol=new ThreadLocal<SqlSession>();
        //获取 sqlsession
	  public static SqlSession openSession(){
		  
		    SqlSession sqlSession = tol.get();
		      if (sqlSession==null) {
		    	  sqlSession = factory.openSession();
		    	  tol.set(sqlSession);
			}
		  return sqlSession;
	  }
	//提交事务
	  public static void commit(){
		  
		  SqlSession sqlSession=tol.get();
		  if (sqlSession!=null) {
			sqlSession.commit();
		    } 
	  }
	//事务回滚
	 public static void rollback(){
		 SqlSession sqlSession=tol.get();
		  if (sqlSession!=null) {
			sqlSession.rollback();
		    } 
	 }
	//关闭资源
	   public static void close(){
		   SqlSession sqlSession=tol.get();
			  if (sqlSession!=null) {
		         sqlSession.close();
		         tol.remove();
			  }
	   }
	  

}

mapper文件中的另一种取值语法

  1. ${}取值方式的使用 相当于 之前jdbc 学习中的字符串拼接 存在sql 注入的风险

  2. #{} 相当于 原来的占位符赋值 
    

在这里插入图片描述

mybatis其他常用的全局配置

1.给实体类起别名 (避免每次都写很长的结构)

① 第一种方式 给指定类起别名

<typeAliases>
      <typeAlias type="包名.类名" alias="别名"/> 
    </typeAliases>

2 第二种方式 给指定包下的所有实体类其别名 别名 默认 为类名

<typeAliases>
   <package name="包名"/>

    </typeAliases>

关于mybatis的结果集映射

  1. mybatis默认结果集封装规则: mybatis默认会将数据库查询返回结果集中的字段名, 对应封装到实体类属性名一致的属性上。

  2. 当查询返回结果集中的字段名与实体属性名不一致的解决

    2.1 第一种方案: 给查询结果的字段起个别名,与对应实体类属性名一致。

    2.2 第二种方案: 使用mybatis的resultMap自定义结果集映射关系。

        <resultMap id="addressMap" type="Address">
           //column 与sql语句查询结果的字段名一致 property 与类的属性对应
            <id column="id" property="id"/>//主键 
            <result column="name" property="name"/>//普通字段 
            <result column="address" property="address"/>
            <result column="lxfs" property="lxfs"/>
            <result column="status" property="status"/>
            <result column="destatu" property="destatu"/>
        </resultMap>
            //对应类 部分代码
            public class Address implements Serializable{
        private Integer id;
        private  Integer userId;
      private  String name;
      private String address;
      private  String lxfs;
      private  Integer status;
                。。。。。。。。
            }
    // mapper文件中 
               <select id="selectAll" resultMap="addressMap">
        select *
         from address
         where  destatu=0 and USERID=#{userId}
    </select>
    

在这里插入图片描述

\2. 使用mybatis开发关联关系的查询

多对一 实体类中定义关联属性 mapper文件中 通过标签进行关系映射 注意标签属性的对应关系

在这里插入图片描述

一对多 使用 对应的 ofType 是泛型中的类

在这里插入图片描述

Mybatis中的动态SQL机制 【重点】

1.SQL片段 : 我们可以将多个SQL语句涉及到重复使用的信息,定义为一个SQL片段,提高代码的复用性。

假设表有多个字段 id nickname score sex
<sql id="student_column">
    id, nickname name ,score sex
    </sql>
    <select id ="方法名" reslutMap="">
     select 
   <include refid="student_column"/> 
    from 表名 
    </select>

\2. where动态SQL子句 使用

在这里插入图片描述

3 foreach 实现批量删除

在这里插入图片描述

简单的做了一个内容上的回顾 不足之处多多包涵 方便自己回头看看
相关内容一些写的也没有很详细 可以百度一下
注:案例中 数据库 使用的Oracle

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值