学习笔记之mybatis(一)

mybaties是什么MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

需要mybaties的jar包

mybaties使用过程如下

然后再java类中实现下列步骤

1.首先需要用一个xml文件来定义环境变量,还有代理对象等
2.还需要一个xxxmapper文件,但是我现在先用的ibaties所以,建立一个映射文件为User.xml
3.创建会话工厂,并将config.xml文件传递
4.通过会话工厂得到sqlsession
5.通过sqlsession来操作数据库
6.释放资源。

接下来每个部分详解:

1.xml文件定义环境变量,名称定为Sql.map.Config.xml

里面要配置如下环境内容:

学习笔记之mybatis(一)

2.建立代理文件

我起名为User.xml,这个里面是我们的核心部分,将具体的sql语句就是在这里面进行处理

<?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命名空间,作用是对sql进行分类化管理,理解sql隔离 -->
<mapper namespace="test">  
<!-- 在映射文件中配置很多sql语句 -->
  <!--1.通过id查询用户表的记录-->
    <!-- 
    id:标识映射文件中mapper(要将sql语句封装到mappedStatement对象中,所以将id成为statement的id)
    parameterType:指定的参数类型
    #{}表示一个占位符
    #{id}表示接受输入的参数,参数名称就是id,如果是简单类型则名称可以随意
    resultType:指定sql输出结果所映射的java对象类型,将他输出结果映射为类对象,里面的内容是对象的类的限定名
     -->
    <select id="findUserById" parameterType="int" resultType="com.mb.po.User">
      select * from mb_test1 where id=#{id}
    </select>
    
    <!-- 根据用户名称模糊查询 
    id:标识映射文件中mapper(要将sql语句封装到mappedStatement对象中,所以将id成为statement的id)
    parameterType:指定的参数类型
    resultType:指定sql输出结果所映射的*单条*java对象类型,将他输出结果映射为类对象,里面的内容是对象的类的限定名
    ${}可以拼接sql,引起sql的注入,将接收到参数的内容不加任何修饰拼接到sql中
           如果使用${}里面传的是简单类型,则只能是${value}
    -->
    
    <select id ="dimfindUserByName" parameterType="String" resultType="com.mb.po.User">
      SELECT * FROM student.mb_test1 where name like '%${value}%';
    </select>
    
    <!-- 添加用户 
    id:标识映射文件中mapper(要将sql语句封装到mappedStatement对象中,所以将id成为statement的id)
    parameterType:指定的参数类型,因为要传的参数是用户信息,所用po表
    #{}中指定po中的每个属性值
          添加语句 并不需要返回类型 
    -->
    
    <insert id="insertUser" parameterType="com.mb.po.User">
    <!-- 设置自增型主键获取主键 
    *keyProperty:将查询到的主键值设置到parameterType指定的对象的哪个属性
    *order:设置这个语句在insert语句前执行还是后执行,这个方法是insert完后将id取出
    *resultType:select last_insert_id()结果的类型
    -->
    <selectKey keyProperty="id" order="AFTER"  resultType="int">
     select last_insert_id();
     </selectKey>
         insert into student.mb_test1(name,book) value(#{name},#{book})<!-- 自增主键,不用设置id -->
</insert>

<!-- 删除用户 -->
<!-- 通过id值删除,所以parameteType为int-->
<delete id="deleteUser" parameterType="int">
  delete from mb_test1 where id=#{id};
</delete>

<!-- 根据id更新用户-->
<!-- 需要传入id,需要传入更新的内容,所以parameterType设为po-->
<update id="updateUser" parameterType="com.mb.po.User">
  update mb_test1 set name=#{name},book=#{book} where id=#{id}
</update>

</mapper>

tips:resultType是应用#{}时里面的类型为基本类型,可以将${}里的名称随便赋值,如果为po类型时,要和po类中的名字相匹配。

如果为${}时则${}里必须为value

要将这个文件配置到环境配置文件中,也就是SqlMapConfig:

学习笔记之mybatis(一)

完成后就进行java类里的处理

3. /创建会话 工厂,并传递config.xml的内容
     //1.1 先把xml文件的名称变为string字符串,直接可以操作将xml文件转为输入流
     String resource ="sqlMapConfig.xml";
         //1.2 将xml文件转为输入流
      InputStream inputstream = Resources.getResourceAsStream(resource);
     //1.3 解析xml文件需要通过一个输入流解析

     SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputstream);

4.通过会话工厂的到sqlsession

 User user3=new User();//要增加人的信息,因为是主键自动增长所以不用设置主键


user3.setName("zby");
user3.setBook("mybaties");

SqlSession sqlSession =sqlSessionFactory.openSession();

5.进行操作数据库,这里以增加为例讲解

sqlSession.insert("test.insertUser", user3);这是进行增加的语句,第一个参数时statement类型的,因为sql会话无法直接操作数据,只能交给执行器来执行,执行器将其封装为一个statement对象来操作sql语句,所以第一个参数是命名空间+"."+代理文件里设置好的语句。第二个参数是他的接受值,这里加入的是一条信息,所以要用po加入。

然后://提交事务

sqlSession.commit();

最后/:

/释放资源

sqlSession.close();