Mybatis

大家伙,今天是走着走着突然下雨,并且被淋湿的老椴 ╯﹏╰

今天学习了java的重要框架之一:MyBatis,做个总结

Let's  do it !

 

 

MyBatis 是一款优秀的持久层框架,它支持定制化SQL,存储过程以及高级映射.

MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集

MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和java的POJO(普通对象)映射成数据库中的记录.

 

 

使用:

  .1.导入对应的jar包(Maven项目必备功课,就像恰饭要拿筷子一样,是的,中华的筷子是最厉害的ˋ︿ˊ )

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.0</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

  

 

  .2.编写MyBatis的配置XML文件(别忘了,XML独到的就是XML或者注解)

<?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>

    <!-- 配置myabtis的默认数据源-->
    <environments default="devlopment">
        <!-- 数据源-->
        <environment id="devlopment">
            <!--事务管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8"></property>
                <property name="username" value="root"></property>
                <property name="password" value="59852369"></property>
            </dataSource>
        </environment>
    </environments>


    <mappers>
           <!--
            使用资源的绝对路径
         <mapper url=""/> -->
      <mapper resource="User.xml"></mapper>
     <!--
            Mapper接口的全类名
            要求:Mapper接口的名称与映射文件名称一致
                必须在同一个目录下
        <mapper class="com.qf.mapper.UserMapper"/>
        -->

        <!-- 加载某个包下的映射文件 (推荐)
            要求:Mapper接口的名称与映射文件名称一致
                必须在同一个目录下

        <package name="com.qf.mapper"/> -->
    </mappers>


</configuration>

  

  .注意:如果使用name方式以及class的方式加载mapper必须在同一个包下以及在pom.xml中加入,编译时编译所有位置的xml文件(你看,优化了不是)

 <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <!--默认是true-->
                <!--<filtering>true</filtering>-->
            </resource>
        </resources>
    </build>

 

  .3.我们编写sql的xml文件

<?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" >

<!--源生api的方式 -->
<mapper namespace="">
</mapper>

 

 

接下来就是操作数据库的两种方式(由此说明数据库多重要啊,sql多重要啊,要好好学啊,宝贝)

  .1通过MyBatis提供的原生api

    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" >
<mapper namespace="test">
<select id="selectById" parameterType="java.lang.Integer"                 resultType="com.qf.domain.User">
        select * from user where id = #{id}
    </insert>
</mapper>

     使用junit调用(好东西啊,不用写main了)

     @Test
        public void testMyBatis01() throws IOException {
            /**
             * 1.首先我们要加载我们的mybatis配置文件
             */
            InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");

            //使用sqlSessionFactoryBuild来创建一个sqlSessionFactory
            SqlSessionFactory sqFactroy = new SqlSessionFactoryBuilder().build(resourceAsStream);
            //获取到sqlsession  进行调取api
            SqlSession sqlSession = sqFactroy.openSession();
            //调取源生api
            //通过id来进行查询
               User user = sqlSession.selectOne("test.selectById", 37);
            System.out.println(user);
        }

 

  .2.通过接口的方式(这个才是王道!!!!!)

    创建个接口,接口内的方法名跟我们的mapper.xml中的id要相同(这个很重要,匹配啊,不然咋知道是梦中魂牵梦绕的你)

public interface UserMapper {
     User selectById2(int id);
}

    mapper.xml中的namespace使我们接口的全限定类名

<mapper namespace="com.qf.mapper.UserMapper">
        <select id="selectById2" parameterType="java.lang.Integer" resultType="com.qf.domain.User">
        select * from user where id = #{id}
    </select>
</mapper>

  .3.配置我们的MyBatis的核心配置文件

 <mappers>
    <package name="com.qf.mapper"></package>
 </mappers>

  .4.通过sqlsession.getMapper来获取我们的接口

    通过接口调用方法获取返回值并且输出

@Test
    public void testMyBatis02() throws IOException {
        /**
         * 1.首先我们要加载我们的mybatis配置文件
         */
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");

        //使用sqlSessionFactoryBuild来创建一个sqlSessionFactory
        SqlSessionFactory sqFactroy = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获取到sqlsession  进行调取api
        SqlSession sqlSession = sqFactroy.openSession();
        //调取对应的接口
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user1 = mapper.selectById2(38);
        System.out.println(user1);
       
    }

  .5.该标签配置到MyBatis的核心配置文件中.作用给我们的类起别名,在我们的mapper.xml中不用写全限定类名

    <typeAliases>
        <typeAlias type="com.qf.domain.User" alias="user"></typeAlias>
    </typeAliases>

 

 

 

好了,又到了大家喜闻乐见的告别时间了

在这还是有两点忠告给大家的

(老椴讲的大道理都是很准确的,嗯,就是这样子的 ∩▂∩)

 

1.不要淋雨,会脑壳疼

2.笔记本电脑键盘敲打真的没有台式的爽啊,难受....

 

 

  

 

 

 

 

posted @ 2019-06-10 19:36  五号病人  阅读(115)  评论(0)    收藏  举报