美文网首页
初识 Mybatis

初识 Mybatis

作者: 小牛长成记 | 来源:发表于2018-11-25 16:49 被阅读0次

    Mybatis本是aapache的一个开源项目ibatis 。
    Mybatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行了封装,使开发者只关注于Sql本身,而不需要花费精力去注册驱动,创建链接,创建statement,手动设置参数,结果数据类型封装等操作繁杂的操作。

    操作步骤

    1.创建po类
    2.创建全局配置文件sqlMapConfig

     <?xml version="1.0" encoding="UTF-8" ?>
     <!DOCTYPE configuration
     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
             <!-- 配置mybatis的环境信息 -->
    <environments default="development">
        <environment id="development">
            <!-- 配置JDBC事务控制,由mybatis进行管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源,采用dbcp连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>
    
    <!-- 加载映射文件 -->
     <mappers>
         <mapper resource="映射文件名"></mapper>   
    </mappers>
    </configuration>
    

    3.编写映射文件(映射文件的创建需要添加约束头)

    <!DOCTYPE mapper    
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"    
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    

    4.在SqlMapConfig全局配置文件中加载映射文件
    5、 编写测试程序,即编写Java代码,连接并操作数据库。
    思路:
    a) 读取配置文件;
    b) 通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂。
    c) 通过SqlSessionFactory创建SqlSession。
    d) 调用SqlSession的操作数据库方法。
    e) 关闭SqlSession

    添加用户

    (1) 基本的添加

     <!-- mybatis的入参只能有一个,这回是个引用类型的 -->
       <!-- 插入的值的占位符号,#{},里面是插入对象(入参)的对应的属性名称,采用的是对象的OGNL表达式的写法-->
       <insert id="insertUser1" parameterType="com.aishang.domain.User">
          insert into user(username,password,name,email,phone,addr,state) 
          values(#{username},#{password},#{name},#{email},#{phone},#{addr},#{state})
       </insert>
    
    

    (2) 添加用户后返回主键 -- 之主键自增

    <insert id="insertUser2" parameterType="com.aishang.domain.User">
          <!-- selectKey:查询主键,在标签内需要输入查询主键的sql -->
          <!-- keyProperty:查询出来的主键值怎么返回?"User"类中"uid"列用来容纳查询出来的生成的主键的值,此配置指明在实体类中用来容纳查询出的主键的属性名  -->
          <!-- resultType:查询结果的类型 -->
          <!-- order:指定查询主键的sql和insert语句的执行顺序,相对于insert语句来说的,值:
               BEFORE: 如果是oracle数据库的话,不是主键自增机制,而是序列机制,
                         需要先生成一个序列,拿到序列后再执行插入,因此采用的是order="BEFORE"
                         如果是UUID,也需要先生成一个UUID,再执行插入,也采用order="BEFORE"                          
               AFTER:mysql中,采用自增主键策略 在insert的时候产生主键,所以在执行完insert之后,再来获取生成的主键,因而在这里配置,order="AFTER"
           -->
    <!-- LAST_INSERT_ID():该函数是mysql函数,针对自增主键来获取主键的id,必须配合insert语句一起使用-->
          <selectKey keyProperty="uid" resultType="int" order="AFTER">
             select LAST_INSERT_ID()
          </selectKey>
                insert into user(username,password,name,email,phone,addr,state) 
                values(#{username},#{password},#{name},#{email},#{phone},#{addr},#{state})
       </insert>
    

    (3) 添加用户后返回主键 -- 之UUID

    <insert id="insertUser3" parameterType="com.aishang.domain.User">
          <!-- UUDI():该函数是mysql函数,生成一个32位随机不重复的数据-->
          <selectKey keyProperty="uid" resultType="java.lang.String" order="BEFORE">
             select UUDI()
          </selectKey>
          <!-- uid不是自增了,也需要插入进去,采用的值是上一步 select UUDI()的结果,已经封装到了User对象的uid属性了-->
         insert into user(uid,username,password,name,email,phone,addr,state) 
         values(#{uid},#{username},#{password},#{name},#{email},#{phone},#{addr},#{state})
    </insert>   
    
    

    (4) 添加用户后返回主键 -- 之Oracle序列

    <insert id="insertUser4" parameterType="com.aishang.domain.User">
         <!-- sequence:是Oracle主键生成策略-->
         <selectKey keyProperty="uid" resultType="int" order="BEFORE">
             select seq.nextval() from dual
         </selectKey>
         <!-- uid不是自增了,也需要插入进去,采用的值是上一步 select UUDI()的结果,已经封装到了User对象的uid属性了-->
        insert into user(uid,username,password,name,email,phone,addr,state) 
        values(#{uid},#{username},#{password},#{name},#{email},#{phone},#{addr},#{state})
    </insert>
    

    测试方法

    
    @Test
    public void fun(){
        //拿到全局配置文件路径
        String resource = "sqlMapConfig.xml" ;
        InputStream inputStream = Resource.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new sqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession =  sqlSessionFactory.openSession();
        User user = sqlSession.selectOne("test.findUserById", 2);
            System.out.println(user);
            
            //关闭资源
            sqlSession.close();
    
    }
    

    相关文章

      网友评论

          本文标题:初识 Mybatis

          本文链接:https://www.haomeiwen.com/subject/yfvpqqtx.html