美文网首页
MyBatis学习笔记 - 第001天

MyBatis学习笔记 - 第001天

作者: 迷茫o | 来源:发表于2017-03-27 19:30 被阅读0次

    MyBatis 入门

    1.1 MyBatis 是什么?

    MyBatis 是一个简化和实现了 Java 数据持久化层(persistence layer)的开源框架,它抽象了大量的 JDBC 冗余代码,并提供了一个简单易用的 API 和数据库交互。
      MyBatis 的前身是 iBATIS,iBATIS 于 2002 年由 Clinton Begin 创建。 MyBatis 3 是 iBATIS 的全新设计,支持注解和 Mapper。
    MyBatis 流行的主要原因在于它的简单性和易使用性。在 Java 应用程序中,数据持久化层涉及到的工作有:将从数据库查询到的数据生成所需要的 Java 对象;将 Java 对象中的数据通过 SQL 持久化到数据库中。
      MyBatis 通过抽象底层的 JDBC 代码,自动化 SQL 结果集产生 Java 对象、 Java 对象的数据持久化数据库中的过程使得对 SQL 的使用变得容易。

    1.2 为什么选择 MyBatis?

    当前有很多 Java 实现的持久化框架,而 MyBatis 流行起来有以下原因:

    • 它消除了大量的 JDBC 冗余代码
    • 它有低的学习曲线
    • 它能很好地与传统数据库协同工作
    • 它可以接受 SQL 语句
    • 它提供了与 Spring 和 Guice 框架的集成支持
    • 它提供了与第三方缓存类库的集成支持
    • 它引入了更好的性能

    1.3 MyBatis 安装和配置

    1.3.1 新建 mybatis-config.xml配置文件

    创建 MyBatis 的主要配置文件 mybatis-config.xml,其中包括数据库连接信息,类型别名等等,然后将其加
    到 classpath 中;

    <?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>
    
       <typeAliases> 
            <!-- 
            <typeAlias alias="User" type="com.kygo.mybatis.entity.User"/> 
            --> 
            <package name="com.kygo.mybatis.entity"/>   
       </typeAliases> 
        
      <environments default="development">
        <environment id="development">
          <transactionManager type="JDBC"/>
          <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="123456"/>
          </dataSource>
        </environment>
      </environments>
      
      <mappers>
        <mapper resource="com/kygo/mybatis/dao/UserDao.xml"/>
      </mappers>
      
    </configuration>
    
    1.3.2 映射器 UserDao.xml

    创建 SQL 映射器 XML 配置文件 UserDao.xml 并且将它放在 com.kygo.mybatis.mappers 包中

    <?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="com.kygo.mybatis.dao.UserDao">
    
        <resultMap type="User" id="UserResult">
            <id column="userid" property="id" />
            <result column="username" property="username" />
            <result column="email" property="email" />
            <result column="nickname" property="nickname" />
            <result column="gender" property="gender" />
        </resultMap>
        
        <select id="findAll" resultMap="UserResult">
            select * from tb_user
        </select>
        <select id="findByUsername" parameterType="String" resultType="User">
            select * from tb_user where username=#{username}
        </select>
        <insert id="save" parameterType="User">
            insert into tb_user value (default, #{username}, #{password}, #{email},
            #{gender}, #{nickname}, #{photo})
        </insert>
        <delete id="deleteByUsername" parameterType="String">
            delete from tb_user where username=#{username}
        </delete>
        <update id="update" parameterType="User">
            update tb_user set email=#{email} where username=#{username}
        </update>
    </mapper> 
    

    1.3.3 新建 UserDao 接口

    让我们创建一个 UserDao 接口,其定义的方法名和在 Mapper XML 配置文件定义的 SQL 映射语句名称相同;

    public interface UserDao {
        
        public List<User> findAll();
        
        public User findByUsername(String username);
        
        public void save(User user);
        
        public void deleteByUsername(String username);
        
        public void update(User user);
    }
    
    

    1.3.4 测试

        String resource = "mybatis-config.xml";
            InputStream in = Resources.getResourceAsStream(resource);
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
            SqlSession session = sessionFactory.openSession();
            UserDao userDao = session.getMapper(UserDao.class);
            User user = userDao.findByUsername("admin");
            session.close();
    

    1.3.5 它是怎么工作的

    首先,我们配置了 MyBatis 最主要的配置文件-mybatis-config.xml,里面包含了 JDBC 连接参数;配置了映射器Mapper XML 配置文件文件,里面包含了 SQL 语句的映射。
      我们使用 mybatis-config.xml 内的信息创建了SqlSessionFactory 对象。每个数据库环境应该就一个SqlSessionFactory 对象实例,所以我们使用了单例模式只创建一个 SqlSessionFactory 实例。
      我们创建了一个映射器 Mapper 接口-UserDao,其定义的方法签名和在 UserDao.xml 中定义的完全
    一样(即映射器 Mapper 接口中的方法名跟 UserDao.xml 中的 id 的值相同)。注意 UserDao.xml 中namespace 的值被设置成com.kygo.mybatis.dao.UserDao,是 UserDao 接口的完全限定名。这使我们可以使用接口来调用映射的 SQL 语句。
      在 StudenService.java 中,我们在每一个方法中创建了一个新的 SqlSession,并在方法功能完成后关闭SqlSession。每一个线程应该有它自己的 SqlSession 实例。 SqlSession 对象实例不是线程安全的,并且不被共享。所以 SqlSession 的作用域最好就是其所在方法的作用域。从 Web 应用程序角度上看,SqlSession 应该存在于 request 级别作用域上。

    配置日志

    新建 log4j.properties 文件,添加到 classpath 中

    log4j.rootLogger=DEBUG, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c - %m%n
    

    相关文章

      网友评论

          本文标题:MyBatis学习笔记 - 第001天

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