zoukankan      html  css  js  c++  java
  • Mybatis入门(一)

    简介

      MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
      iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
      当前,最新版本是MyBatis 3.5.2 ,其发布时间是2019年7月15日。

    入门

    1、安装

      要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。

      如果是在Maven构建的项目中则需要添加依赖,将下面的代码写进pom.xml中,也可以去https://mvnrepository.com/寻找需要的依赖进行使用。

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

    2、从 XML 中构建 SqlSessionFactory

      每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的,而SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

      Mybatis包含一个Resources工具,可以加载资源文件

    String resource = "配置文件全限定名";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

      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>
      <environments default="development">
        <environment id="development">
         <!--事务管理器
                    使用mysql的事务管理器来管理事务
                -->
          <transactionManager type="JDBC"/>
          <!--数据源-->
          <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
          </dataSource>
        </environment>
      </environments>
      <!--关联Mapper映射文件--> 
      <mappers>
        <mapper resource="映射文件的全限定名,这里的映射文件就是后面SqlSession要用到的xml文件"/>
      </mappers>
    </configuration>      

      升级版的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>
        <!--引入连接数据库的属性配置文件-->
        <properties resource="db.properties"/>
    
        <!--配置别名 -->
        <typeAliases>
            <!--配置单个对象的别名-->
            <!--<typeAlias type="com.test.User" alias="User"></typeAlias>-->
            <!--配置一个包所有类的别名,默认别名是类名,大小写不敏感
                可以在bean包的类名上加上@Alias("别名")进行命名
            -->
            <!--<package name="com.test"/>-->
        </typeAliases>
    
    
    
    
        <!-- 配置环境
            default:development启动时使用哪个环境
        -->
        <environments default="development">
            <environment id="development">
            <!-- 使用mysql的事物管理器来管理事务-->
                <transactionManager type="JDBC"/>
                <!--数据源-->
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>
    
    
        <!--关联mapper文件-->
        <mappers>
            <mapper resource="com/test/UserMapper.xml"></mapper>
        </mappers>
    
    </configuration>
    使用读取配置文件的方法进行配置

      db.properties文件内容

    driver= com.mysql.jdbc.Driver
    url = jdbc:mysql:///mybatis?
    username = root
    password = ccc

    3、从SqlSessionFactory获取SqlSession

    SqlSession session = sqlSessionFactory.openSession();

    这里提供一个工具类,用来获取SqlSession

    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    public class MybatisUtil {
        private static SqlSessionFactory sf;
        static{
            InputStream in = null;
            try {
        //注意将mybatis.xml文件放入resources文件中,可以随意起名字
                in = Resources.getResourceAsStream("mybatis.xml");
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            sf=new SqlSessionFactoryBuilder().build(in);
        }
        public static SqlSession getSession(){
            return sf.openSession();
        }
    }    
    工具类

    4、SqlSession用来执行语句

    //增加
    int result = session.insert("com.test.dao.IUserDao.save", user);
    //删除
    int result = session.delete("com.test.dao.IUserDao.delete", id);
    //修改
    int result = session.update("com.test.dao.IUserDao.update", user);
    //查询单一对象
    User user = (User)session.selectOne("com.test.dao.IUserDao.find", id);
    //查询所有对象
    List<User> list = session.selectList("com.test.dao.IUserDao.findAll");

    其对应的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">
    <!--namespace一般是接口的全限定名-->
    <mapper namespace="com.test.dao.IUserDao">
        <!--  #{}表示调用对象中响应的get方法-->
        <!--  保存  
        useGeneratedKeys是否返回对应主键值
        keyProperty将主键的值返回给类的哪个属性
        -->
        <insert id="save" useGeneratedKeys="true" keyProperty="id">
            insert into user values(null,#{username},#{password},#{date},#{salary})
        </insert>
    
        <!--  删除  -->
        <delete id="delete">
            delete from user where id=#{id}
        </delete>
    
        <!--  更新  -->
        <update id="update">
            update user set username=#{username},password=#{password},date=#{date},salary=#{salary} where id=#{id}
        </update>
    
        <!--type:把结果集封装成对象的类型-->
        <resultMap id="myResultMap" type="User">
            <id column="id" property="id"/>
            <result column="username" property="username"/>
            <result column="password" property="password"/>
            <result column="date" property="date"/>
            <result column="salary" property="salary"/>
        </resultMap>
    
        <!--  查训一个  -->
        <select id="find" resultMap="myResultMap">
            select * from user where id=#{id}
        </select>
    
        <!--  查询全部 -->
        <select id="findAll" resultType="User">
            select * from user
        </select>
    </mapper>
    xml映射文件

     5、导入日志

      添加属性配置文件,名字必须为log4j.properties

    # ERROR>WARN>INFO>DEBUG>TRACE
    
    # Global logging configuration
    log4j.rootLogger=ERROR, stdout
    # MyBatis logging configuration...
    <!--修改下面的路径即可进行日志记录-->
    log4j.logger.com.test.dao=TRACE
    
    
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

      导入依赖

      <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.17</version>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.7.25</version>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.7.25</version>
          <scope>test</scope>
        </dependency>
    日志依赖
  • 相关阅读:
    [笔记]JavaScript获得对象属性个数的方法
    [转]去除inline-block元素间间距的N种方法
    表单提交成功如何弹出提示
    [笔记]CSS样式声明顺序
    [转]浏览器渲染机制——一定要放在body底部的js引用
    [笔记]使用clearfix清除浮动
    [转]jQuery.validate插件在失去焦点时执行验证代码
    验证常用正则表达式
    字符串与Objec之间互相转换
    $.extend()
  • 原文地址:https://www.cnblogs.com/xfdhh/p/11433061.html
Copyright © 2011-2022 走看看